Skip to content

Commit

Permalink
add battle scene
Browse files Browse the repository at this point in the history
  • Loading branch information
halcat0x15a committed Jan 16, 2012
1 parent c7d8e60 commit e47399f
Show file tree
Hide file tree
Showing 31 changed files with 43,983 additions and 42 deletions.
117 changes: 116 additions & 1 deletion battle.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,117 @@
import pygame
import display

import objects

from text import *

from OpenGL.GL import *
from OpenGL.GLU import *

from objloader import *

HP_BOUNDS = (650, 500, 100, 50)

class Battle(object):
pass

def _perspective(self):
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(90.0, display.WIDTH / float(display.HEIGHT), 1, 100.0)
glMatrixMode(GL_MODELVIEW)

def _ortho(self):
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, display.WIDTH, 0, display.HEIGHT)
glMatrixMode(GL_MODELVIEW)

def __init__(self, client, player_id, stage_id):
self.client = client
glClearColor(0.0, 0.0, 1.0, 1.0)
self._perspective()
glEnable(GL_LIGHT0)
glLightfv(GL_LIGHT0, GL_POSITION, (-40, 200, 100, 0.0))
glLightfv(GL_LIGHT0, GL_AMBIENT, (0.2, 0.2, 0.2, 1.0))
glLightfv(GL_LIGHT0, GL_DIFFUSE, (0.5, 0.5, 0.5, 1.0))
glShadeModel(GL_SMOOTH)
pygame.mouse.set_visible(False)
pygame.event.set_grab(True)
field = OBJ('feildmap.obj', swapyz=True)
fields = [field]
it_obj = OBJ('ITchar.obj', swapyz=True)
objs = [it_obj]
self.obj = objs[0]
self.field = fields[0]
self.bullet_obj = OBJ('rifle1.obj', swapyz=True)
self.objects = self.client.send(objects.PLAYERS[player_id])
'''
def _range(self, obj, char):
v_list = [[], [], []]
for vertex in obj.vertices:
for i, v in enumerate(vertex):
v_list[i].append(v)
v_range = []
xyz = [char.x, char.y, char.z]
for i, l in enumerate(v_list):
l.sort()
v_range.append((min(l) + xyz[i], max(l) + xyz[i]))
return v_range
def _contains(self, obj, s_char, t_char):
xr, yr, zr = self._range(obj, s_char)
def f(r, n):
return n > r[0] and n < r[1]
return f(xr, t_char.x) and f(yr, t_char.y) and f(zr, t_char.z)
'''
def draw(self):
self._perspective()
glEnable(GL_COLOR_MATERIAL)
glEnable(GL_LIGHTING)
player = self.objects[self.client.identity]
glLoadIdentity()
gluLookAt(player.eye_x(), player.eye_y(), player.eye_z(), player.center_x(), player.center_y(), player.center_z(), 0, 0, 1)
glPushMatrix()
glCallList(self.field.gl_list)
glPopMatrix()
for player in self.objects.values():
glPushMatrix()
glTranslate(player.x, player.y, player.z)
glCallList(self.obj.gl_list)
glPopMatrix()
for bullet in player.bullets:
glPushMatrix()
glTranslate(bullet.center_x(), bullet.center_y(), bullet.center_z())
glCallList(self.bullet_obj.gl_list)
glPopMatrix()
'''self._ortho()
glDisable(GL_COLOR_MATERIAL)
glDisable(GL_LIGHTING)
glPushMatrix()
hp = Text(str(player.life), fontsize=80, color=BLACK)
hp.draw(HP_BOUNDS)
glPopMatrix()
del hp'''

def action(self, controller):
player = self.objects[self.client.identity]
rx, ry = controller.rel()
player.rx += rx
player.ry += ry
player.reaction -= 1
for i, bullet in enumerate(player.bullets):
bullet.forward()
if abs(bullet.x) > 10000 or abs(bullet.y) > 10000:
del player.bullets[i]
continue
'''if self._contains(self.bullet_obj, bullet, player):
player.life -= 10
del player.bullets[i]
continue'''
if controller.up:
player.forward()
if controller.button_a and player.reaction <= 0:
player.bullets.append(objects.Bullet(player))
player.reset_reaction()
self.client.send(player)
return self
11 changes: 5 additions & 6 deletions character_select.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
(320,80,150,150), \
(520,300,150,150), \
(520,80,150,150)]
TITLE_BOUNDS = (80,500,180,53)
TITLE_BOUNDS = (80,500,220,53)

