コード例 #1
0
ファイル: autopilot.py プロジェクト: cosmonium/cosmonium
 def align_on_equatorial(self, duration=None):
     if duration is None:
         duration = settings.fast_move
     ecliptic_normal = self.ship._frame_rotation.conjugate().xform(J2000EquatorialReferenceFrame.orientation.xform(LVector3d.up()))
     angle = acos(ecliptic_normal.dot(LVector3d.right()))
     direction = ecliptic_normal.cross(LVector3d.right()).dot(LVector3d.forward())
     if direction < 0:
         angle = 2 * pi - angle
     rot=LQuaterniond()
     rot.setFromAxisAngleRad(pi / 2 - angle, LVector3d.forward())
     self.ship.step_turn(rot, absolute=False)
コード例 #2
0
ファイル: nav.py プロジェクト: ondrocks/cosmonium
 def create_drag_params(self, target):
     center = target.get_rel_position_to(self.observer.camera_global_pos)
     self.dragCenter = self.observer.camera_frame.get_rel_position(center)
     dragPosition = self.observer.get_frame_camera_pos()
     self.dragDir = self.dragCenter - dragPosition
     self.dragOrientation = self.observer.get_frame_camera_rot()
     self.dragZAxis = self.dragOrientation.xform(LVector3d.up())
     self.dragXAxis = self.dragOrientation.xform(LVector3d.right())
コード例 #3
0
ファイル: nav.py プロジェクト: ondrocks/cosmonium
 def OnSelectClick(self):
     if self.base.mouseWatcherNode.hasMouse():
         self.mouseSelectClick = True
         mpos = self.base.mouseWatcherNode.getMouse()
         self.startX = mpos.getX()
         self.startY = mpos.getY()
         self.dragCenter = self.observer.get_camera_pos()
         self.dragOrientation = self.observer.get_camera_rot()
         self.dragZAxis = self.dragOrientation.xform(LVector3d.up())
         self.dragXAxis = self.dragOrientation.xform(LVector3d.right())
コード例 #4
0
ファイル: nav.py プロジェクト: ondrocks/cosmonium
    def update(self, dt):
        if self.keyMap['up']:
            self.step(self.speed * self.speed_factor * dt)

        if self.keyMap['down']:
            self.step(-self.speed * self.speed_factor * dt)

        if self.keyMap['left']:
            self.turn(LVector3d.up(), self.rot_step_per_sec * dt)

        if self.keyMap['right']:
            self.turn(LVector3d.up(), -self.rot_step_per_sec * dt)

        if self.keyMap['shift-up']:
            self.turn(LVector3d.right(), self.rot_step_per_sec * dt)

        if self.keyMap['shift-down']:
            self.turn(LVector3d.right(), -self.rot_step_per_sec * dt)

        if self.keyMap['shift-left']:
            self.turn(LVector3d.up(), self.rot_step_per_sec * dt)

        if self.keyMap['shift-right']:
            self.turn(LVector3d.up(), -self.rot_step_per_sec * dt)

        if self.keyMap['control-left']:
            self.turn(LVector3d.forward(), self.rot_step_per_sec * dt)

        if self.keyMap['control-right']:
            self.turn(LVector3d.forward(), -self.rot_step_per_sec * dt)

        if self.keyMap['home']:
            self.change_altitude(self.distance_speed * dt)

        if self.keyMap['end']:
            self.change_altitude(-self.distance_speed * dt)

        if self.wheel_event_time + self.wheel_event_duration > globalClock.getRealTime(
        ):
            distance = self.wheel_direction
            self.change_altitude(distance * self.distance_speed * dt)
コード例 #5
0
ファイル: nav.py プロジェクト: raonyguimaraes/cosmonium
    def update(self, dt):
        if self.keyMap['up']:
            self.step(self.speed * self.speed_factor * dt)

        if self.keyMap['down']:
            self.step(-self.speed * self.speed_factor * dt)

        if self.keyMap['left']:
            self.turn(LVector3d.up(), self.rot_step_per_sec * dt)

        if self.keyMap['right']:
            self.turn(LVector3d.up(), -self.rot_step_per_sec * dt)

        if self.keyMap['shift-up']:
            self.turn(LVector3d.right(), self.rot_step_per_sec * dt)

        if self.keyMap['shift-down']:
            self.turn(LVector3d.right(), -self.rot_step_per_sec * dt)

        if self.keyMap['shift-left']:
            self.turn(LVector3d.up(), self.rot_step_per_sec * dt)

        if self.keyMap['shift-right']:
            self.turn(LVector3d.up(), -self.rot_step_per_sec * dt)

        if self.keyMap['control-left']:
            self.turn(LVector3d.forward(), self.rot_step_per_sec * dt)

        if self.keyMap['control-right']:
            self.turn(LVector3d.forward(), -self.rot_step_per_sec * dt)

        if self.keyMap['home']:
            self.onChangeAltitude(0.1)

        if self.keyMap['end']:
            self.onChangeAltitude(-0.1)
