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
  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                bs.app.classic.get_next_tip()
 76                if bs.app.classic is not None
 77                else '',
 78            ),
 79            subs=[('${REMOTE_APP_NAME}', get_remote_app_name())],
 80        )
 81        spc = self._message_spacing
 82        assert self.node
 83        self.node.position = (-200, self._offs_y)
 84        self.title_node.position = (-220, self._offs_y + 3)
 85        keys = {
 86            spc: 0,
 87            spc + 1000: 1.0,
 88            spc + self._message_duration - 1000: 1.0,
 89            spc + self._message_duration: 0.0,
 90        }
 91        bs.animate(
 92            self._combine,
 93            'input3',
 94            {k / 1000.0: v * 0.5 for k, v in list(keys.items())},
 95        )
 96        self.node.text = next_tip
 97
 98    def handlemessage(self, msg: Any) -> Any:
 99        assert not self.expired
100        if isinstance(msg, bs.DieMessage):
101            if self.node:
102                self.node.delete()
103            self.title_node.delete()
104            return None
105        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                bs.app.classic.get_next_tip()
 77                if bs.app.classic is not None
 78                else '',
 79            ),
 80            subs=[('${REMOTE_APP_NAME}', get_remote_app_name())],
 81        )
 82        spc = self._message_spacing
 83        assert self.node
 84        self.node.position = (-200, self._offs_y)
 85        self.title_node.position = (-220, self._offs_y + 3)
 86        keys = {
 87            spc: 0,
 88            spc + 1000: 1.0,
 89            spc + self._message_duration - 1000: 1.0,
 90            spc + self._message_duration: 0.0,
 91        }
 92        bs.animate(
 93            self._combine,
 94            'input3',
 95            {k / 1000.0: v * 0.5 for k, v in list(keys.items())},
 96        )
 97        self.node.text = next_tip
 98
 99    def handlemessage(self, msg: Any) -> Any:
100        assert not self.expired
101        if isinstance(msg, bs.DieMessage):
102            if self.node:
103                self.node.delete()
104            self.title_node.delete()
105            return None
106        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.

node
title_node
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                bs.app.classic.get_next_tip()
77                if bs.app.classic is not None
78                else '',
79            ),
80            subs=[('${REMOTE_APP_NAME}', get_remote_app_name())],
81        )
82        spc = self._message_spacing
83        assert self.node
84        self.node.position = (-200, self._offs_y)
85        self.title_node.position = (-220, self._offs_y + 3)
86        keys = {
87            spc: 0,
88            spc + 1000: 1.0,
89            spc + self._message_duration - 1000: 1.0,
90            spc + self._message_duration: 0.0,
91        }
92        bs.animate(
93            self._combine,
94            'input3',
95            {k / 1000.0: v * 0.5 for k, v in list(keys.items())},
96        )
97        self.node.text = next_tip

Switch the visible tip phrase.

def handlemessage(self, msg: Any) -> Any:
 99    def handlemessage(self, msg: Any) -> Any:
100        assert not self.expired
101        if isinstance(msg, bs.DieMessage):
102            if self.node:
103                self.node.delete()
104            self.title_node.delete()
105            return None
106        return super().handlemessage(msg)

General message handling; can be passed any message object.

Inherited Members
bascenev1._actor.Actor
autoretain
on_expire
expired
exists
is_alive
activity
getactivity