src/proto2/Physics.cc
author ekku
Thu, 13 Nov 2008 16:00:40 +0000
changeset 44 b165c9a26b2e
child 45 32c876923cac
permissions -rw-r--r--
Physics implementation.
44
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     1
#include "Physics.hh"
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     2
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     3
PhysicsWorld::PhysicsWorld (Vector dimensions) : dimensions(dimensions) {}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     4
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     5
void PhysicsWorld::addObject (PhysicsObject *object) {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     6
	objects.push_back(object);
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     7
}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     8
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
     9
void PhysicsWorld::tick () {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    10
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    11
}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    12
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    13
PhysicsObject::PhysicsObject (mass, position, velocity, force) 
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    14
				: mass(mass), position(position), velocity(velocity), force(force) {}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    15
    
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    16
void PhysicsObject::updatePosition () {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    17
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    18
	// Calculate gravity's influence on the velocity vector
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    19
	this->velocity += GRAVITY_FORCEi / mass * 1.0i / mass * 1.0ff;
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    20
	
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    21
 	Vector newPosition = position + velocity * PHYSICS_TICK_MS;
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    22
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    23
	//TODO Handle the object as a square or a polygon
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    24
	if(newPosition.x < 0 || (newPosition.x > PHYSICS_WORLD_WIDTH)
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    25
		|| (newPosition.y < 0) || (newPosition.y >= PHYSICS_WORLD_HEIGHT)) {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    26
    	
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    27
		// CRASH!
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    28
		this->velocity *= -1;
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    29
	} else {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    30
     	this->position = newPosition;
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    31
	}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    32
}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    33
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    34
void PhysicsObject::applyForce (Vector force) {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    35
	this->velocity += force / mass * 1.0f; 	// The last factor denotes the time.
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    36
											// It should be scaled somehow.
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    37
}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    38
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    39
void PhysicsObjectu::updatePhysics (Vector position, Vector velocity, Vector force) {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    40
 	this->position = position;
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    41
	this->velocity = velocity;
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    42
	this->force = force;
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    43
}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    44
    
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    45
Vector PhysicsObject::getPosition () {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    46
	return this->position;
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    47
}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    48
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    49
void PhysicsObject::tick () {
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    50
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    51
}
b165c9a26b2e Physics implementation.
ekku
parents:
diff changeset
    52