improved in-app python console readability

This commit is contained in:
Eric 2023-09-07 20:08:43 -07:00
parent 58cec911a6
commit 53b0df2e6d
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
7 changed files with 136 additions and 112 deletions

56
.efrocachemap generated
View File

@ -4064,26 +4064,26 @@
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "c0e542e25f839b32d91a07046bd56333", "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "e1b769cee4e1910b1f624c8c89e4ac57",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "f159a31dcd46f144cc796a6f2cbb0a2a", "build/prefab/full/linux_arm64_gui/release/ballisticakit": "e3b8c7317208183b186cec87460c7c4a",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "f0a7e6c9ad568b229b8299ac15a485b4", "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "d80101bc466f64c24be3919e4465f9a8",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "4c453da417e3e2ab696009f3efb0cbc5", "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "19736e5df72357700c9f29df4cc63256",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "56b10a97ac10e4ff9ae854616f3d58de", "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "11c6eab78eedb694955f72f1d9a3ff28",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "e6a5ecde216f1c180321eec53de8e54d", "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "564e93d203233f683061bd997c9b97a6",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "3170eb1b194b77204b5b3454d271e10d", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "5feb58af7c6324ba1ed40c5fa04dc902",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "368f1eb9a45f3e0d7452e5770f67bd65", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "45300ce2ed2934c04b290771097b57fc",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "4376bee2a3d9b1ac98f418e981bd6b5e", "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "8105175df0aa717e246605d737a8e4ac",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "241bcdfb4a528a4f9714efa9c086a6a6", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "197678caf46d9caa810be6ea31f74056",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "ed0ae25a5332c9e90bc576a41b0e6397", "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "1b9f3662197f33b691ba2c7e3231c06d",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "b0fc89d99bfacf8326a313c0c9d89065", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "e27d0e524256be185f81e661c7eebfcd",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "ab540c6524dfdc31ef55be4726f6a978", "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "c61305f3fcab810444419b7920f592b9",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "d0e6d409f0f5bfa339060bd6024b10f7", "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "aac2b4f520cd94185f41290e99c6efe2",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "287d4e643461591bb897d26f9b24a600", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "5996e4300d00cb15c78595aae9ed354b",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "8f53ad04b1de065d104b7fd28da0e79c", "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "b87de361b664c71b029006a64507c970",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "74fa35f559c38176ff91c794b78d06e2", "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "9eedf6d4715657dbf5b8a014db02f281",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "2cb71ce71f4ac5d8d2bda2af1ebc87b5", "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "915af3b698d4231c67693d13debf6195",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "53ac1a5d801ae8ae82de21ec9d9a6b8d", "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "e80b0dbb306ec03d6787909e2a5e6efb",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "113c82cf8b6c95a2c940c45b97e4b894", "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "24ee229ff8a107d4462b9b3f52c69731",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "6ccd6f2bd0e20520063d4bf8e2c016d0", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "6ccd6f2bd0e20520063d4bf8e2c016d0",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "82e76d58eab4962ee7567fbc655072d6", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "82e76d58eab4962ee7567fbc655072d6",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "6ccd6f2bd0e20520063d4bf8e2c016d0", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "6ccd6f2bd0e20520063d4bf8e2c016d0",
@ -4100,14 +4100,14 @@
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "6b00cce1baf5f95d36ae911cdcb23dba", "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "6b00cce1baf5f95d36ae911cdcb23dba",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "8708149fb6208e4e5889b4742784623d", "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "8708149fb6208e4e5889b4742784623d",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "6b00cce1baf5f95d36ae911cdcb23dba", "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "6b00cce1baf5f95d36ae911cdcb23dba",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "dc9d6facd1062a48245d5fcb603fe5d6", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "a1ef4bb4e27d76089c190ed2203c498b",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "987b189ddac1f90808357749dd44fb2c", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "c72e1610acaca9ddbb425b21fd2b9cb0",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "bf8be09124840f7af212918fa98a34ec", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "2f53cc39631dad4c8932f1255644fba9",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "33ad88b1557e2828c8e0d8be10d9a5ca", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "b16beacb638319086d6d70ecf2b67bc0",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "3cec3a2d11567ff3dda36ace808c6082", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "16a7028dbc1443127f8d53d4387606a6",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "b69a204fea2b6fcfee2cbce63a8edd9a", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "2f7ba6a6a59cd9944c81dbba95dfeef7",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "59874804f88d67858d988cbc746ca601", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "fb12abbd4d7b19b13c6e20d87e2cc8b5",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "d9cb15a56ce8f6e3870cb2a5c83defda", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "3325c38eb737213bffe773e84e769ebf",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c", "src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "f8cd3af311ac63147882590123b78318", "src/assets/ba_data/python/babase/_mgen/enums.py": "f8cd3af311ac63147882590123b78318",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "ad347097a38e0d7ede9eb6dec6a80ee9", "src/ballistica/base/mgen/pyembed/binding_base.inc": "ad347097a38e0d7ede9eb6dec6a80ee9",

