Added collision; bounces on collision.

This commit is contained in:
Quantum 2014-02-21 12:45:33 -05:00
parent 69884816ca
commit 973988b911
3 changed files with 23 additions and 2 deletions

View file

@ -1,5 +1,6 @@
from punyverse.orbit import KeplerOrbit
from math import sqrt
from punyverse.orbit import KeplerOrbit
from pyglet.gl import *
@ -16,6 +17,9 @@ class Entity(object):
dx, dy, dz = self.direction
self.location = x + dx, y + dy, z + dz
def collides(self, x, y, z):
return False
class Asteroid(Entity):
def __init__(self, *args, **kwargs):
@ -48,6 +52,7 @@ class Body(Entity):
self.corona = kwargs.pop('corona', 0)
self.last_tick = 0
self.mass = kwargs.pop('mass', None)
self.radius = kwargs.pop('radius', None)
self.world = kwargs.pop('world')
orbit_distance = kwargs.pop('orbit_distance', 40000) + .0
self.orbit_show = orbit_distance * 1.25
@ -65,6 +70,18 @@ class Body(Entity):
roll = (self.initial_roll + self.world.tick * self.rotation_angle) % 360
self.rotation = pitch, yaw, roll
def collides(self, x, y, z):
if self.radius is None:
return False
ox, oy, oz = self.location
dx, dy, dz = x - ox, y - oy, z - oz
distance = sqrt(dx*dx + dy*dy + dz*dz)
if distance > self.radius:
return False
return (ox + dx * self.radius / distance,
oy + dy * self.radius / distance,
oz + dz * self.radius / distance)
class Satellite(Body):
def __init__(self, *args, **kwargs):

View file

@ -351,6 +351,10 @@ class Applet(pyglet.window.Window):
self.world.tick += update
for entity in self.world.tracker:
entity.update()
collision = entity.collides(c.x, c.y, c.z)
if collision:
self.speed *= -1
c.move(self.speed * 12 * dt)
else:
self.__time_accumulate += delta

View file

@ -190,7 +190,7 @@ class World(object):
print 'Nothing to load for %s.' % name
return
params = {'world': self, 'orbit_distance': orbit_distance}
params = {'world': self, 'orbit_distance': orbit_distance, 'radius': None if background else radius}
if parent is None:
type = Body
else: