Skip to content

Commit

Permalink
ref: Improved dxlib functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
AsPJT committed Oct 1, 2023
1 parent 07ff368 commit 653e96a
Show file tree
Hide file tree
Showing 11 changed files with 180 additions and 94 deletions.
10 changes: 7 additions & 3 deletions Library/PAX_GRAPHICA/Rect.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -223,10 +223,14 @@ namespace paxg {

#elif defined(PAXS_USING_DXLIB)
int mx = 0, my = 0;
if ((DxLib::GetMouseInput() & MOUSE_INPUT_LEFT) != 0) {
DxLib::GetMousePoint(&mx, &my);
return (mx >= x0 && my >= y0 && mx < x0 + w0 && my < y0 + h0);
if (old_left_mouse) {
// 1 フレーム前にタッチされている
if ((DxLib::GetMouseInput() & MOUSE_INPUT_LEFT) == 0) {
DxLib::GetMousePoint(&mx, &my);
return (mx >= x0 && my >= y0 && mx < x0 + w0 && my < y0 + h0);
}
}

return false;
#else
return false;
Expand Down
89 changes: 64 additions & 25 deletions Library/PAX_GRAPHICA/String.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ namespace paxg {
#if defined(PAXS_USING_SIV3D)
s3d::Font font{};
Font(const int size_, const std::string& path, const int buffer_thickness) {
font = (path.size() == 0)?
s3d::Font(s3d::FontMethod::SDF, size_):
font = (path.size() == 0) ?
s3d::Font(s3d::FontMethod::SDF, size_) :
s3d::Font(s3d::FontMethod::SDF, size_, s3d::Unicode::FromUTF8(path));
font.setBufferThickness(buffer_thickness);
}
Expand Down Expand Up @@ -234,7 +234,7 @@ namespace paxg {
}

#elif defined(PAXS_USING_DXLIB)
int font{}; int h{ 0 };
int font{ -1 }; int h{ 0 };
Font(const int size_, const std::string& path, const int buffer_thickness) {
font = DxLib::CreateFontToHandle(NULL, size_, buffer_thickness);
h = size_;
Expand All @@ -243,39 +243,78 @@ namespace paxg {

}

void drawAlign(int align, paxg::Vec2i pos, std::string str_, const paxg::Color& color_, unsigned int edge_color = 0) const {
// std::size_t string_length;
// align が 0左寄り 1中央寄り 2右寄り
if (align < 0) align = 0;
if (align > 2) align = 2;
std::size_t str_len = str_.size(); // 全体の文字数を得る
int sizex; int sizey; int line_count; // 描画した時のサイズと行数を調べる
DxLib::GetDrawStringSizeToHandle(&sizex, &sizey, &line_count, str_.c_str(), str_len, font, FALSE);
const char* last = &(str_[0]) + str_len; // 終端を得る
const char* next; // 次の改行ポイント
int line_space = DxLib::GetFontLineSpaceToHandle(font); // 一行の縦幅を得る
int str_width; // 一行の横幅
std::size_t char_count = 0; // 描画した文字数をカウント
for (int i = 0; i < line_count; i++) { // 行数分、繰り返す
next = DxLib::strstrDx(str_.c_str(), "\n"); // 次の改行ポイントを探す
if (next == NULL) next = last; // 改行が見つからない場合は最終行ということなので終端を代入
str_len = next - &(str_[0]); // この行の文字数を得る
str_width = DxLib::GetDrawNStringWidthToHandle(str_.c_str(), str_len, font, FALSE); // この行の横幅を得る
// if (char_count < string_length) { // 描画した文字数がまだ指定範囲を超えていない場合
char_count += str_len; // この行の文字数を足す
// if (char_count > string_length) { // この行の中に指定した終端がある場合
// str_len -= (char_count - string_length); // 差分を引いて文字数を調整
// }
// x座標を調整して一行分描画する
DxLib::DrawNStringToHandle(pos.x() + ((align * (sizex - str_width)) / 2), pos.y(),
str_.c_str(), str_len, DxLib::GetColor(color_.r, color_.g, color_.b), font, edge_color, FALSE);
// }
char_count += 1; // 改行文字の分
str_ = std::string(next + 1); // 次の行の先頭にする(+1は改行文字の分)
pos.setY(pos.y() + line_space); // y座標をずらす
}
}

void drawBottomLeft(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
DxLib::DrawFormatString(pos.x(), pos.y() - 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
// DxLib::DrawStringToHandle(pos.x(), pos.y(), str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y() - 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
else DxLib::DrawStringToHandle(pos.x(), pos.y() - 10, str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
}
void drawTopRight(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
// printfDx("%s, x%d, y%d, r%d, g%d, b%d, f%d\n", str.c_str(), pos.x(), pos.y(), color.r, color.g, color.b, font);
int dswth = DxLib::GetDrawStringWidthToHandle(str.c_str(), int(str.size()), font);
int dsw = DxLib::GetDrawStringWidth(str.c_str(), int(str.size()));
// printfDx("dswth:%d, dsw:%d\n", dswth, dsw);
DxLib::DrawFormatString(pos.x(), pos.y() + 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
// DxLib::DrawFormatString(pos.x() - 300, pos.y(), DxLib::GetColor(color.r, color.g, color.b), str.c_str());

if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y() + 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
else {
int size_x = 0, size_y = 0, line_count = 0; // 描画した時のサイズと行数を調べる
DxLib::GetDrawStringSizeToHandle(&size_x, &size_y, &line_count, str.c_str(), str.size(), font, FALSE);
DxLib::DrawStringToHandle(pos.x() - size_x, pos.y() + size_y / 2, str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
}
}
void draw(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
DxLib::DrawFormatString(pos.x(), pos.y(), DxLib::GetColor(color.r, color.g, color.b), str.c_str());
// DxLib::DrawStringToHandle(pos.x(), pos.y(), str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y(), DxLib::GetColor(color.r, color.g, color.b), str.c_str());
else DxLib::DrawStringToHandle(pos.x(), pos.y(), str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
}
void drawBottomCenter(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
DxLib::DrawFormatString(pos.x(), pos.y() - 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
// DxLib::DrawStringToHandle(pos.x(), pos.y(), str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y() - 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
else {
int size_x = 0, size_y = 0, line_count = 0; // 描画した時のサイズと行数を調べる
DxLib::GetDrawStringSizeToHandle(&size_x, &size_y, &line_count, str.c_str(), str.size(), font, FALSE);
DxLib::DrawStringToHandle(pos.x() - size_x / 2, pos.y() - size_y / 2, str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
}
}
void drawTopCenter(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
// printfDx("%s, x%d, y%d, r%d, g%d, b%d, f%d\n", str.c_str(), pos.x(), pos.y(), color.r, color.g, color.b, font);
int dswth = DxLib::GetDrawStringWidthToHandle(str.c_str(), int(str.size()), font);
int dsw = DxLib::GetDrawStringWidth(str.c_str(), int(str.size()));
// printfDx("dswth:%d, dsw:%d\n", dswth, dsw);
DxLib::DrawFormatString(pos.x(), pos.y() + 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
// DxLib::DrawFormatString(pos.x() - 300, pos.y(), DxLib::GetColor(color.r, color.g, color.b), str.c_str());

if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y() + 10, DxLib::GetColor(color.r, color.g, color.b), str.c_str());
else {
int size_x = 0, size_y = 0, line_count = 0; // 描画した時のサイズと行数を調べる
DxLib::GetDrawStringSizeToHandle(&size_x, &size_y, &line_count, str.c_str(), str.size(), font, FALSE);
DxLib::DrawStringToHandle(pos.x() - size_x / 2, pos.y() + size_y / 2, str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
}
}
void drawAt(const std::string& str, const paxg::Vec2i& pos, const paxg::Color& color) const {
DxLib::DrawFormatString(pos.x(), pos.y(), DxLib::GetColor(color.r, color.g, color.b), str.c_str());
// DxLib::DrawStringToHandle(pos.x(), pos.y(), str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
if (font == -1) DxLib::DrawFormatString(pos.x(), pos.y(), DxLib::GetColor(color.r, color.g, color.b), str.c_str());
else {
int size_x = 0, size_y = 0, line_count = 0; // 描画した時のサイズと行数を調べる
DxLib::GetDrawStringSizeToHandle(&size_x, &size_y, &line_count, str.c_str(), str.size(), font, FALSE);
DxLib::DrawStringToHandle(pos.x() - size_x / 2, pos.y(), str.c_str(), DxLib::GetColor(color.r, color.g, color.b), font);
}
}

int height() const {
Expand Down
16 changes: 12 additions & 4 deletions Library/PAX_GRAPHICA/Texture.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,18 @@ namespace paxg {
int texture = -1;

Texture(const paxg::String& path) {
texture = DxLib::LoadGraph(path.string.c_str());
// svgの場合は読み込めないので、pngに拡張子を変換する
std::string path_str = path.string;
paxs::StringExtensions::replace(path_str, ".svg", ".png");

texture = DxLib::LoadGraph(path_str.c_str());
}
Texture(const std::string& path) {
texture = DxLib::LoadGraph(static_cast<paxg::String>(path).string.c_str());
// svgの場合は読み込めないので、pngに拡張子を変換する
std::string path_str = path;
paxs::StringExtensions::replace(path_str, ".svg", ".png");

texture = DxLib::LoadGraph(path_str.c_str());
}
operator bool() const { return (texture != -1); }

Expand All @@ -64,7 +72,7 @@ namespace paxg {
std::string path_str = path.string;
paxs::StringExtensions::replace(path_str, ".svg", ".png");

if(!texture.loadFromFile(path_str)) {
if (!texture.loadFromFile(path_str)) {
paxs::Logger logger("Save/warning_log.txt");
logger.log(paxs::Logger::Level::PAX_WARNING, __FILE__, __LINE__, "Failed to load texture: " + path.string);
}
Expand All @@ -73,7 +81,7 @@ namespace paxg {
// svgの場合は読み込めないので、pngに拡張子を変換する
paxs::StringExtensions::replace(path, ".svg", ".png");

if(!texture.loadFromFile(static_cast<paxg::String>(path))) {
if (!texture.loadFromFile(static_cast<paxg::String>(path))) {
paxs::Logger logger("Save/warning_log.txt");
logger.log(paxs::Logger::Level::PAX_WARNING, __FILE__, __LINE__, "Failed to load texture: " + path);
}
Expand Down
2 changes: 1 addition & 1 deletion Library/PAX_SAPIENTICA/Siv3D/Calendar.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ namespace paxs {

static int calendar_update_counter = 0; // 暦を繰り上げるタイミングを決めるためのカウンタ
++calendar_update_counter;
if (move_forward_in_time) jdn.getDay() += 1.0; // デバッグ
// if (move_forward_in_time) jdn.getDay() += 1.0; // デバッグ
//else if(go_back_in_time) jdn -= 1000;
//if (count >= 0) {
if (calendar_update_counter >= 30) { // カウンタが指定した値を超えたら日付を変える処理を実行
Expand Down
15 changes: 15 additions & 0 deletions Library/PAX_SAPIENTICA/Siv3D/InitLogo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,29 @@ namespace paxs {
#endif
};
// 画面サイズを変更
#ifdef PAXS_USING_DXLIB
// paxg::Window::setSize(1280, 720);
#ifdef __ANDROID__
int w{ 1280 }, h{ 720 };
DxLib::GetAndroidDisplayResolution(&w, &h);
DxLib::SetGraphMode(w, h, 32);
#else
paxg::Window::setSize(1400, 800);
#endif
#else
paxg::Window::setSize(
(!texture_tl) ? 700 : texture_tl.width(), (!texture_tl) ? 180 : texture_tl.height());
#endif
#ifdef PAXS_USING_SIV3D
// ウィンドウの上部のフレームを消す
s3d::Window::SetStyle(s3d::WindowStyle::Frameless);
#endif
// PAX SAPIENTICA 用の背景
#ifdef PAXS_USING_DXLIB
const paxg::Color paxs_color = paxg::Color(140, 180, 250); //
#else
const paxg::Color paxs_color = paxg::Color(181, 0, 0); // 濃い赤
#endif
paxg::Window::setBackgroundColor(paxs_color);
paxg::Window::setLetterbox(paxs_color);
#ifdef PAXS_USING_SIV3D
Expand Down
Loading

0 comments on commit 653e96a

Please sign in to comment.