Added spawnable npcs. Fixed angle-radian convertion functions.

This commit is contained in:
2013-01-22 10:26:58 -04:30
parent 7361223ebf
commit ae7c7d66ed
3 changed files with 140 additions and 6 deletions

View File

@@ -262,6 +262,7 @@ class OmnidirectionalActor(BaseActor):
self.idle_frames = [] self.idle_frames = []
self.moving_frames = [] self.moving_frames = []
self.scared_frames = []
self.current_frame = 0 self.current_frame = 0
def is_moving(self): def is_moving(self):
@@ -355,6 +356,11 @@ class OmnidirectionalActor(BaseActor):
if self.current_frame >= len(self.moving_frames): if self.current_frame >= len(self.moving_frames):
self.current_frame = len(self.moving_frames) - 1 self.current_frame = len(self.moving_frames) - 1
def toggle_scared(self):
aux = self.moving_frames
self.moving_frames = self.scared_frames
self.scared_frames = aux
def draw(self, canvas): def draw(self, canvas):
if self.image is not None: if self.image is not None:
if not self.animated: if not self.animated:

136
ingame.py
View File

@@ -3,6 +3,7 @@
########################################### ###########################################
import math import math
import copy import copy
import random
import pygame import pygame
try: try:
@@ -21,6 +22,8 @@ class InGameState(BaseState):
def __init__(self): def __init__(self):
BaseState.__init__(self) BaseState.__init__(self)
random.seed(None)
self.background_color = (125, 158, 192) self.background_color = (125, 158, 192)
self.next_transition = VALID_STATES['SCORE'] self.next_transition = VALID_STATES['SCORE']
@@ -186,6 +189,119 @@ class InGameState(BaseState):
# Append it to the explosions set. # Append it to the explosions set.
self.explosions.add(explosion) self.explosions.add(explosion)
def create_huggable(self, position):
play_img = imloader.cached_image_loader.get_image_to_screen_percent('gfx/Player/player_idle_front.png')
huggable = actor.OmnidirectionalActor(0, play_img, "Random Huggable", True)
huggable.set_fps(5)
huggable.set_angle(math_utils.ang_2_radians(float(random.randrange(-180, 180, 1))))
huggable.set_velocity([0, 0])
huggable.set_position(position)
huggable.set_constraints(self.constraints)
huggable.move()
gender = random.choice([0, 1])
if gender == 0:
# Create a male huggable.
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Idle_side.png')
huggable.add_idle_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Idle_front.png')
huggable.add_idle_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Idle_side_flipped.png')
huggable.add_idle_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Idle_back.png')
huggable.add_idle_frame(image)
# Add moving frames.
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_side_1.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_side_2.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_front_1.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_front_2.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_side_1_flipped.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_side_2_flipped.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_back_1.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_back_2.png')
huggable.add_moving_frame(image)
huggable.toggle_scared()
# Add scared frames.
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_side_1_scared.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_side_2_scared.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_front_1_scared.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_front_2_scared.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_side_1_scared_flipped.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_side_2_scared_flipped.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_back_1.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/HeHuggable/Walking_back_2.png')
huggable.add_moving_frame(image)
huggable.toggle_scared()
else:
# Create a female huggable.
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Idle_side.png')
huggable.add_idle_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Idle_front.png')
huggable.add_idle_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Idle_side_flipped.png')
huggable.add_idle_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Idle_back.png')
huggable.add_idle_frame(image)
# Add moving frames.
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_side_1.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_side_2.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_front_1.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_front_2.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_side_1_flipped.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_side_2_flipped.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_back_1.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_back_2.png')
huggable.add_moving_frame(image)
huggable.toggle_scared()
# Add scared frames.
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_side_1_scared.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_side_2_scared.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_front_1_scared.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_front_2_scared.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_side_1_scared_flipped.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_side_2_scared_flipped.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_back_1.png')
huggable.add_moving_frame(image)
image = imloader.cached_image_loader.get_image_to_screen_percent('gfx/SheHuggable/Walking_back_2.png')
huggable.add_moving_frame(image)
huggable.toggle_scared()
self.npcs.add(huggable)
def input(self): def input(self):
for event in pygame.event.get(): for event in pygame.event.get():
@@ -247,6 +363,11 @@ class InGameState(BaseState):
self.player.update() self.player.update()
self.recenter_view() self.recenter_view()
for npc in self.npcs:
npc.update()
# TODO: Detect collisions here.
elif self.time_left < -3: elif self.time_left < -3:
# Reset everything. # Reset everything.
self.time_left = 190 self.time_left = 190
@@ -275,12 +396,14 @@ class InGameState(BaseState):
self.cancel = False self.cancel = False
# Remove finished explosions
removal = set() removal = set()
for explosion in self.explosions: for explosion in self.explosions:
if explosion.get_current_frame() == 6: if explosion.get_current_frame() == 6:
removal.add(explosion) removal.add(explosion)
self.explosions.difference_update(removal) self.explosions.difference_update(removal)
# Remove invisible npcs.
removal = set() removal = set()
for npc in self.npcs: for npc in self.npcs:
if not npc.is_visible(): if not npc.is_visible():
@@ -304,13 +427,18 @@ class InGameState(BaseState):
self.game_area.blit(self.background, (0, 0)) self.game_area.blit(self.background, (0, 0))
# Blit everything to the bacground. # Blit everything to the bacground.
# Sort npcs by Y coordinate and draw.
# The idea is to draw npcs near the bottom edge of the screen last.
npc_list = list(self.npcs)
if player.PLAYERS[1].is_alive(): if player.PLAYERS[1].is_alive():
self.player.draw(self.game_area) npc_list.append(self.player)
sorted(npc_list, key = lambda npc: npc.get_position()[1])
for npc in npc_list:
npc.draw(self.game_area)
# Sort explosions by Y coordinate and draw. # Same idea here.
# The idea is to draw explosion near the bottom edge of the screen last.
expl_list = list(self.explosions) expl_list = list(self.explosions)
sorted(expl_list, key = lambda explosion: explosion.get_position()[1], reverse = True) sorted(expl_list, key = lambda explosion: explosion.get_position()[1])
for explosion in expl_list: for explosion in expl_list:
explosion.draw(self.game_area) explosion.draw(self.game_area)

View File

@@ -22,7 +22,7 @@ def angle_vectors_2D(vec1, vec2):
return math.atan2(vec2[1], vec2[0]) - math.atan2(vec1[1], vec1[0]) return math.atan2(vec2[1], vec2[0]) - math.atan2(vec1[1], vec1[0])
def ang_2_radians(ang): def ang_2_radians(ang):
return ang * (180 / PI) return (ang * PI) / 180.0
def radians_2_ang(rad): def radians_2_ang(rad):
return rad * (PI / 180) return (rad * 180.0) / PI