mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-06 15:47:06 +08:00
Merge pull request #723 from vishal332008/main
Rotating Logo and some other fixes
This commit is contained in:
commit
5868b074cc
@ -396,7 +396,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
bui.buttonwidget(
|
bui.buttonwidget(
|
||||||
parent=rootc,
|
parent=rootc,
|
||||||
color=(0.45, 0.4, 0.5),
|
color=(0.45, 0.4, 0.5),
|
||||||
position=(160, v_offs + 480),
|
position=(160, v_offs + 439),
|
||||||
size=(350, 62),
|
size=(350, 62),
|
||||||
label=(
|
label=(
|
||||||
bui.Lstr(resource='tournamentStandingsText')
|
bui.Lstr(resource='tournamentStandingsText')
|
||||||
@ -489,8 +489,8 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
|
|
||||||
x_offs_extra = 0 if show_next_button else -100
|
x_offs_extra = 0 if show_next_button else -100
|
||||||
self._corner_button_offs = (
|
self._corner_button_offs = (
|
||||||
h_offs + 300.0 + 100.0 + x_offs_extra,
|
h_offs + 300.0 + x_offs_extra,
|
||||||
v_offs + 560.0,
|
v_offs + 519.0,
|
||||||
)
|
)
|
||||||
|
|
||||||
if env.demo or env.arcade:
|
if env.demo or env.arcade:
|
||||||
@ -499,7 +499,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
else:
|
else:
|
||||||
self._league_rank_button = LeagueRankButton(
|
self._league_rank_button = LeagueRankButton(
|
||||||
parent=rootc,
|
parent=rootc,
|
||||||
position=(h_offs + 300 + 100 + x_offs_extra, v_offs + 560),
|
position=(h_offs + 300 + x_offs_extra, v_offs + 519),
|
||||||
size=(100, 60),
|
size=(100, 60),
|
||||||
scale=0.9,
|
scale=0.9,
|
||||||
color=(0.4, 0.4, 0.9),
|
color=(0.4, 0.4, 0.9),
|
||||||
@ -509,7 +509,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
)
|
)
|
||||||
self._store_button_instance = StoreButton(
|
self._store_button_instance = StoreButton(
|
||||||
parent=rootc,
|
parent=rootc,
|
||||||
position=(h_offs + 400 + 100 + x_offs_extra, v_offs + 560),
|
position=(h_offs + 400 + x_offs_extra, v_offs + 519),
|
||||||
show_tickets=True,
|
show_tickets=True,
|
||||||
sale_scale=0.85,
|
sale_scale=0.85,
|
||||||
size=(100, 60),
|
size=(100, 60),
|
||||||
@ -536,9 +536,8 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _update_corner_button_positions(self) -> None:
|
def _update_corner_button_positions(self) -> None:
|
||||||
offs = -55
|
|
||||||
assert self._corner_button_offs is not None
|
assert self._corner_button_offs is not None
|
||||||
pos_x = self._corner_button_offs[0] + offs
|
pos_x = self._corner_button_offs[0]
|
||||||
pos_y = self._corner_button_offs[1]
|
pos_y = self._corner_button_offs[1]
|
||||||
if self._league_rank_button is not None:
|
if self._league_rank_button is not None:
|
||||||
self._league_rank_button.set_position((pos_x, pos_y))
|
self._league_rank_button.set_position((pos_x, pos_y))
|
||||||
@ -716,7 +715,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
color=(0.5, 1, 0.5, 1),
|
color=(0.5, 1, 0.5, 1),
|
||||||
h_align='center',
|
h_align='center',
|
||||||
scale=0.4,
|
scale=0.4,
|
||||||
position=(0, 292),
|
position=(0, 255),
|
||||||
jitter=1.0,
|
jitter=1.0,
|
||||||
).autoretain()
|
).autoretain()
|
||||||
Text(
|
Text(
|
||||||
@ -1277,7 +1276,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
),
|
),
|
||||||
position=(
|
position=(
|
||||||
ts_h_offs - 35 + 95,
|
ts_h_offs - 35 + 95,
|
||||||
ts_height / 2 + 6 + v_offs,
|
ts_height / 2 + 6 + v_offs - 41,
|
||||||
),
|
),
|
||||||
color=(0.4, 0.4, 0.4, 1.0),
|
color=(0.4, 0.4, 0.4, 1.0),
|
||||||
scale=0.7,
|
scale=0.7,
|
||||||
@ -1344,7 +1343,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
ts_height / 2
|
ts_height / 2
|
||||||
+ -ts_height * (i + 1) / 10
|
+ -ts_height * (i + 1) / 10
|
||||||
+ v_offs
|
+ v_offs
|
||||||
+ 11.0,
|
- 30.0,
|
||||||
),
|
),
|
||||||
h_align=Text.HAlign.RIGHT,
|
h_align=Text.HAlign.RIGHT,
|
||||||
v_align=Text.VAlign.CENTER,
|
v_align=Text.VAlign.CENTER,
|
||||||
@ -1361,7 +1360,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
|
|||||||
+ -ts_height * (i + 1) / 10
|
+ -ts_height * (i + 1) / 10
|
||||||
+ v_offs_names
|
+ v_offs_names
|
||||||
+ v_offs
|
+ v_offs
|
||||||
+ 11.0,
|
- 30.0,
|
||||||
),
|
),
|
||||||
maxwidth=80.0 + 100.0 * len(self._playerinfos),
|
maxwidth=80.0 + 100.0 * len(self._playerinfos),
|
||||||
v_align=Text.VAlign.CENTER,
|
v_align=Text.VAlign.CENTER,
|
||||||
|
|||||||
@ -7,6 +7,7 @@ from __future__ import annotations
|
|||||||
import time
|
import time
|
||||||
import random
|
import random
|
||||||
import weakref
|
import weakref
|
||||||
|
import functools
|
||||||
from typing import TYPE_CHECKING, override
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
import bascenev1 as bs
|
import bascenev1 as bs
|
||||||
@ -42,6 +43,7 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]):
|
|||||||
self._update_timer: bs.Timer | None = None
|
self._update_timer: bs.Timer | None = None
|
||||||
self._news: NewsDisplay | None = None
|
self._news: NewsDisplay | None = None
|
||||||
self._attract_mode_timer: bs.Timer | None = None
|
self._attract_mode_timer: bs.Timer | None = None
|
||||||
|
self._logo_rotate_timer: bs.Timer | None = None
|
||||||
|
|
||||||
@override
|
@override
|
||||||
def on_transition_in(self) -> None:
|
def on_transition_in(self) -> None:
|
||||||
@ -566,7 +568,6 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]):
|
|||||||
vr_depth_offset: float = 0.0,
|
vr_depth_offset: float = 0.0,
|
||||||
) -> None:
|
) -> None:
|
||||||
# pylint: disable=too-many-locals
|
# pylint: disable=too-many-locals
|
||||||
|
|
||||||
# Temp easter goodness.
|
# Temp easter goodness.
|
||||||
if custom_texture is None:
|
if custom_texture is None:
|
||||||
custom_texture = self._get_custom_logo_tex_name()
|
custom_texture = self._get_custom_logo_tex_name()
|
||||||
@ -584,6 +585,7 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]):
|
|||||||
bs.newnode(
|
bs.newnode(
|
||||||
'image',
|
'image',
|
||||||
attrs={
|
attrs={
|
||||||
|
'position': (x, y),
|
||||||
'texture': ltex,
|
'texture': ltex,
|
||||||
'mesh_opaque': mopaque,
|
'mesh_opaque': mopaque,
|
||||||
'mesh_transparent': mtrans,
|
'mesh_transparent': mtrans,
|
||||||
@ -592,47 +594,68 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]):
|
|||||||
'attach': 'center',
|
'attach': 'center',
|
||||||
'tilt_translate': 0.21,
|
'tilt_translate': 0.21,
|
||||||
'absolute_scale': True,
|
'absolute_scale': True,
|
||||||
|
'scale': (
|
||||||
|
(2000.0,2000.0) if custom_texture is None
|
||||||
|
else None
|
||||||
|
)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
self._logo_node = logo.node
|
self._logo_node = logo.node
|
||||||
self._word_actors.append(logo)
|
self._word_actors.append(logo)
|
||||||
|
|
||||||
# Add a bit of stop-motion-y jitter to the logo (unless we're in
|
# Add a bit of stop-motion-y jitter to the logo
|
||||||
# VR mode in which case its best to leave things still).
|
# (unless we're in VR mode in which case its best to
|
||||||
|
# leave things still).
|
||||||
assert logo.node
|
assert logo.node
|
||||||
if not bs.app.env.vr:
|
def jitter() -> None:
|
||||||
cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2})
|
if not bs.app.env.vr:
|
||||||
cmb.connectattr('output', logo.node, 'position')
|
cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2})
|
||||||
keys = {}
|
cmb.connectattr('output', logo.node, 'position')
|
||||||
time_v = 0.0
|
keys = {}
|
||||||
|
time_v = 0.0
|
||||||
|
|
||||||
# Gen some random keys for that stop-motion-y look
|
# Gen some random keys for that stop-motion-y look
|
||||||
for _i in range(10):
|
for _i in range(10):
|
||||||
keys[time_v] = x + (random.random() - 0.5) * 0.7 * jitter_scale
|
keys[time_v] = (
|
||||||
time_v += random.random() * 0.1
|
x + (random.random() - 0.5) * 0.7 * jitter_scale
|
||||||
bs.animate(cmb, 'input0', keys, loop=True)
|
)
|
||||||
keys = {}
|
time_v += random.random() * 0.1
|
||||||
time_v = 0.0
|
bs.animate(cmb, 'input0', keys, loop=True)
|
||||||
for _i in range(10):
|
keys = {}
|
||||||
keys[time_v * self._ts] = (
|
time_v = 0.0
|
||||||
y + (random.random() - 0.5) * 0.7 * jitter_scale
|
for _i in range(10):
|
||||||
|
keys[time_v * self._ts] = (
|
||||||
|
y + (random.random() - 0.5) * 0.7 * jitter_scale
|
||||||
|
)
|
||||||
|
time_v += random.random() * 0.1
|
||||||
|
bs.animate(cmb, 'input1', keys, loop=True)
|
||||||
|
|
||||||
|
if custom_texture is None:
|
||||||
|
def rotate_logo() -> None:
|
||||||
|
logo_scale = logo.node.scale
|
||||||
|
logo.node.rotate = logo.node.rotate + 4
|
||||||
|
logo.node.scale = (
|
||||||
|
logo_scale[0] - 20, logo_scale[1] - 20
|
||||||
)
|
)
|
||||||
time_v += random.random() * 0.1
|
if logo.node.rotate >= 356:
|
||||||
bs.animate(cmb, 'input1', keys, loop=True)
|
self._logo_rotate_timer = None
|
||||||
|
jitter()
|
||||||
|
self._logo_rotate_timer = bs.Timer(
|
||||||
|
0.001, functools.partial(rotate_logo), repeat = True
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
logo.node.position = (x, y)
|
jitter()
|
||||||
|
cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2})
|
||||||
|
|
||||||
cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2})
|
keys = {
|
||||||
|
delay: 0.0,
|
||||||
keys = {
|
delay + 0.1: 700.0 * scale,
|
||||||
delay: 0.0,
|
delay + 0.2: 600.0 * scale,
|
||||||
delay + 0.1: 700.0 * scale,
|
}
|
||||||
delay + 0.2: 600.0 * scale,
|
bs.animate(cmb, 'input0', keys)
|
||||||
}
|
bs.animate(cmb, 'input1', keys)
|
||||||
bs.animate(cmb, 'input0', keys)
|
cmb.connectattr('output', logo.node, 'scale')
|
||||||
bs.animate(cmb, 'input1', keys)
|
|
||||||
cmb.connectattr('output', logo.node, 'scale')
|
|
||||||
|
|
||||||
def _start_preloads(self) -> None:
|
def _start_preloads(self) -> None:
|
||||||
# FIXME: The func that calls us back doesn't save/restore state
|
# FIXME: The func that calls us back doesn't save/restore state
|
||||||
|
|||||||
@ -592,3 +592,6 @@ class InGameMenuWindow(bui.MainWindow):
|
|||||||
logging.exception('Error in classic resume callback.')
|
logging.exception('Error in classic resume callback.')
|
||||||
|
|
||||||
classic.main_menu_resume_callbacks.clear()
|
classic.main_menu_resume_callbacks.clear()
|
||||||
|
|
||||||
|
def __del__(self) -> None:
|
||||||
|
self._resume()
|
||||||
|
|||||||
@ -132,7 +132,7 @@ class AdvancedSettingsWindow(bui.MainWindow):
|
|||||||
self._height - (57 if uiscale is bui.UIScale.SMALL else 40),
|
self._height - (57 if uiscale is bui.UIScale.SMALL else 40),
|
||||||
),
|
),
|
||||||
size=(0, 0),
|
size=(0, 0),
|
||||||
scale=0.5 if uiscale is bui.UIScale.SMALL else 1.0,
|
scale=0.65 if uiscale is bui.UIScale.SMALL else 1.0,
|
||||||
text=bui.Lstr(resource=f'{self._r}.titleText'),
|
text=bui.Lstr(resource=f'{self._r}.titleText'),
|
||||||
color=app.ui_v1.title_color,
|
color=app.ui_v1.title_color,
|
||||||
h_align='center',
|
h_align='center',
|
||||||
|
|||||||
@ -148,7 +148,9 @@ class ControlsSettingsWindow(bui.MainWindow):
|
|||||||
|
|
||||||
bui.textwidget(
|
bui.textwidget(
|
||||||
parent=self._root_widget,
|
parent=self._root_widget,
|
||||||
position=(0, height - 49 + yoffs),
|
position=(0, height + yoffs - (
|
||||||
|
75 if uiscale is bui.UIScale.SMALL else 50)
|
||||||
|
),
|
||||||
size=(width, 25),
|
size=(width, 25),
|
||||||
text=bui.Lstr(resource=f'{self._r}.titleText'),
|
text=bui.Lstr(resource=f'{self._r}.titleText'),
|
||||||
color=bui.app.ui_v1.title_color,
|
color=bui.app.ui_v1.title_color,
|
||||||
@ -296,7 +298,8 @@ class ControlsSettingsWindow(bui.MainWindow):
|
|||||||
|
|
||||||
xinput_checkbox = bui.checkboxwidget(
|
xinput_checkbox = bui.checkboxwidget(
|
||||||
parent=self._root_widget,
|
parent=self._root_widget,
|
||||||
position=(100, v + 3),
|
position=(width * (
|
||||||
|
0.35 if uiscale is bui.UIScale.SMALL else 0.25), v + 3),
|
||||||
size=(120, 30),
|
size=(120, 30),
|
||||||
value=(not bui.get_low_level_config_value('enablexinput', 1)),
|
value=(not bui.get_low_level_config_value('enablexinput', 1)),
|
||||||
maxwidth=200,
|
maxwidth=200,
|
||||||
|
|||||||
@ -2499,6 +2499,7 @@ static auto PySetPartyWindowOpen(PyObject* self, PyObject* args,
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
// root_ui->set_party_window_open(static_cast<bool>(value));
|
// root_ui->set_party_window_open(static_cast<bool>(value));
|
||||||
|
g_ui_v1->set_party_window_open(static_cast<bool>(value));
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
BA_PYTHON_CATCH;
|
BA_PYTHON_CATCH;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -102,7 +102,7 @@ bool UIV1FeatureSet::PartyWindowOpen() {
|
|||||||
// if (auto* r = root_ui()) {
|
// if (auto* r = root_ui()) {
|
||||||
// return r->party_window_open();
|
// return r->party_window_open();
|
||||||
// }
|
// }
|
||||||
return false;
|
return party_window_open_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIV1FeatureSet::Draw(base::FrameDef* frame_def) {
|
void UIV1FeatureSet::Draw(base::FrameDef* frame_def) {
|
||||||
|
|||||||
@ -125,6 +125,9 @@ class UIV1FeatureSet : public FeatureSetNativeComponent,
|
|||||||
auto always_use_internal_on_screen_keyboard() const {
|
auto always_use_internal_on_screen_keyboard() const {
|
||||||
return always_use_internal_on_screen_keyboard_;
|
return always_use_internal_on_screen_keyboard_;
|
||||||
}
|
}
|
||||||
|
auto set_party_window_open(bool value) {
|
||||||
|
party_window_open_ = value;
|
||||||
|
}
|
||||||
|
|
||||||
auto HasQuitConfirmDialog() -> bool override;
|
auto HasQuitConfirmDialog() -> bool override;
|
||||||
void ConfirmQuit(QuitType quit_type) override;
|
void ConfirmQuit(QuitType quit_type) override;
|
||||||
@ -135,6 +138,7 @@ class UIV1FeatureSet : public FeatureSetNativeComponent,
|
|||||||
Object::Ref<ContainerWidget> overlay_root_widget_;
|
Object::Ref<ContainerWidget> overlay_root_widget_;
|
||||||
Object::Ref<RootWidget> root_widget_;
|
Object::Ref<RootWidget> root_widget_;
|
||||||
bool always_use_internal_on_screen_keyboard_{};
|
bool always_use_internal_on_screen_keyboard_{};
|
||||||
|
bool party_window_open_{false};
|
||||||
int ui_lock_count_{};
|
int ui_lock_count_{};
|
||||||
int language_state_{};
|
int language_state_{};
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user