예제 #1
0
	def ShowActor(self, actor):
		while actor.sprite != None:
			actor.sprite.kill()
			actor.sprite = None
			
		actor.sprite = ActorSprite(actor.type, self.frontSprites)
		actor.sprite.rect.center = actor.sector.sprite.rect.center

		if actor.targeted:
			self.ClearTarget()
			self.target_sprite = TargetSprite(self.frontSprites)
			self.target_sprite.rect.center = actor.sprite.rect.center
		actor.sector.blocked = True
예제 #2
0
	def __init__(self, evManager):
		self.evManager = evManager
		self.evManager.RegisterListener( self )

		pygame.init()
		self.window = pygame.display.set_mode((WINDOW_X, WINDOW_Y))
		pygame.display.set_caption( 'RGENGINE' )
		self.background = pygame.Surface((self.window.get_size()))

		self.backSprites = pygame.sprite.RenderUpdates()
		self.frontSprites = pygame.sprite.RenderUpdates()

		self.center_sector_coords = STARTING_COORDS

		self.target_sprite = TargetSprite(self.frontSprites)
		top_left = pygame.Rect((-TILE_SIZE, 0, TILE_SIZE, TILE_SIZE))
		self.target_sprite.rect.center = top_left.center


		self.map = None
예제 #3
0
class PygameView:
	def __init__(self, evManager):
		self.evManager = evManager
		self.evManager.RegisterListener( self )

		pygame.init()
		self.window = pygame.display.set_mode((WINDOW_X, WINDOW_Y))
		pygame.display.set_caption( 'RGENGINE' )
		self.background = pygame.Surface((self.window.get_size()))

		self.backSprites = pygame.sprite.RenderUpdates()
		self.frontSprites = pygame.sprite.RenderUpdates()

		self.center_sector_coords = STARTING_COORDS

		self.target_sprite = TargetSprite(self.frontSprites)
		top_left = pygame.Rect((-TILE_SIZE, 0, TILE_SIZE, TILE_SIZE))
		self.target_sprite.rect.center = top_left.center


		self.map = None

	#----------------------------------------------------------------------
	def SetUpMap(self):
		self.BuildMapSprites()
		self.ShowMap()		
		ev = MapSetUpEvent()
		self.evManager.Post(ev)

	#----------------------------------------------------------------------
	def BuildMapSprites(self):
		map_x = self.map.map_x
		map_y = self.map.map_y

		for y in range(1, map_y):
			for x in range(map_x):
				self.map.sectors[y][x].sprite = SectorSprite(self.map.sectors[y][x],
					self.backSprites)

				squareRect = pygame.Rect( (-TILE_SIZE, 0, TILE_SIZE, TILE_SIZE))
				self.map.sectors[y][x].sprite.rect = squareRect

	#----------------------------------------------------------------------
	def ShowMap(self):
		# use this squareRect as a cursor and go through the
		# columns and rows and assign the rect 
		# positions of the SectorSprites
		squareRect = pygame.Rect((-TILE_SIZE * 2, -TILE_SIZE, TILE_SIZE, TILE_SIZE))

		column = 0
		row = 0
		visible = self.VisibleMap()

		for each in visible:
			for sector in each:
				sector.sprite.rect = squareRect
				squareRect = squareRect.move(TILE_SIZE, 0)
			squareRect = squareRect.move(-(TILE_SIZE *(len(each))), TILE_SIZE)


	#----------------------------------------------------------------------
	def VisibleMap(self):
		start_x = self.center_sector_coords[0] - 2
		start_y = self.center_sector_coords[1] - 1

		half_x = (TILES_X - 1) / 2
		half_y = (TILES_Y - 1) / 2

		upper_left_x = start_x - half_x
		upper_left_y = start_y - half_y

		bottom_right_x = start_x + half_x 
		bottom_right_y = start_y + half_y

		list = []
		
		for y in range(upper_left_y , bottom_right_y + 3):
			foo = []
			for x in range(upper_left_x, bottom_right_x + 4):
				foo.append(self.map.sectors[y][x])
			list.append(foo)
		return list

	#----------------------------------------------------------------------
	def ShowActor(self, actor):
		while actor.sprite != None:
			actor.sprite.kill()
			actor.sprite = None
			
		actor.sprite = ActorSprite(actor.type, self.frontSprites)
		actor.sprite.rect.center = actor.sector.sprite.rect.center

		if actor.targeted:
			self.ClearTarget()
			self.target_sprite = TargetSprite(self.frontSprites)
			self.target_sprite.rect.center = actor.sprite.rect.center
		actor.sector.blocked = True

	#----------------------------------------------------------------------
	def ClearActor(self, actor):
		actor.sector.blocked = False

		if actor.targeted:
				self.ClearTarget()

		if actor.sprite:
			actor.sprite.kill()
			actor.sprite = None
			
		ev = ActorClearedEvent()
		self.evManager.Post(ev)

	#----------------------------------------------------------------------
	def ClearTarget(self):
		if self.target_sprite != None:
					self.target_sprite.kill()
					self.target_sprite = None

	#----------------------------------------------------------------------
	def UpdateCenter(self, actor):
		self.center_sector_coords = actor.sector.location
		self.ShowMap()
		ev = ScreenUpdatedEvent()
		self.evManager.Post(ev)
		
	#----------------------------------------------------------------------
	def GetActorSprite(self, actor):
		for s in self.frontSprites:
			return s
		return None

	#----------------------------------------------------------------------
	def GetSectorSprite(self, sector):
		for s in self.backSprites:
			if hasattr(s, "sector") and s.sector == sector:
				return s

	#----------------------------------------------------------------------
	def GetSector(self, pos):
		for j in self.VisibleMap():
			for i in j:
				if i.sprite.rect.collidepoint(pos):
					return i
		raise Exception("Sector not found onscreen.")

	#----------------------------------------------------------------------
	def draw_everything(self):
		self.backSprites.clear(self.window, self.background)
		self.frontSprites.clear(self.window, self.background)

		self.backSprites.update()
		self.frontSprites.update()

		dirtyRects1 = self.backSprites.draw(self.window)
		dirtyRects2 = self.frontSprites.draw(self.window)

		dirtyRects = dirtyRects1 + dirtyRects2
		pygame.display.update(dirtyRects)

	#----------------------------------------------------------------------
	def Notify(self, event):
		if isinstance(event, TickEvent):
			self.draw_everything()

		elif isinstance(event, EnemiesPlaceEvent):
			self.map = event.map
			self.SetUpMap()

		elif isinstance(event, ActorPlaceEvent):
			self.ShowActor(event.actor)

		elif isinstance(event, ActorMoveEvent):
			self.UpdateCenter(event.actor)

		elif isinstance(event, ActorClearEvent):
			self.ClearActor(event.actor)

		elif isinstance(event, ShowActorEvent):
			self.ShowActor(event.actor)

		elif isinstance(event, UntargetEvent):
			self.ClearTarget()

		elif isinstance(event, MouseClickEvent):
			sector = self.GetSector(event.pos)
			ev = PlayerActionEvent(sector)
			self.evManager.Post(ev)