コード例 #6
0
ファイル: nav.py プロジェクト: ondrocks/cosmonium
    def update(self, dt):
        rot_x = 0.0
        rot_y = 0.0
        rot_z = 0.0
        distance = 0.0
        if self.mouseTrackClick and self.base.mouseWatcherNode.hasMouse():
            mpos = self.base.mouseWatcherNode.getMouse()
            deltaX = mpos.getX() - self.startX
            deltaY = mpos.getY() - self.startY
            z_angle = -deltaX * self.dragAngleX
            x_angle = deltaY * self.dragAngleY
            self.do_drag(z_angle, x_angle, True)

        if self.mouseSelectClick and self.base.mouseWatcherNode.hasMouse():
            mpos = self.base.mouseWatcherNode.getMouse()
            deltaX = mpos.getX() - self.startX
            deltaY = mpos.getY() - self.startY
            z_angle = deltaX * self.observer.realCamLens.getHfov(
            ) / 180 * pi / 2
            x_angle = -deltaY * self.observer.realCamLens.getVfov(
            ) / 180 * pi / 2
            self.do_drag(z_angle, x_angle)

        if settings.celestia_nav:
            if self.keyMap['up']:
                rot_x = -1
            if self.keyMap['down']:
                rot_x = 1
        else:
            if self.keyMap['up']:
                rot_x = 1
            if self.keyMap['down']:
                rot_x = -1
        if self.keyMap['left']:
            rot_y = 1
        if self.keyMap['right']:
            rot_y = -1
        if self.keyMap['control-left']:
            rot_z = 1
        if self.keyMap['control-right']:
            rot_z = -1

        if self.keyMap['home']:
            distance = 1
        if self.keyMap['end']:
            distance = -1

        if self.wheel_event_time + self.wheel_event_duration > globalClock.getRealTime(
        ):
            distance = self.wheel_direction

        if not self.keyboardTrack and (self.keyMap['shift-left']
                                       or self.keyMap['shift-right']
                                       or self.keyMap['shift-up']
                                       or self.keyMap['shift-down']):
            target = self.select_target()
            if target is not None:
                self.keyboardTrack = True
                arc_length = pi * target.get_apparent_radius()
                apparent_size = arc_length / (target.distance_to_obs -
                                              target.height_under)
                if apparent_size != 0:
                    self.drag_coef = min(pi, pi / 2 / apparent_size)
                else:
                    self.drag_coef = pi
                self.drag_x = 0.0
                self.drag_z = 0.0
                self.create_drag_params(target)

        if self.keyboardTrack:
            if not (self.keyMap['shift-left'] or self.keyMap['shift-right']
                    or self.keyMap['shift-up'] or self.keyMap['shift-down']):
                self.keyboardTrack = False

            if self.keyMap['shift-left']:
                self.drag_z += self.drag_coef * dt
                self.do_drag(self.drag_z, self.drag_x, True)

            if self.keyMap['shift-right']:
                self.drag_z -= self.drag_coef * dt
                self.do_drag(self.drag_z, self.drag_x, True)

            if self.keyMap['shift-up']:
                self.drag_x += self.drag_coef * dt
                self.do_drag(self.drag_z, self.drag_x, True)

            if self.keyMap['shift-down']:
                self.drag_x -= self.drag_coef * dt
                self.do_drag(self.drag_z, self.drag_x, True)

        if self.keyMap['a']:
            if self.speed == 0:
                self.speed = 0.1
            else:
                self.speed *= exp(dt * 3)

        if self.keyMap['z']:
            if self.speed < 1e-5:
                self.speed = 0
            else:
                self.speed /= exp(dt * 3)
        y = self.speed * dt
        self.stepRelative(0, y, 0)

        if settings.damped_nav:
            #TODO: Refactor this wall of code...
            if rot_x > 0:
                self.current_rot_x_speed += self.incr_speed_rot_step_per_sec * dt
                self.current_rot_x_speed = min(self.current_rot_x_speed,
                                               self.rot_step_per_sec)
            elif rot_x < 0:
                self.current_rot_x_speed -= self.incr_speed_rot_step_per_sec * dt
                self.current_rot_x_speed = max(self.current_rot_x_speed,
                                               -self.rot_step_per_sec)
            elif self.current_rot_x_speed > 0.0:
                self.current_rot_x_speed -= self.decr_speed_rot_step_per_sec * dt
                self.current_rot_x_speed = max(0.0, self.current_rot_x_speed)
            elif self.current_rot_x_speed < 0.0:
                self.current_rot_x_speed += self.decr_speed_rot_step_per_sec * dt
                self.current_rot_x_speed = min(0.0, self.current_rot_x_speed)
            if rot_y > 0:
                self.current_rot_y_speed += self.incr_speed_rot_step_per_sec * dt
                self.current_rot_y_speed = min(self.current_rot_y_speed,
                                               self.rot_step_per_sec)
            elif rot_y < 0:
                self.current_rot_y_speed -= self.incr_speed_rot_step_per_sec * dt
                self.current_rot_y_speed = max(self.current_rot_y_speed,
                                               -self.rot_step_per_sec)
            elif self.current_rot_y_speed > 0.0:
                self.current_rot_y_speed -= self.decr_speed_rot_step_per_sec * dt
                self.current_rot_y_speed = max(0.0, self.current_rot_y_speed)
            elif self.current_rot_y_speed < 0.0:
                self.current_rot_y_speed += self.decr_speed_rot_step_per_sec * dt
                self.current_rot_y_speed = min(0.0, self.current_rot_y_speed)
            if rot_z > 0:
                self.current_rot_z_speed += self.incr_speed_rot_step_per_sec * dt
                self.current_rot_z_speed = min(self.current_rot_z_speed,
                                               self.rot_step_per_sec)
            elif rot_z < 0:
                self.current_rot_z_speed -= self.incr_speed_rot_step_per_sec * dt
                self.current_rot_z_speed = max(self.current_rot_z_speed,
                                               -self.rot_step_per_sec)
            elif self.current_rot_z_speed > 0.0:
                self.current_rot_z_speed -= self.decr_speed_rot_step_per_sec * dt
                self.current_rot_z_speed = max(0.0, self.current_rot_z_speed)
            elif self.current_rot_z_speed < 0.0:
                self.current_rot_z_speed += self.decr_speed_rot_step_per_sec * dt
                self.current_rot_z_speed = min(0.0, self.current_rot_z_speed)
        else:
            self.current_rot_x_speed = rot_x * self.rot_step_per_sec
            self.current_rot_y_speed = rot_y * self.rot_step_per_sec
            self.current_rot_z_speed = rot_z * self.rot_step_per_sec
        self.turn(LVector3d.right(), self.current_rot_x_speed * dt)
        self.turn(LVector3d.forward(), self.current_rot_y_speed * dt)
        self.turn(LVector3d.up(), self.current_rot_z_speed * dt)
        self.change_altitude(distance * self.distance_speed * dt)