class CharacterSelect(object):

def __init__(self, client):
self.client = client
self.player = None
self.title = Text("Character select", fontsize=160, color=BLACK)
self.player_id = None
self.title = Text("Character Select", fontsize=160, color=BLACK)
self.characters = [Image('world1'), \
Image('world2'), \
Image('world3'), \
Expand All @@ -29,7 +29,7 @@ def __init__(self, client):
def draw(self):
self.title.draw(TITLE_BOUNDS)
for i, image in enumerate(self.characters):
if i == self.player:
if i == self.player_id:
bounds = [x + 10 for x in CHARACTERS_BOUNDS[i]]
image.draw(bounds)
else:
Expand All @@ -39,6 +39,5 @@ def action(self, controller):
pos = controller.pos()
for i, bounds in enumerate(CHARACTERS_BOUNDS):
if controller.button_a and scene.contains(bounds, pos):
self.player = i
self.player_id = i
self.client.send(PLAYERS[i])

29 changes: 19 additions & 10 deletions controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,23 @@
class Controller(object):

def __init__(self):
self.keymap = {BUTTON_A:False, LEFT:False, UP:False, RIGHT:False, DOWN:False}
self._pos = None
self.button_a = False
self.current_key = None
self.left = False
self.right = False
self.up = False
self.down = False

def pos(self):
x, y = self._pos if self._pos else pygame.mouse.get_pos()
return (x, display.HEIGHT - y)

def rel(self):
return self._rel

def poll(self):
self._rel = (0, 0)
for e in pygame.event.get():
if e.type == QUIT:
pygame.quit()
Expand All @@ -28,10 +35,10 @@ def poll(self):
return False
if e.type == JOYAXISMOTION:
x , y = j.get_axis(0), j.get_axis(1)
self.keymap[RIGHT] = True if x > 0.7 else False
self.keymap[UP] = True if y < -0.7 else False
self.keymap[LEFT] = True if x < -0.7 else False
self.keymap[DOWN] = True if y > 0.7 else False
self.left = True if x < -0.7 else False
self.right = True if x > 0.7 else False
self.up = True if y < -0.7 else False
self.down = True if y > 0.7 else False
elif e.type == JOYHATMOTION:
self._pos = (j.get_hat(0), j.get_hat(1))
elif e.type == JOYBUTTONDOWN:
Expand All @@ -42,20 +49,22 @@ def poll(self):
self.button_a = True
elif e.type == MOUSEBUTTONUP:
self.button_a = False
elif e.type == MOUSEMOTION:
self._rel = e.rel
elif e.type == KEYDOWN:
key = e.key
self.current_key = key
self._set_arrow_keymap(e, True)
self._set_arrow_keymap(key, True)
elif e.type == KEYUP:
self._set_arrow_keymap(e.key, False)
return True

def _set_arrow_keymap(self, key, flag):
if key == K_a:
self.keymap[LEFT] = flag
self.left = flag
elif key == K_d:
self.keymap[RIGHT] = flag
self.right = flag
elif key == K_w:
self.keymap[UP] = flag
self.up = flag
elif key == K_s:
self.keymap[DOWN] = flag
self.down = flag
52 changes: 52 additions & 0 deletions data/GH.mtl
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Blender MTL File: ''
# Material Count: 5
newmtl Black
Ns 0.000000
Ka 0.000000 0.000000 0.000000
Kd 0.000000 0.000000 0.000000
Ks 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2


newmtl Blue_Glay
Ns 152.941176
Ka 0.000000 0.000000 0.000000
Kd 0.202042 0.219367 0.216525
Ks 0.263276 0.263276 0.263276
Ni 1.000000
d 1.000000
illum 2


newmtl Material.002
Ns 254.901961
Ka 0.000000 0.000000 0.000000
Kd 0.223451 0.221082 0.221082
Ks 1.476487 1.476487 1.476487
Ni 1.000000
d 1.000000
illum 2


newmtl White
Ns 78.431373
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.322457 0.322457 0.322457
Ni 1.000000
d 1.000000
illum 2


newmtl greenGray
Ns 17.647059
Ka 0.000000 0.000000 0.000000
Kd 0.124850 0.141899 0.134048
Ks 0.233685 0.233685 0.233685
Ni 1.000000
d 1.000000
illum 2


Loading

0 comments on commit e47399f

Please sign in to comment.