Пример #1
0
    def _rotate(self):
        """Control yaw Reaction control system
        based on angle, angular velocity and target angle
        """
        #TODO deltat
        self._angle += self._angular_velocity * seconds(1)
        self.yaw_rcs_status = ''

        signed_delta = float(self._target_angle - self._angle)
        # signed_delta is defined between -180 and 180
        if signed_delta > 180:
            signed_delta -= 360

        if abs(signed_delta) < .1:
            # rotation completed
            self._angular_velocity = degrees_per_sec(0)
            self._angle = self._target_angle
            return

        av = self._angular_velocity
        # momentum should be degrees per (sec ** 2)
        momentum = degrees_per_sec(math.copysign(.1, signed_delta))

        if av != 0 and math.sqrt(2 * abs(signed_delta) / .1) > \
            1.05 * abs(signed_delta / av):
            # closing too fast - better slow down
            self._angular_velocity -= momentum
            cw = momentum < 0
        elif av == 0 or math.sqrt(2 * abs(signed_delta) / .1) < \
            0.95 * abs(signed_delta / av):
            # increase speed
            self._angular_velocity += momentum
            cw = momentum > 0
        else:
            return

        self.yaw_rcs_status = 'YAW CW' if cw else 'YAW CCW'
        t = RCSThruster(self, cw=cw)
        game._particles.append(t)
Пример #2
0
    def _rotate(self):
        """Control yaw Reaction control system
        based on angle, angular velocity and target angle
        """
        #TODO deltat
        self._angle += self._angular_velocity * seconds(1)
        self.yaw_rcs_status = ''

        signed_delta = float(self._target_angle - self._angle)
        # signed_delta is defined between -180 and 180
        if signed_delta > 180:
            signed_delta -= 360

        if abs(signed_delta) < .1:
            # rotation completed
            self._angular_velocity = degrees_per_sec(0)
            self._angle = self._target_angle
            return

        av = self._angular_velocity
        # momentum should be degrees per (sec ** 2)
        momentum = degrees_per_sec(math.copysign(.1, signed_delta))

        if av != 0 and math.sqrt(2 * abs(signed_delta) / .1) > \
            1.05 * abs(signed_delta / av):
            # closing too fast - better slow down
            self._angular_velocity -= momentum
            cw = momentum < 0
        elif av == 0 or math.sqrt(2 * abs(signed_delta) / .1) < \
            0.95 * abs(signed_delta / av):
            # increase speed
            self._angular_velocity += momentum
            cw = momentum > 0
        else:
            return

        self.yaw_rcs_status = 'YAW CW' if cw else 'YAW CCW'
        t = RCSThruster(self, cw=cw)
        game._particles.append(t)
Пример #3
0
 def __init__(self, gcenter):
     gloss.Sprite.__init__(self, gloss.Texture('art/shuttle.png'))
     self._angle = degrees(0)
     self._target_angle = degrees(0)
     self._angular_velocity = degrees_per_sec(0)
     self._orbit_prediction_thread = None
     self._orbit_prediction_running = False
     self._raw_scale = .025
     self._raw_scale = .015 # fixme
     self._tp = None
     self.gcenter = gcenter
     self.gspeed = GVector(0, -0.3)
     self.mass = 4
     self.orbit = ()
     self.propellent = 1500
     self.hull_temperature = 0
     self.landing_gears_deployed = False
     self._start_orbit_prediction()
Пример #4
0
 def __init__(self, gcenter):
     gloss.Sprite.__init__(self, gloss.Texture('art/shuttle.png'))
     self._angle = degrees(0)
     self._target_angle = degrees(0)
     self._angular_velocity = degrees_per_sec(0)
     self._orbit_prediction_thread = None
     self._orbit_prediction_running = False
     self._raw_scale = .025
     self._raw_scale = .015  # fixme
     self._tp = None
     self.gcenter = gcenter
     self.gspeed = GVector(0, -0.3)
     self.mass = 4
     self.orbit = ()
     self.propellent = 1500
     self.hull_temperature = 0
     self.landing_gears_deployed = False
     self._start_orbit_prediction()