48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
#include "Engine.h"
|
|
|
|
#include "ModelBase.h"
|
|
|
|
#include "AsteroidEntity.h"
|
|
#include "Controller.h"
|
|
#include "Model.h"
|
|
#include "EntityBase.h"
|
|
|
|
#include "coll2d.h"
|
|
|
|
namespace asteroids {
|
|
|
|
bool AsteroidEntity::CollisionEvent (Engine::EntityBase* entity_state) {
|
|
GameEntityType other_type = (GameEntityType) entity_state->mType;
|
|
|
|
Engine::LogDebug ("CONTACT OF AN ASTEROID");
|
|
|
|
if (other_type == GameEntityTypeRocket) {
|
|
// First remove the rocket
|
|
Engine::KillEntity (entity_state->mId);
|
|
|
|
Engine::LogMessage ("You killed an ASTEROID!");
|
|
|
|
int i;
|
|
for (i = 0; i < mSubAsteroidsCount; i++) {
|
|
AsteroidEntity *asteroid = (AsteroidEntity*) Engine::CreateEntity (GameEntityTypeAsteroid);
|
|
vector3d position (rand()/float(RAND_MAX) * 1. - 0.5, 0., rand()/float(RAND_MAX) * 1. - 0.5);
|
|
asteroid->mSubAsteroidsCount = 0;
|
|
asteroid->mPhysicState->mRadius = 2. * mPhysicState->mRadius / mSubAsteroidsCount;
|
|
static_cast<coll2d::Sphere*>(asteroid->mPhysicState->mShape)->setRadius (asteroid->mPhysicState->mRadius);
|
|
asteroid->mPhysicState->mPosition = mPhysicState->mPosition + position;
|
|
asteroid->mPhysicState->mVelocity = position;
|
|
asteroid->mPhysicState->mAngleVelocity = mPhysicState->mAngleVelocity + (rand()/float(RAND_MAX) * 2. - 1) * mPhysicState->mAngleVelocity;
|
|
}
|
|
|
|
Engine::KillEntity (mId);
|
|
|
|
return true;
|
|
} else if (other_type == GameEntityTypeRocket) {
|
|
return false;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
}
|