Coverage for thb/characters/sakuya.py : 44%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
3# -- stdlib --
4# -- third party --
5# -- own --
6from thb.actions import ActionStage, PlayerTurn, PrepareStage
7from thb.cards.base import Skill
8from thb.cards.classes import AttackCard, TreatAs, t_None
9from thb.characters.base import Character, register_character_to
10from thb.mode import THBEventHandler
13# -- code --
14class Dagger(TreatAs, Skill):
15 skill_category = ['character', 'active']
16 treat_as = AttackCard
17 distance = 99999
19 def check(self):
20 cards = self.associated_cards
21 if len(cards) != 1:
22 return False
24 c = cards[0]
25 if c.resides_in is None:
26 return False
28 if c.resides_in.type not in ('cards', 'showncards', 'equips'):
29 return False
31 if 'equipment' not in c.category:
32 return False
34 return True
37class LunaDialActionStage(ActionStage):
38 def apply_action(self):
39 tags = self.target.tags
40 tags['lunadial'] = True
42 try:
43 return super(LunaDialActionStage, self).apply_action()
44 finally:
45 tags['lunadial'] = False
48class LunaDial(Skill):
49 associated_action = None
50 skill_category = ['character', 'passive', 'compulsory']
51 target = t_None()
54class LunaDialHandler(THBEventHandler):
55 interested = ['action_after']
56 execute_after = ['CiguateraHandler']
58 def handle(self, evt_type, act):
59 if evt_type == 'action_after' and isinstance(act, PrepareStage):
60 src = act.target
61 if not src.has_skill(LunaDial):
62 return act
64 g = self.game
65 PlayerTurn.get_current(g).pending_stages.insert(0, LunaDialActionStage)
67 return act
70@register_character_to('common')
71class Sakuya(Character):
72 skills = [Dagger, LunaDial]
73 eventhandlers = [LunaDialHandler]
74 maxlife = 4