string RocketController::run(string myState) { string game_state_request; for(vector<Entity*>::size_type i = 0; i != controlled_entities.size(); i++) { Entity* ent = controlled_entities[i]; if(ent->getGameState() == myState) { if(ent->getActive()) { //SUBTRACT FUEL SpaceshipComponent* spaceship = (SpaceshipComponent*) ent->getComponent("Spaceship"); float current_fuel = spaceship->getCurrentFuel(); CollectionComponent* collection = (CollectionComponent*) ent->getComponent("Collection"); vector<Entity*> attached_entities = collection->getAttachedEntities(); //Cycling through attached entities for(vector<Entity*>::size_type p = 0; p != attached_entities.size(); p++) { Entity* attached_entity = attached_entities[p]; attached_entity->setActive(true); if(attached_entity->checkIfHasComponent("Rocket")) { RocketComponent* rocket = (RocketComponent*) attached_entity->getComponent("Rocket"); TetheredComponent* tethered = (TetheredComponent*) attached_entity->getComponent("Tethered"); PositionComponent* position = (PositionComponent*) attached_entity->getComponent("Position"); PhysicsComponent* physics = (PhysicsComponent*) attached_entity->getComponent("Physics"); physics->clearForces(); if(rocket->getOnOrOff()) { if(spaceship->getCurrentFuel() - rocket->getFuelConsumption() >= 0) { //The rocket is on float force_exerted = rocket->getForceExerted(); float angle = position->getAngle(); float x = rocket->getForceExerted()*cos(angle); float y = rocket->getForceExerted()*sin(angle); physics->addTranslationalForce(x,y); //Angular Forces float distance = tethered->getDistance(); float angular_force = distance * rocket->getForceExerted() * -sin(tethered->getT()); physics->addAngularForce(angular_force); //Burning fuel spaceship->subtractCurrentFuel(rocket->getFuelConsumption()); } } } } } else { CollectionComponent* collection = (CollectionComponent*) ent->getComponent("Collection"); vector<Entity*> attached_entities = collection->getAttachedEntities(); //Cycling through attached entities for(vector<Entity*>::size_type p = 0; p != attached_entities.size(); p++) { attached_entities[p]->setActive(false); } } } } return game_state_request; }