mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-26 08:53:32 +08:00
tokens meter now properly reflects gold-pass ownership
This commit is contained in:
parent
15af0ae29d
commit
9f4690b5a5
48
.efrocachemap
generated
48
.efrocachemap
generated
@ -4103,22 +4103,22 @@
|
||||
"build/assets/windows/Win32/ucrtbased.dll": "bfd1180c269d3950b76f35a63655e9e1",
|
||||
"build/assets/windows/Win32/vc_redist.x86.exe": "15a5f1f876503885adbdf5b3989b3718",
|
||||
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "3dd66dfcf706962c87c5316e04ec3f31",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "490a8c49e02a4191c30e6ed60d6f4d9f",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "4bf9630c25094e26b55f21728df761aa",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "932ab6ca24fa629f37a6ac0d017eb5af",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "cf4fc2e014a1a704ee512444fe9d364a",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "1a37cd3bebb37683e24e72b9b702e686",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "e3d75d506d866cf41b43608a367683a4",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "8fb682964be158cd645331516ed61440",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "a3317c2c62a6de8f35043afa292cdd04",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "97b41a461f9f71e8e093dd71d1c13ad5",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "a6ec7deb4beacc26ac7399994451605f",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "aa576dc1f944f7300958f95e5cc86984",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "5ae7d93eeb81f265087986579ffa9f11",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "ef8b5ca5e0877b9c0367913b18cba08c",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "e9c42b8a249557bb3b0cee18fbe254c6",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "48677d1e015369fe564f339785d167d7",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "f9803c96c92f7d4dd345603076b3ae72",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "759dc34f67f5d03b90b8aa282f6fe4e4",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "a07cb32525e62f3c608f97cd055c40fa",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "981086385bca1e94252e4840ea9e54a4",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "2e3e7b291de093fe1b90054770b22677",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "1524792f23cb310c22dff77fab4bf44c",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "6ac767ac37d32016240344895cb6974d",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "7bd189a692b78bb9e965a5ca567e316c",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "38d28b24348a815c91ed939e9e92e3af",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "0fa5c2ac8b4d00e41c489c8c8e477690",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "141a7e706c53a56cb266106a8506113b",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "f83f3c9f75266ee12871a4617abeaf4c",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "741045af91f2086f9477fbc0fc41b8dc",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "bba009880748eec4e98dc4f0053de041",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "9664c41727f66a5abbc8ee6d8c894707",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "63b99b77bb6c032f95e01660492a60b7",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "8e0d4fe40c9d3f78dc353b855c36033d",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "7a523edeaea9e8e222e3d9daafd53d3a",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "8e0d4fe40c9d3f78dc353b855c36033d",
|
||||
@ -4131,14 +4131,14 @@
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "b57964942b8ca52efdf51582adc26aee",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "3516e46d80d01cab8b93d3c50a5947bc",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "b57964942b8ca52efdf51582adc26aee",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "92f4e8a1a7a02d67371021e4322fe64e",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "bb65d468a59720259979daa18faed3c4",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "6b7b8ca64ed2e9b0a93a9e3999192ff3",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "d662741332c1face1dd2635959a140dc",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "5c24a04029507fd79add85739e1be722",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "1bb1d8f2be67329d66557a55946a99a2",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "e7de0956d9215dde33ea9f0e487bd092",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "2475fa5570783ac4ab8c8c2360bc11e4",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "14d6093a5de1c5d862b4b7586b8ab7b4",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "5050be44e2391c60654d99a81accf28e",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "763f1f32df0092cded564856ccaa5eee",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "c7904ea044dd0b11510d4f52aae48c1c",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "bdd683789643cef7d01c186ab8d767a2",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "bcd2cc9ae3baa73a7a72f82cbb2aabb8",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "ac256750318d76da7d9fcee90e9bc808",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "f103638e32e70b08af0e79e604cf055d",
|
||||
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
||||
"src/assets/ba_data/python/babase/_mgen/enums.py": "794d258d59fd17a61752843a9a0551ad",
|
||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "06042d31df0ff9af96b99477162e2a91",
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
### 1.7.37 (build 22136, api 9, 2024-12-17)
|
||||
### 1.7.37 (build 22137, api 9, 2024-12-18)
|
||||
- Bumping api version to 9. As you'll see below, there's some UI changes that
|
||||
will require a bit of work for any UI mods to adapt to. If your mods don't
|
||||
touch UI stuff at all you can simply bump your api version and call it a day.
|
||||
|
||||
@ -188,6 +188,7 @@ class ClassicAppMode(babase.AppMode):
|
||||
level_text='-',
|
||||
xp_text='-',
|
||||
inbox_count_text='',
|
||||
gold_pass=False,
|
||||
)
|
||||
|
||||
else:
|
||||
@ -222,6 +223,7 @@ class ClassicAppMode(babase.AppMode):
|
||||
level_text=str(val.level),
|
||||
xp_text=f'{val.xp}/{val.xpmax}',
|
||||
inbox_count_text=ibc,
|
||||
gold_pass=val.gold_pass,
|
||||
)
|
||||
|
||||
def _root_ui_menu_press(self) -> None:
|
||||
|
||||
@ -53,7 +53,7 @@ if TYPE_CHECKING:
|
||||
|
||||
# Build number and version of the ballistica binary we expect to be
|
||||
# using.
|
||||
TARGET_BALLISTICA_BUILD = 22136
|
||||
TARGET_BALLISTICA_BUILD = 22137
|
||||
TARGET_BALLISTICA_VERSION = '1.7.37'
|
||||
|
||||
|
||||
|
||||
@ -303,6 +303,7 @@ static auto PySetRootUIValues(PyObject* self, PyObject* args, PyObject* keywds)
|
||||
const char* level_text;
|
||||
const char* xp_text;
|
||||
const char* inbox_count_text;
|
||||
int gold_pass{};
|
||||
|
||||
static const char* kwlist[] = {"tickets_text",
|
||||
"tokens_text",
|
||||
@ -312,12 +313,13 @@ static auto PySetRootUIValues(PyObject* self, PyObject* args, PyObject* keywds)
|
||||
"level_text",
|
||||
"xp_text",
|
||||
"inbox_count_text",
|
||||
"gold_pass",
|
||||
nullptr};
|
||||
if (!PyArg_ParseTupleAndKeywords(args, keywds, "ssssssss",
|
||||
const_cast<char**>(kwlist), &tickets_text,
|
||||
&tokens_text, &league_rank_text,
|
||||
&league_type, &achievements_percent_text,
|
||||
&level_text, &xp_text, &inbox_count_text)) {
|
||||
if (!PyArg_ParseTupleAndKeywords(
|
||||
args, keywds, "ssssssssp", const_cast<char**>(kwlist), &tickets_text,
|
||||
&tokens_text, &league_rank_text, &league_type,
|
||||
&achievements_percent_text, &level_text, &xp_text, &inbox_count_text,
|
||||
&gold_pass)) {
|
||||
return nullptr;
|
||||
}
|
||||
BA_PRECONDITION(g_base->InLogicThread());
|
||||
@ -334,6 +336,7 @@ static auto PySetRootUIValues(PyObject* self, PyObject* args, PyObject* keywds)
|
||||
appmode->SetRootUILevelText(level_text);
|
||||
appmode->SetRootUIXPText(xp_text);
|
||||
appmode->SetRootUIInboxCountText(inbox_count_text);
|
||||
appmode->SetRootUIGoldPass(gold_pass);
|
||||
|
||||
Py_RETURN_NONE;
|
||||
BA_PYTHON_CATCH;
|
||||
@ -352,6 +355,7 @@ static PyMethodDef PySetRootUIValuesDef = {
|
||||
" level_text: str,\n"
|
||||
" xp_text: str,\n"
|
||||
" inbox_count_text: str,\n"
|
||||
" gold_pass: bool,\n"
|
||||
") -> None\n"
|
||||
"\n"
|
||||
"(internal)",
|
||||
|
||||
@ -150,7 +150,8 @@ void ClassicAppMode::Reset_() {
|
||||
// current values for everything.
|
||||
if (auto* root_widget = uiv1_->root_widget()) {
|
||||
root_widget->SetTicketsMeterText(root_ui_tickets_meter_text_);
|
||||
root_widget->SetTokensMeterText(root_ui_tokens_meter_text_);
|
||||
root_widget->SetTokensMeterText(root_ui_tokens_meter_text_,
|
||||
root_ui_gold_pass_);
|
||||
root_widget->SetLeagueRankText(root_ui_league_rank_text_);
|
||||
root_widget->SetLeagueType(root_ui_league_type_);
|
||||
root_widget->SetAchievementPercentText(root_ui_achievement_percent_text_);
|
||||
@ -1572,7 +1573,8 @@ void ClassicAppMode::SetRootUITokensMeterText(const std::string text) {
|
||||
// Apply it to any existing UI.
|
||||
if (uiv1_) {
|
||||
if (auto* root_widget = uiv1_->root_widget()) {
|
||||
root_widget->SetTokensMeterText(root_ui_tokens_meter_text_);
|
||||
root_widget->SetTokensMeterText(root_ui_tokens_meter_text_,
|
||||
root_ui_gold_pass_);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1676,6 +1678,24 @@ void ClassicAppMode::SetRootUIInboxCountText(const std::string text) {
|
||||
}
|
||||
}
|
||||
|
||||
void ClassicAppMode::SetRootUIGoldPass(bool enabled) {
|
||||
BA_PRECONDITION(g_base->InLogicThread());
|
||||
if (enabled == root_ui_gold_pass_) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Store the value.
|
||||
root_ui_gold_pass_ = enabled;
|
||||
|
||||
// Apply it to any existing UI.
|
||||
if (uiv1_) {
|
||||
if (auto* root_widget = uiv1_->root_widget()) {
|
||||
root_widget->SetTokensMeterText(root_ui_tokens_meter_text_,
|
||||
root_ui_gold_pass_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto ClassicAppMode::GetBottomLeftEdgeHeight() -> float {
|
||||
assert(g_base->InLogicThread());
|
||||
if (uiv1_) {
|
||||
|
||||
@ -223,6 +223,7 @@ class ClassicAppMode : public base::AppMode {
|
||||
void SetRootUILevelText(const std::string text);
|
||||
void SetRootUIXPText(const std::string text);
|
||||
void SetRootUIInboxCountText(const std::string text);
|
||||
void SetRootUIGoldPass(bool enabled);
|
||||
|
||||
private:
|
||||
ClassicAppMode();
|
||||
@ -260,7 +261,8 @@ class ClassicAppMode : public base::AppMode {
|
||||
bool game_roster_dirty_{};
|
||||
bool kick_vote_in_progress_{};
|
||||
bool kick_voting_enabled_{true};
|
||||
bool replay_paused_{false};
|
||||
bool replay_paused_{};
|
||||
bool root_ui_gold_pass_{};
|
||||
|
||||
ui_v1::UIV1FeatureSet* uiv1_{};
|
||||
cJSON* game_roster_{};
|
||||
|
||||
@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
|
||||
namespace ballistica {
|
||||
|
||||
// These are set automatically via script; don't modify them here.
|
||||
const int kEngineBuildNumber = 22136;
|
||||
const int kEngineBuildNumber = 22137;
|
||||
const char* kEngineVersion = "1.7.37";
|
||||
const int kEngineApiVersion = 9;
|
||||
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
#include "ballistica/base/graphics/renderer/render_pass.h"
|
||||
#include "ballistica/base/graphics/support/frame_def.h"
|
||||
#include "ballistica/base/support/context.h"
|
||||
#include "ballistica/shared/buildconfig/buildconfig_common.h"
|
||||
#include "ballistica/shared/foundation/inline.h"
|
||||
#include "ballistica/ui_v1/python/ui_v1_python.h"
|
||||
#include "ballistica/ui_v1/widget/button_widget.h"
|
||||
@ -78,6 +79,7 @@ struct RootWidget::Button {
|
||||
bool selectable{true};
|
||||
bool fully_offscreen{};
|
||||
bool enabled{};
|
||||
bool force_hide{};
|
||||
bool allow_in_main_menu{true};
|
||||
bool allow_in_game{true};
|
||||
uint32_t visibility_mask{};
|
||||
@ -1061,6 +1063,9 @@ void RootWidget::StepChildWidgets_(float dt) {
|
||||
if (&b == back_button_ && !is_small) {
|
||||
enable_button = false;
|
||||
}
|
||||
if (b.force_hide) {
|
||||
enable_button = false;
|
||||
}
|
||||
b.enabled = enable_button;
|
||||
}
|
||||
|
||||
@ -1375,9 +1380,21 @@ void RootWidget::SetTicketsMeterText(const std::string& val) {
|
||||
tickets_meter_text_->widget->SetText(val);
|
||||
}
|
||||
|
||||
void RootWidget::SetTokensMeterText(const std::string& val) {
|
||||
void RootWidget::SetTokensMeterText(const std::string& val, bool gold_pass) {
|
||||
assert(tokens_meter_text_);
|
||||
tokens_meter_text_->widget->SetText(val);
|
||||
assert(get_tokens_button_);
|
||||
if (gold_pass) {
|
||||
get_tokens_button_->force_hide = true;
|
||||
// Use the infinity symbol if we have full unicode support.
|
||||
tokens_meter_text_->widget->SetText(
|
||||
g_buildconfig.enable_os_font_rendering() ? "\xE2\x88\x9E" : "inf");
|
||||
tokens_meter_text_->widget->set_color(1.0f, 0.6f, 0.1f, 0.6f);
|
||||
} else {
|
||||
get_tokens_button_->force_hide = false;
|
||||
tokens_meter_text_->widget->SetText(val);
|
||||
tokens_meter_text_->widget->set_color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
}
|
||||
MarkForUpdate();
|
||||
}
|
||||
|
||||
void RootWidget::SetLeagueRankText(const std::string& val) {
|
||||
|
||||
@ -40,7 +40,7 @@ class RootWidget : public ContainerWidget {
|
||||
void SetAccountState(bool signed_in, const std::string& name);
|
||||
|
||||
void SetTicketsMeterText(const std::string& val);
|
||||
void SetTokensMeterText(const std::string& val);
|
||||
void SetTokensMeterText(const std::string& val, bool gold_pass);
|
||||
void SetLeagueRankText(const std::string& val);
|
||||
void SetLeagueType(const std::string& val);
|
||||
void SetAchievementPercentText(const std::string& val);
|
||||
@ -51,6 +51,7 @@ class RootWidget : public ContainerWidget {
|
||||
auto bottom_left_height() const { return bottom_left_height_; }
|
||||
|
||||
private:
|
||||
void UpdateTokensMeterText_();
|
||||
struct ButtonDef;
|
||||
struct Button;
|
||||
struct TextDef;
|
||||
|
||||
@ -118,11 +118,24 @@ def utc_now_naive() -> datetime.datetime:
|
||||
|
||||
This can be used to replace datetime.utcnow(), which is now deprecated.
|
||||
Most all code should migrate to use timezone-aware times instead of
|
||||
this.
|
||||
relying on this.
|
||||
"""
|
||||
return datetime.datetime.now(datetime.UTC).replace(tzinfo=None)
|
||||
|
||||
|
||||
def utc_from_timestamp_naive(timestamp: float) -> datetime.datetime:
|
||||
"""Get a naive utc time from a timestamp.
|
||||
|
||||
This can be used to replace datetime.utcfromtimestamp(), which is now
|
||||
deprecated. Most all code should migrate to use timezone-aware times
|
||||
instead of relying on this.
|
||||
"""
|
||||
|
||||
return datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).replace(
|
||||
tzinfo=None
|
||||
)
|
||||
|
||||
|
||||
def utc_today() -> datetime.datetime:
|
||||
"""Get offset-aware midnight in the utc time zone."""
|
||||
now = datetime.datetime.now(datetime.UTC)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user