View File

@ -1,4 +1,4 @@
### 1.7.28 (build 21322, api 8, 2023-09-07) ### 1.7.28 (build 21324, api 8, 2023-09-07)
- Renamed Console to DevConsole, and added an option under advanced settings to - Renamed Console to DevConsole, and added an option under advanced settings to
always show an ugly 'dev' button onscreen which can be used to toggle it. The always show an ugly 'dev' button onscreen which can be used to toggle it. The
@ -6,6 +6,8 @@
functionality besides just the Python console to the dev-console, and perhaps functionality besides just the Python console to the dev-console, and perhaps
improve the Python console a bit too (add support for on-screen keyboards, improve the Python console a bit too (add support for on-screen keyboards,
etc.) etc.)
- The in-app Python console text is now sized up on phone and tablet devices,
and is generally a bit larger everywhere.
- Added some high level functionality for copying and deleting feature-sets to - Added some high level functionality for copying and deleting feature-sets to
the `spinoff` tool. For example, to create your own `poo` feature-set based on the `spinoff` tool. For example, to create your own `poo` feature-set based on
the existing `template_fs` one, do `tools/spinoff fset-copy template_fs poo`. the existing `template_fs` one, do `tools/spinoff fset-copy template_fs poo`.

View File

@ -52,7 +52,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be # Build number and version of the ballistica binary we expect to be
# using. # using.
TARGET_BALLISTICA_BUILD = 21322 TARGET_BALLISTICA_BUILD = 21324
TARGET_BALLISTICA_VERSION = '1.7.28' TARGET_BALLISTICA_VERSION = '1.7.28'

View File

