bascenev1lib.actor.tipstext
Provides tip related Actor(s).
1# Released under the MIT License. See LICENSE for details. 2# 3"""Provides tip related Actor(s).""" 4 5from __future__ import annotations 6 7from typing import TYPE_CHECKING, override 8 9import bascenev1 as bs 10 11if TYPE_CHECKING: 12 from typing import Any 13 14 15class TipsText(bs.Actor): 16 """A bit of text showing various helpful game tips.""" 17 18 def __init__(self, offs_y: float = 100.0): 19 super().__init__() 20 self._tip_scale = 0.8 21 self._tip_title_scale = 1.1 22 self._offs_y = offs_y 23 self.node = bs.newnode( 24 'text', 25 delegate=self, 26 attrs={ 27 'text': '', 28 'scale': self._tip_scale, 29 'h_align': 'left', 30 'maxwidth': 800, 31 'vr_depth': -20, 32 'v_align': 'center', 33 'v_attach': 'bottom', 34 }, 35 ) 36 tval = bs.Lstr( 37 value='${A}:', subs=[('${A}', bs.Lstr(resource='tipText'))] 38 ) 39 self.title_node = bs.newnode( 40 'text', 41 delegate=self, 42 attrs={ 43 'text': tval, 44 'scale': self._tip_title_scale, 45 'maxwidth': 122, 46 'h_align': 'right', 47 'vr_depth': -20, 48 'v_align': 'center', 49 'v_attach': 'bottom', 50 }, 51 ) 52 self._message_duration = 10000 53 self._message_spacing = 3000 54 self._change_timer = bs.Timer( 55 0.001 * (self._message_duration + self._message_spacing), 56 bs.WeakCall(self.change_phrase), 57 repeat=True, 58 ) 59 self._combine = bs.newnode( 60 'combine', 61 owner=self.node, 62 attrs={'input0': 1.0, 'input1': 0.8, 'input2': 1.0, 'size': 4}, 63 ) 64 self._combine.connectattr('output', self.node, 'color') 65 self._combine.connectattr('output', self.title_node, 'color') 66 self.change_phrase() 67 68 def change_phrase(self) -> None: 69 """Switch the visible tip phrase.""" 70 from babase import get_remote_app_name 71 72 next_tip = bs.Lstr( 73 translate=( 74 'tips', 75 ( 76 bs.app.classic.get_next_tip() 77 if bs.app.classic is not None 78 else '' 79 ), 80 ), 81 subs=[('${REMOTE_APP_NAME}', get_remote_app_name())], 82 ) 83 spc = self._message_spacing 84 assert self.node 85 self.node.position = (-200, self._offs_y) 86 self.title_node.position = (-220, self._offs_y + 3) 87 keys = { 88 spc: 0, 89 spc + 1000: 1.0, 90 spc + self._message_duration - 1000: 1.0, 91 spc + self._message_duration: 0.0, 92 } 93 bs.animate( 94 self._combine, 95 'input3', 96 {k / 1000.0: v * 0.5 for k, v in list(keys.items())}, 97 ) 98 self.node.text = next_tip 99 100 @override 101 def handlemessage(self, msg: Any) -> Any: 102 assert not self.expired 103 if isinstance(msg, bs.DieMessage): 104 if self.node: 105 self.node.delete() 106 self.title_node.delete() 107 return None 108 return super().handlemessage(msg)
class
TipsText(bascenev1._actor.Actor):
16class TipsText(bs.Actor): 17 """A bit of text showing various helpful game tips.""" 18 19 def __init__(self, offs_y: float = 100.0): 20 super().__init__() 21 self._tip_scale = 0.8 22 self._tip_title_scale = 1.1 23 self._offs_y = offs_y 24 self.node = bs.newnode( 25 'text', 26 delegate=self, 27 attrs={ 28 'text': '', 29 'scale': self._tip_scale, 30 'h_align': 'left', 31 'maxwidth': 800, 32 'vr_depth': -20, 33 'v_align': 'center', 34 'v_attach': 'bottom', 35 }, 36 ) 37 tval = bs.Lstr( 38 value='${A}:', subs=[('${A}', bs.Lstr(resource='tipText'))] 39 ) 40 self.title_node = bs.newnode( 41 'text', 42 delegate=self, 43 attrs={ 44 'text': tval, 45 'scale': self._tip_title_scale, 46 'maxwidth': 122, 47 'h_align': 'right', 48 'vr_depth': -20, 49 'v_align': 'center', 50 'v_attach': 'bottom', 51 }, 52 ) 53 self._message_duration = 10000 54 self._message_spacing = 3000 55 self._change_timer = bs.Timer( 56 0.001 * (self._message_duration + self._message_spacing), 57 bs.WeakCall(self.change_phrase), 58 repeat=True, 59 ) 60 self._combine = bs.newnode( 61 'combine', 62 owner=self.node, 63 attrs={'input0': 1.0, 'input1': 0.8, 'input2': 1.0, 'size': 4}, 64 ) 65 self._combine.connectattr('output', self.node, 'color') 66 self._combine.connectattr('output', self.title_node, 'color') 67 self.change_phrase() 68 69 def change_phrase(self) -> None: 70 """Switch the visible tip phrase.""" 71 from babase import get_remote_app_name 72 73 next_tip = bs.Lstr( 74 translate=( 75 'tips', 76 ( 77 bs.app.classic.get_next_tip() 78 if bs.app.classic is not None 79 else '' 80 ), 81 ), 82 subs=[('${REMOTE_APP_NAME}', get_remote_app_name())], 83 ) 84 spc = self._message_spacing 85 assert self.node 86 self.node.position = (-200, self._offs_y) 87 self.title_node.position = (-220, self._offs_y + 3) 88 keys = { 89 spc: 0, 90 spc + 1000: 1.0, 91 spc + self._message_duration - 1000: 1.0, 92 spc + self._message_duration: 0.0, 93 } 94 bs.animate( 95 self._combine, 96 'input3', 97 {k / 1000.0: v * 0.5 for k, v in list(keys.items())}, 98 ) 99 self.node.text = next_tip 100 101 @override 102 def handlemessage(self, msg: Any) -> Any: 103 assert not self.expired 104 if isinstance(msg, bs.DieMessage): 105 if self.node: 106 self.node.delete() 107 self.title_node.delete() 108 return None 109 return super().handlemessage(msg)
A bit of text showing various helpful game tips.
TipsText(offs_y: float = 100.0)
19 def __init__(self, offs_y: float = 100.0): 20 super().__init__() 21 self._tip_scale = 0.8 22 self._tip_title_scale = 1.1 23 self._offs_y = offs_y 24 self.node = bs.newnode( 25 'text', 26 delegate=self, 27 attrs={ 28 'text': '', 29 'scale': self._tip_scale, 30 'h_align': 'left', 31 'maxwidth': 800, 32 'vr_depth': -20, 33 'v_align': 'center', 34 'v_attach': 'bottom', 35 }, 36 ) 37 tval = bs.Lstr( 38 value='${A}:', subs=[('${A}', bs.Lstr(resource='tipText'))] 39 ) 40 self.title_node = bs.newnode( 41 'text', 42 delegate=self, 43 attrs={ 44 'text': tval, 45 'scale': self._tip_title_scale, 46 'maxwidth': 122, 47 'h_align': 'right', 48 'vr_depth': -20, 49 'v_align': 'center', 50 'v_attach': 'bottom', 51 }, 52 ) 53 self._message_duration = 10000 54 self._message_spacing = 3000 55 self._change_timer = bs.Timer( 56 0.001 * (self._message_duration + self._message_spacing), 57 bs.WeakCall(self.change_phrase), 58 repeat=True, 59 ) 60 self._combine = bs.newnode( 61 'combine', 62 owner=self.node, 63 attrs={'input0': 1.0, 'input1': 0.8, 'input2': 1.0, 'size': 4}, 64 ) 65 self._combine.connectattr('output', self.node, 'color') 66 self._combine.connectattr('output', self.title_node, 'color') 67 self.change_phrase()
Instantiates an Actor in the current bascenev1.Activity.
def
change_phrase(self) -> None:
69 def change_phrase(self) -> None: 70 """Switch the visible tip phrase.""" 71 from babase import get_remote_app_name 72 73 next_tip = bs.Lstr( 74 translate=( 75 'tips', 76 ( 77 bs.app.classic.get_next_tip() 78 if bs.app.classic is not None 79 else '' 80 ), 81 ), 82 subs=[('${REMOTE_APP_NAME}', get_remote_app_name())], 83 ) 84 spc = self._message_spacing 85 assert self.node 86 self.node.position = (-200, self._offs_y) 87 self.title_node.position = (-220, self._offs_y + 3) 88 keys = { 89 spc: 0, 90 spc + 1000: 1.0, 91 spc + self._message_duration - 1000: 1.0, 92 spc + self._message_duration: 0.0, 93 } 94 bs.animate( 95 self._combine, 96 'input3', 97 {k / 1000.0: v * 0.5 for k, v in list(keys.items())}, 98 ) 99 self.node.text = next_tip
Switch the visible tip phrase.
@override
def
handlemessage(self, msg: Any) -> Any:
101 @override 102 def handlemessage(self, msg: Any) -> Any: 103 assert not self.expired 104 if isinstance(msg, bs.DieMessage): 105 if self.node: 106 self.node.delete() 107 self.title_node.delete() 108 return None 109 return super().handlemessage(msg)
General message handling; can be passed any message object.