Changeset 156:94a2456696af


Ignore:
Timestamp:
Sep 2, 2013, 9:52:24 PM (7 years ago)
Author:
Neil Muller <drnlmuller@…>
Branch:
default
Message:

front and back views

File:
1 edited

Legend:

Unmodified
Added
Removed
  • nagslang/protagonist.py

    r143 r156  
    11import pymunk
    22import pymunk.pygame_util
     3
     4import math
    35
    46from nagslang.constants import COLLISION_TYPE_PLAYER, ZORDER_MID
     
    1618
    1719    HUMAN_FORM = 'human'
     20    HUMAN_FORM_BACK = 'human_back'
    1821    WOLF_FORM = 'wolf'
     22    WOLF_FORM_BACK = 'wolf_back'
    1923
    2024    def __init__(self, space, position):
     
    2327        self.inventory = {}
    2428        self.form = self.HUMAN_FORM
     29        self.render_form = self.HUMAN_FORM
    2530
    2631        super(Protagonist, self).__init__(
     
    6469                 self._get_image('human_2.png', FLIP_H),
    6570                 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))),
    6684            self.WOLF_FORM: AnimatedFacingImageRenderer(
    6785                (self._get_image('werewolf_1.png'),
     
    7795                 self._get_image('werewolf_2.png', FLIP_H),
    7896                 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))),
    79110        }
    80111        for renderer in self._renderers.values():
     
    100131        self.impulse_factor = 4000
    101132        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]
    103140
    104141    def go_human(self):
     
    110147        self.impulse_factor = 500
    111148        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]
    113170
    114171    def set_direction(self, dx, dy):
     
    116173            self.renderer.stop()
    117174            return
     175        old_angle = self.angle
    118176        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()
    119186        self._body.apply_impulse(
    120187            (dx * self.impulse_factor, dy * self.impulse_factor))
Note: See TracChangeset for help on using the changeset viewer.