Changeset 156:94a2456696af for nagslang/protagonist.py
- Timestamp:
- 09/02/13 21:52:24 (8 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
nagslang/protagonist.py
r143 r156 1 1 import pymunk 2 2 import pymunk.pygame_util 3 4 import math 3 5 4 6 from nagslang.constants import COLLISION_TYPE_PLAYER, ZORDER_MID … … 16 18 17 19 HUMAN_FORM = 'human' 20 HUMAN_FORM_BACK = 'human_back' 18 21 WOLF_FORM = 'wolf' 22 WOLF_FORM_BACK = 'wolf_back' 19 23 20 24 def __init__(self, space, position): … … 23 27 self.inventory = {} 24 28 self.form = self.HUMAN_FORM 29 self.render_form = self.HUMAN_FORM 25 30 26 31 super(Protagonist, self).__init__( … … 64 69 self._get_image('human_2.png', FLIP_H), 65 70 self._get_image('human_2.png', FLIP_H))), 71 self.HUMAN_FORM_BACK: AnimatedFacingImageRenderer( 72 (self._get_image('human_back_1.png'), 73 self._get_image('human_back_1.png'), 74 self._get_image('human_back_1.png'), 75 self._get_image('human_back_2.png'), 76 self._get_image('human_back_2.png'), 77 self._get_image('human_back_2.png')), 78 (self._get_image('human_back_1.png', FLIP_H), 79 self._get_image('human_back_1.png', FLIP_H), 80 self._get_image('human_back_1.png', FLIP_H), 81 self._get_image('human_back_2.png', FLIP_H), 82 self._get_image('human_back_2.png', FLIP_H), 83 self._get_image('human_back_2.png', FLIP_H))), 66 84 self.WOLF_FORM: AnimatedFacingImageRenderer( 67 85 (self._get_image('werewolf_1.png'), … … 77 95 self._get_image('werewolf_2.png', FLIP_H), 78 96 self._get_image('werewolf_2.png', FLIP_H))), 97 self.WOLF_FORM_BACK: AnimatedFacingImageRenderer( 98 (self._get_image('werewolf_back_1.png'), 99 self._get_image('werewolf_back_1.png'), 100 self._get_image('werewolf_back_1.png'), 101 self._get_image('werewolf_back_2.png'), 102 self._get_image('werewolf_back_2.png'), 103 self._get_image('werewolf_back_2.png')), 104 (self._get_image('werewolf_back_1.png', FLIP_H), 105 self._get_image('werewolf_back_1.png', FLIP_H), 106 self._get_image('werewolf_back_1.png', FLIP_H), 107 self._get_image('werewolf_back_2.png', FLIP_H), 108 self._get_image('werewolf_back_2.png', FLIP_H), 109 self._get_image('werewolf_back_2.png', FLIP_H))), 79 110 } 80 111 for renderer in self._renderers.values(): … … 100 131 self.impulse_factor = 4000 101 132 self._body.damping = 0.9 102 self.renderer = self._renderers[self.form] 133 if self.render_form == self.HUMAN_FORM: 134 self.render_form = self.WOLF_FORM 135 elif self.render_form == self.HUMAN_FORM_BACK: 136 self.render_form = self.WOLF_FORM_BACK 137 else: 138 self.render_form = self.WOLF_FORM 139 self.renderer = self._renderers[self.render_form] 103 140 104 141 def go_human(self): … … 110 147 self.impulse_factor = 500 111 148 self._body.damping = 0.8 112 self.renderer = self._renderers[self.form] 149 if self.render_form == self.WOLF_FORM: 150 self.render_form = self.HUMAN_FORM 151 elif self.render_form == self.WOLF_FORM_BACK: 152 self.render_form = self.HUMAN_FORM_BACK 153 else: 154 self.render_form = self.HUMAN_FORM 155 self.renderer = self._renderers[self.render_form] 156 157 def _switch_to_back(self): 158 if self.render_form == self.HUMAN_FORM: 159 self.render_form = self.HUMAN_FORM_BACK 160 elif self.render_form == self.WOLF_FORM: 161 self.render_form = self.WOLF_FORM_BACK 162 self.renderer = self._renderers[self.render_form] 163 164 def _switch_to_front(self): 165 if self.render_form == self.HUMAN_FORM_BACK: 166 self.render_form = self.HUMAN_FORM 167 elif self.render_form == self.WOLF_FORM_BACK: 168 self.render_form = self.WOLF_FORM 169 self.renderer = self._renderers[self.render_form] 113 170 114 171 def set_direction(self, dx, dy): … … 116 173 self.renderer.stop() 117 174 return 175 old_angle = self.angle 118 176 self.angle = pymunk.Vec2d((dx, dy)).angle 177 # If we've gone from quadrants 2 & 3 to 1 & 4 (or vice versa) 178 # switch between front & back views 179 if self.angle != math.pi: 180 # == math.pi is going straight left, which can't 181 # trigger a front/back swap and simplifies these checks 182 if self.angle > 0 and old_angle != self.angle: 183 self._switch_to_back() 184 elif self.angle < 0 and old_angle != self.angle: 185 self._switch_to_front() 119 186 self._body.apply_impulse( 120 187 (dx * self.impulse_factor, dy * self.impulse_factor))
Note:
See TracChangeset
for help on using the changeset viewer.