@ -9,6 +9,7 @@
#include "ballistica/base/input/input.h" #include "ballistica/base/input/input.h"
#include "ballistica/base/logic/logic.h" #include "ballistica/base/logic/logic.h"
#include "ballistica/base/support/context.h" #include "ballistica/base/support/context.h"
#include "ballistica/base/ui/ui.h"
#include "ballistica/core/core.h" #include "ballistica/core/core.h"
#include "ballistica/core/platform/support/min_sdl.h" #include "ballistica/core/platform/support/min_sdl.h"
#include "ballistica/shared/foundation/event_loop.h" #include "ballistica/shared/foundation/event_loop.h"
@ -26,6 +27,24 @@ const int kDevConsoleStringBreakUpSize = 1950;
const int kDevConsoleActivateKey1 = SDLK_BACKQUOTE; const int kDevConsoleActivateKey1 = SDLK_BACKQUOTE;
const int kDevConsoleActivateKey2 = SDLK_F2; const int kDevConsoleActivateKey2 = SDLK_F2;
class DevConsole::Line_ {
public:
Line_(std::string s_in, millisecs_t c)
: creation_time(c), s(std::move(s_in)) {}
millisecs_t creation_time;
std::string s;
auto GetText() -> TextGroup& {
if (!s_mesh_.Exists()) {
s_mesh_ = Object::New<TextGroup>();
s_mesh_->set_text(s);
}
return *s_mesh_;
}
private:
Object::Ref<TextGroup> s_mesh_;
};
DevConsole::DevConsole() { DevConsole::DevConsole() {
assert(g_base->InLogicThread()); assert(g_base->InLogicThread());
std::string title = std::string("BallisticaKit ") + kEngineVersion + " (" std::string title = std::string("BallisticaKit ") + kEngineVersion + " ("
@ -230,9 +249,6 @@ auto DevConsole::HandleKeyRelease(const SDL_Keysym* keysym) -> bool {
return state_ != State::kInactive; return state_ != State::kInactive;
} }
#pragma clang diagnostic push
#pragma ide diagnostic ignored "LocalValueEscapesScope"
void DevConsole::Print(const std::string& s_in) { void DevConsole::Print(const std::string& s_in) {
assert(g_base->InLogicThread()); assert(g_base->InLogicThread());
std::string s = Utils::GetValidUTF8(s_in.c_str(), "cspr"); std::string s = Utils::GetValidUTF8(s_in.c_str(), "cspr");
@ -252,10 +268,9 @@ void DevConsole::Print(const std::string& s_in) {
last_line_mesh_dirty_ = true; last_line_mesh_dirty_ = true;
} }
#pragma clang diagnostic pop
void DevConsole::Draw(RenderPass* pass) { void DevConsole::Draw(RenderPass* pass) {
millisecs_t transition_ticks = 100; millisecs_t transition_ticks = 100;
float bs = PythonConsoleBaseScale();
if ((transition_start_ != 0) if ((transition_start_ != 0)
&& (state_ != State::kInactive && (state_ != State::kInactive
|| ((g_core->GetAppTimeMillisecs() - transition_start_) || ((g_core->GetAppTimeMillisecs() - transition_start_)
@ -264,7 +279,7 @@ void DevConsole::Draw(RenderPass* pass) {
(static_cast<float>(g_core->GetAppTimeMillisecs() - transition_start_) (static_cast<float>(g_core->GetAppTimeMillisecs() - transition_start_)
/ static_cast<float>(transition_ticks)); / static_cast<float>(transition_ticks));
float bottom; float bottom;
float mini_size = 90; float mini_size = 90.0f * bs;
if (state_ == State::kMini) { if (state_ == State::kMini) {
bottom = pass->virtual_height() - mini_size; bottom = pass->virtual_height() - mini_size;
} else { } else {
@ -296,10 +311,10 @@ void DevConsole::Draw(RenderPass* pass) {
bg_mesh_.SetPositionAndSize(0, bottom, kDevConsoleZDepth, bg_mesh_.SetPositionAndSize(0, bottom, kDevConsoleZDepth,
pass->virtual_width(), pass->virtual_width(),
(pass->virtual_height() - bottom)); (pass->virtual_height() - bottom));
stripe_mesh_.SetPositionAndSize(0, bottom + 15, kDevConsoleZDepth, stripe_mesh_.SetPositionAndSize(0, bottom + 15.0f * bs, kDevConsoleZDepth,
pass->virtual_width(), 15); pass->virtual_width(), 15.0f * bs);
shadow_mesh_.SetPositionAndSize(0, bottom - 7, kDevConsoleZDepth, shadow_mesh_.SetPositionAndSize(0, bottom - 7.0f * bs, kDevConsoleZDepth,
pass->virtual_width(), 7); pass->virtual_width(), 7.0f * bs);
SimpleComponent c(pass); SimpleComponent c(pass);
c.SetTransparent(true); c.SetTransparent(true);
c.SetColor(0, 0, 0.1f, 0.9f); c.SetColor(0, 0, 0.1f, 0.9f);
@ -324,40 +339,44 @@ void DevConsole::Draw(RenderPass* pass) {
int elem_count = built_text_group_.GetElementCount(); int elem_count = built_text_group_.GetElementCount();
for (int e = 0; e < elem_count; e++) { for (int e = 0; e < elem_count; e++) {
c.SetTexture(built_text_group_.GetElementTexture(e)); c.SetTexture(built_text_group_.GetElementTexture(e));
c.PushTransform(); {
c.Translate(pass->virtual_width() - 175.0f, bottom + 0, auto xf = c.ScopedTransform();
kDevConsoleZDepth); c.Translate(pass->virtual_width() - 115.0f * bs, bottom + 4.0f,
c.Scale(0.5f, 0.5f, 0.5f); kDevConsoleZDepth);
c.DrawMesh(built_text_group_.GetElementMesh(e)); c.Scale(0.35f * bs, 0.35f * bs, 1.0f);
c.PopTransform(); c.DrawMesh(built_text_group_.GetElementMesh(e));
}
} }
elem_count = title_text_group_.GetElementCount(); elem_count = title_text_group_.GetElementCount();
for (int e = 0; e < elem_count; e++) { for (int e = 0; e < elem_count; e++) {
c.SetTexture(title_text_group_.GetElementTexture(e)); c.SetTexture(title_text_group_.GetElementTexture(e));
c.PushTransform(); {
c.Translate(20.0f, bottom + 0, kDevConsoleZDepth); auto xf = c.ScopedTransform();
c.Scale(0.5f, 0.5f, 0.5f); c.Translate(10.0f * bs, bottom + 4.0f, kDevConsoleZDepth);
c.DrawMesh(title_text_group_.GetElementMesh(e)); c.Scale(0.35f * bs, 0.35f * bs, 1.0f);
c.PopTransform(); c.DrawMesh(title_text_group_.GetElementMesh(e));
}
} }
elem_count = prompt_text_group_.GetElementCount(); elem_count = prompt_text_group_.GetElementCount();
for (int e = 0; e < elem_count; e++) { for (int e = 0; e < elem_count; e++) {
c.SetTexture(prompt_text_group_.GetElementTexture(e)); c.SetTexture(prompt_text_group_.GetElementTexture(e));
c.SetColor(1, 1, 1, 1); c.SetColor(1, 1, 1, 1);
c.PushTransform(); {
c.Translate(5.0f, bottom + 15.0f, kDevConsoleZDepth); auto xf = c.ScopedTransform();
c.Scale(0.5f, 0.5f, 0.5f); c.Translate(5.0f * bs, bottom + 14.5f * bs, kDevConsoleZDepth);
c.DrawMesh(prompt_text_group_.GetElementMesh(e)); c.Scale(0.5f * bs, 0.5f * bs, 1.0f);
c.PopTransform(); c.DrawMesh(prompt_text_group_.GetElementMesh(e));
}
} }
elem_count = input_text_group_.GetElementCount(); elem_count = input_text_group_.GetElementCount();
for (int e = 0; e < elem_count; e++) { for (int e = 0; e < elem_count; e++) {
c.SetTexture(input_text_group_.GetElementTexture(e)); c.SetTexture(input_text_group_.GetElementTexture(e));
c.PushTransform(); {
c.Translate(15.0f, bottom + 15.0f, kDevConsoleZDepth); auto xf = c.ScopedTransform();
c.Scale(0.5f, 0.5f, 0.5f); c.Translate(15.0f * bs, bottom + 14.5f * bs, kDevConsoleZDepth);
c.DrawMesh(input_text_group_.GetElementMesh(e)); c.Scale(0.5f * bs, 0.5f * bs, 1.0f);
c.PopTransform(); c.DrawMesh(input_text_group_.GetElementMesh(e));
}
} }
c.Submit(); c.Submit();
} }
@ -369,26 +388,30 @@ void DevConsole::Draw(RenderPass* pass) {
SimpleComponent c(pass); SimpleComponent c(pass);
c.SetTransparent(true); c.SetTransparent(true);
c.SetColor(1, 1, 1, 0.7f); c.SetColor(1, 1, 1, 0.7f);
c.PushTransform(); {
c.Translate( auto xf = c.ScopedTransform();
19.0f + g_base->text_graphics->GetStringWidth(input_string_) * 0.5f, c.Translate(
bottom + 23.0f, kDevConsoleZDepth); (19.0f
c.Scale(5, 11, 1.0f); + g_base->text_graphics->GetStringWidth(input_string_) * 0.5f)
c.DrawMeshAsset(g_base->assets->SysMesh(SysMeshID::kImage1x1)); * bs,
c.PopTransform(); bottom + 22.5f * bs, kDevConsoleZDepth);
c.Scale(6.0f * bs, 12.0f * bs, 1.0f);
c.DrawMeshAsset(g_base->assets->SysMesh(SysMeshID::kImage1x1));
}
c.Submit(); c.Submit();
} }
// Draw console messages. // Draw output lines.
{ {
float draw_scale = 0.5f; float draw_scale = 0.6f;
float v_inc = 18.0f;
SimpleComponent c(pass); SimpleComponent c(pass);
c.SetTransparent(true); c.SetTransparent(true);
c.SetColor(1, 1, 1, 1); c.SetColor(1, 1, 1, 1);
float h = 0.5f float h = 0.5f
* (g_base->graphics->screen_virtual_width() * (g_base->graphics->screen_virtual_width()
- (kDevConsoleStringBreakUpSize * draw_scale)); - (kDevConsoleStringBreakUpSize * draw_scale));
float v = bottom + 32.0f; float v = bottom + 32.0f * bs;
if (!last_line_.empty()) { if (!last_line_.empty()) {
if (last_line_mesh_dirty_) { if (last_line_mesh_dirty_) {
if (!last_line_mesh_group_.Exists()) { if (!last_line_mesh_group_.Exists()) {
@ -400,25 +423,27 @@ void DevConsole::Draw(RenderPass* pass) {
int elem_count = last_line_mesh_group_->GetElementCount(); int elem_count = last_line_mesh_group_->GetElementCount();
for (int e = 0; e < elem_count; e++) { for (int e = 0; e < elem_count; e++) {
c.SetTexture(last_line_mesh_group_->GetElementTexture(e)); c.SetTexture(last_line_mesh_group_->GetElementTexture(e));
c.PushTransform(); {
c.Translate(h, v + 2, kDevConsoleZDepth); auto xf = c.ScopedTransform();
c.Scale(draw_scale, draw_scale); c.Translate(h, v + 2, kDevConsoleZDepth);
c.DrawMesh(last_line_mesh_group_->GetElementMesh(e)); c.Scale(draw_scale, draw_scale);
c.PopTransform(); c.DrawMesh(last_line_mesh_group_->GetElementMesh(e));
}
} }
v += 14; v += v_inc;
} }
for (auto i = lines_.rbegin(); i != lines_.rend(); i++) { for (auto i = lines_.rbegin(); i != lines_.rend(); i++) {
int elem_count = i->GetText().GetElementCount(); int elem_count = i->GetText().GetElementCount();
for (int e = 0; e < elem_count; e++) { for (int e = 0; e < elem_count; e++) {
c.SetTexture(i->GetText().GetElementTexture(e)); c.SetTexture(i->GetText().GetElementTexture(e));
c.PushTransform(); {
c.Translate(h, v + 2, kDevConsoleZDepth); auto xf = c.ScopedTransform();
c.Scale(draw_scale, draw_scale); c.Translate(h, v + 2, kDevConsoleZDepth);
c.DrawMesh(i->GetText().GetElementMesh(e)); c.Scale(draw_scale, draw_scale);
c.PopTransform(); c.DrawMesh(i->GetText().GetElementMesh(e));
}
} }
v += 14; v += v_inc;
if (v > pass->virtual_height() + 14) { if (v > pass->virtual_height() + 14) {
break; break;
} }
@ -427,5 +452,16 @@ void DevConsole::Draw(RenderPass* pass) {
} }
} }
} }
auto DevConsole::PythonConsoleBaseScale() -> float {
switch (g_base->ui->scale()) {
case UIScale::kLarge:
return 1.5f;
case UIScale::kMedium:
return 1.75f;
case UIScale::kSmall:
case UIScale::kLast:
return 2.0f;
}
}
} // namespace ballistica::base } // namespace ballistica::base

View File

@ -36,6 +36,9 @@ class DevConsole {
void EnableInput(); void EnableInput();
private: private:
class Line_;
auto PythonConsoleBaseScale() -> float;
void SubmitCommand_(const std::string& command); void SubmitCommand_(const std::string& command);
enum class State { kInactive, kMini, kFull }; enum class State { kInactive, kMini, kFull };
ImageMesh bg_mesh_; ImageMesh bg_mesh_;
@ -50,30 +53,11 @@ class DevConsole {
millisecs_t transition_start_{}; millisecs_t transition_start_{};
State state_{State::kInactive}; State state_{State::kInactive};
State state_prev_{State::kInactive}; State state_prev_{State::kInactive};
class Message {
public:
Message(std::string s_in, millisecs_t c)
: creation_time(c), s(std::move(s_in)) {}
millisecs_t creation_time;
std::string s;
auto GetText() -> TextGroup& {
if (!s_mesh_.Exists()) {
s_mesh_ = Object::New<TextGroup>();
s_mesh_->set_text(s);
}
return *s_mesh_;
}
private:
Object::Ref<TextGroup> s_mesh_;
};
bool input_enabled_{}; bool input_enabled_{};
std::string input_string_; std::string input_string_;
std::list<std::string> input_history_; std::list<std::string> input_history_;
int input_history_position_{}; int input_history_position_{};
std::list<Message> lines_; std::list<Line_> lines_;
std::string last_line_; std::string last_line_;
Object::Ref<TextGroup> last_line_mesh_group_; Object::Ref<TextGroup> last_line_mesh_group_;
bool last_line_mesh_dirty_{true}; bool last_line_mesh_dirty_{true};

View File

@ -363,12 +363,15 @@ void UI::DrawDev(FrameDef* frame_def) {
} }
auto UI::DevConsoleButtonSize_() const -> float { auto UI::DevConsoleButtonSize_() const -> float {
if (scale_ == UIScale::kLarge) { switch (scale_) {
return 25.0f; case UIScale::kLarge:
} else if (scale_ == UIScale::kMedium) { return 25.0f;
return 40.0f; case UIScale::kMedium:
return 40.0f;
case UIScale::kSmall:
case UIScale::kLast:
return 60.0f;
} }
return 60.0f;
} }
auto UI::InDevConsoleButton_(float x, float y) const -> bool { auto UI::InDevConsoleButton_(float x, float y) const -> bool {
@ -377,7 +380,7 @@ auto UI::InDevConsoleButton_(float x, float y) const -> bool {
float bsz = DevConsoleButtonSize_(); float bsz = DevConsoleButtonSize_();
float bszh = bsz * 0.5f; float bszh = bsz * 0.5f;
float centerx = vwidth - bsz * 0.5f; float centerx = vwidth - bsz * 0.5f;
float centery = vheight * 0.5f - bsz * 0.5f; float centery = vheight * 0.5f;
float diffx = ::std::abs(centerx - x); float diffx = ::std::abs(centerx - x);
float diffy = ::std::abs(centery - y); float diffy = ::std::abs(centery - y);
return diffx <= bszh && diffy <= bszh; return diffx <= bszh && diffy <= bszh;
@ -402,8 +405,7 @@ void UI::DrawDevConsoleButton_(FrameDef* frame_def) {
} }
{ {
auto xf = c.ScopedTransform(); auto xf = c.ScopedTransform();
c.Translate(vwidth - bsz * 0.5f, vheight * 0.5f - bsz * 0.5f, c.Translate(vwidth - bsz * 0.5f, vheight * 0.5f, kCursorZDepth - 0.01f);
kCursorZDepth - 0.01f);
c.Scale(bsz, bsz, 1.0f); c.Scale(bsz, bsz, 1.0f);
c.DrawMeshAsset(g_base->assets->SysMesh(SysMeshID::kImage1x1)); c.DrawMeshAsset(g_base->assets->SysMesh(SysMeshID::kImage1x1));
{ {

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica { namespace ballistica {
// These are set automatically via script; don't modify them here. // These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21322; const int kEngineBuildNumber = 21324;
const char* kEngineVersion = "1.7.28"; const char* kEngineVersion = "1.7.28";
const int kEngineApiVersion = 8; const int kEngineApiVersion = 8;