view demos/shooter/scripts/ships/player.py @ 446:2046a1f2f5f2

Adding the shooter demo. This is still a work in progress.
author prock@33b003aa-7bff-0310-803a-e67f0ece8222
date Wed, 31 Mar 2010 15:40:00 +0000
parents
children 64676ea55472
line wrap: on
line source

# -*- coding: utf-8 -*-

# ####################################################################
#  Copyright (C) 2005-2009 by the FIFE team
#  http://www.fifengine.de
#  This file is part of FIFE.
#
#  FIFE is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 2.1 of the License, or (at your option) any later version.
#
#  This library is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public
#  License along with this library; if not, write to the
#  Free Software Foundation, Inc.,
#  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
# ####################################################################

from fife import fife
from scripts.ships.shipbase import Ship
from scripts.common.helpers import Rect


class Player(Ship):
	def __init__(self, scene, shipName, layer):
		super(Player, self).__init__(scene, shipName, layer, True)
		self._bounds = Rect(-100,-100,200,200)
		
	def update(self, timedelta, keystate, camera):
		key = False
		
		oldpos = self.location
		
		if keystate['UP']:
			self.applyThrust(fife.DoublePoint(0,-0.075))
			key = True
		if keystate['DOWN']:
			self.applyThrust(fife.DoublePoint(0,0.075))
			key = True
		if keystate['LEFT']:
			self.applyThrust(fife.DoublePoint(-0.075,0))
			key = True
		if keystate['RIGHT']:
			self.applyThrust(fife.DoublePoint(0.075,0))
			key = True
			
		if not key and self._velocity.length() > 0:
			self.applyBrake(0.075)
		
		super(Player, self).update(timedelta)
		
		#set up the players camera bounds
		#TODO: grab screen resolution from somewhere
		topleft = camera.toMapCoordinates(fife.ScreenPoint(0,0))
		bottomright = camera.toMapCoordinates(fife.ScreenPoint(1024,768))

		#add a little padding to the left edge
		topleft.x += 0.1
		
		camrect = Rect(topleft.x, topleft.y, bottomright.x - topleft.x, bottomright.y - topleft.y)
	
		#player bounding box
		#TODO: make this configurable
		pos = self.location.getExactLayerCoordinates()
		bbox = Rect()
		bbox.x = pos.x - 0.005
		bbox.y = pos.y - 0.005
		bbox.w = 0.01
		bbox.h = 0.01
		
		if not bbox.intersects(camrect):
			if pos.x < topleft.x:
				pos.x += timedelta * 0.0005
				oldpos.setExactLayerCoordinates(pos)
				self._velocity.x = timedelta * 0.0005
			else:
				self._velocity.x = 0

			self._velocity.y = 0

			self.location = oldpos