void BasicEnemy::fire(std::list<Missile*>& missiles) { if (!mCanSee) return; if (mCooldown > 0) return; mCooldown = COOLDOWN; sf::Vector2f pos; Missile* missile; pos = getTransform().transformPoint(30, 80); missile = new Missile(getScreen(), this); missile->setPosition(pos); missile->setRotation(180+getRotation()); missile->damage = DAMAGE; missiles.push_back(missile); pos = getTransform().transformPoint(70, 80); missile = new Missile(getScreen(), this); missile->setPosition(pos); missile->setRotation(180+getRotation()); missile->damage = DAMAGE; missiles.push_back(missile); mSFX.play(); }
Missile* UnitFactory::createMissile( const char * filename, int faction, const string &modifications, const float damage, float phasedamage, float time, float radialeffect, float radmult, float detonation_radius, ObjSerial netcreate ) { // double startime= queryTime(); Missile * un =new GameMissile( filename, faction, modifications, damage, phasedamage, time, radialeffect, radmult, detonation_radius ); if( netcreate) { KillDuplicateUnits( netcreate); un->SetSerial( netcreate); } return un; // double endtime= queryTime(); // printf ("mcr %f ",endtime-startime); }
bool Ship::FireMissile(int idx, Ship *target) { assert(target); const Equip::Type t = m_equipment.Get(Equip::SLOT_MISSILE, idx); if (t == Equip::NONE) { return false; } m_equipment.Set(Equip::SLOT_MISSILE, idx, Equip::NONE); CalcStats(); matrix4x4d m; GetRotMatrix(m); vector3d dir = m*vector3d(0,0,-1); ShipType::Type mtype; switch (t) { case Equip::MISSILE_SMART: mtype = ShipType::MISSILE_SMART; break; case Equip::MISSILE_NAVAL: mtype = ShipType::MISSILE_NAVAL; break; case Equip::MISSILE_UNGUIDED: mtype = ShipType::MISSILE_UNGUIDED; break; default: case Equip::MISSILE_GUIDED: mtype = ShipType::MISSILE_GUIDED; break; } Missile *missile = new Missile(mtype, this, target); missile->SetRotMatrix(m); missile->SetFrame(GetFrame()); // XXX DODGY! need to put it in a sensible location missile->SetPosition(GetPosition()+50.0*dir); missile->SetVelocity(GetVelocity()); Space::AddBody(missile); return true; }
Missile* UnitFactory::createMissile( const char *filename, int faction, const string &modifications, const float damage, float phasedamage, float time, float radialeffect, float radmult, float detonation_radius, ObjSerial netcreate ) { _Universe->netLock( true ); Missile *un = new Missile( filename, faction, modifications, damage, phasedamage, time, radialeffect, radmult, detonation_radius ); _Universe->netLock( false ); if (netcreate) un->SetSerial( netcreate ); /* * if (!_Universe->netLocked()) { * NetBuffer netbuf; * addMissileBuffer( netbuf, un ); * endBuffer( netbuf ); * VSServer->broadcast( netbuf, 0, _Universe->activeStarSystem()->GetZone(), CMD_ENTERCLIENT, true); * } * VSServer->invalidateSnapshot(); */ return un; }
Missile* UnitFactory::createMissile( const char *filename, int faction, const string &modifications, const float damage, float phasedamage, float time, float radialeffect, float radmult, float detonation_radius, ObjSerial netcreate ) { Missile *un = new GameMissile( filename, faction, modifications, damage, phasedamage, time, radialeffect, radmult, detonation_radius ); if (netcreate) { KillDuplicateUnits( netcreate ); un->SetSerial( netcreate ); } return un; }
bool Ship::FireMissile(int idx, Ship *target) { assert(target); if (GetFlightState() != FLYING) return false; const Equip::Type t = m_equipment.Get(Equip::SLOT_MISSILE, idx); if (t == Equip::NONE) { return false; } m_equipment.Set(Equip::SLOT_MISSILE, idx, Equip::NONE); UpdateEquipStats(); ShipType::Id mtype; switch (t) { case Equip::MISSILE_SMART: mtype = ShipType::MISSILE_SMART; break; case Equip::MISSILE_NAVAL: mtype = ShipType::MISSILE_NAVAL; break; case Equip::MISSILE_UNGUIDED: mtype = ShipType::MISSILE_UNGUIDED; break; default: case Equip::MISSILE_GUIDED: mtype = ShipType::MISSILE_GUIDED; break; } Missile *missile = new Missile(mtype, this, target); missile->SetOrient(GetOrient()); missile->SetFrame(GetFrame()); // XXX DODGY! need to put it in a sensible location vector3d dir = -GetOrient().VectorZ(); missile->SetPosition(GetPosition()+50.0*dir); missile->SetVelocity(GetVelocity()); Pi::game->GetSpace()->AddBody(missile); return true; }
// Get the next free missile of type 'missileType' Missile* SimpleStoresMgr::getSpecificMissile(const base::String* const missileType) { Missile* msl = nullptr; if (missileType != nullptr) { base::PairStream* list = getWeapons(); if (list != nullptr) { // Find the first free (inactive) missile of type weaponType base::List::Item* item = list->getFirstItem(); while (item != nullptr && msl == nullptr) { base::Pair* pair = static_cast<base::Pair*>(item->getValue()); Missile* p = dynamic_cast<Missile*>(pair->object()); if (p != nullptr && p->isInactive()) { // Ok, we have a missile, but is it the type we want? if (*p->getType() == *missileType) { p->ref(); msl = p; } } item = item->getNext(); } list->unref(); } } return msl; }
void testApp::mouseReleased(int x, int y, int button){ ofVec2f target = ofVec2f(x,y); if(state==START_SCREEN){ ofRectangle startb = ofRectangle(START_BUTTON_POS); if( startb.inside(x, y)){ currentLevel = 0; nextLevel(); return; }else{ lines[currentLine].push_back( ofVec2f(x ,y )); } } if(state==PLAYING){ Silo * silo = bestSiloForTarget( target ); if (silo != NULL){ Missile *m = silo->launchMissile(); if(m != NULL){ launch.play(); m->startGood( target ); playerMissiles.push_back(m); }else{ empty.play(); } }else{ empty.play(); } } }
void testApp::nextLevel(){ currentLevel++; startup.play(); e.stopPostExplosionSmoke(); state = PLAYING; levelTime = LEVEL_TIME; playerMissiles.clear(); badMissiles.clear(); for(int i = 0; i < NUM_BAD_MISSILES + 4 * currentLevel; i++){ Missile *m = new Missile(); m->startBad(); badMissiles.push_back(m); } for(int i = 0; i < silos.size(); i++){ silos[i]->revive(); silos[i]->resetMissiles(); } for(int i = 0; i < cities.size(); i++){ cities[i].revive(); } }
Missile* GameObjectFactory::createMissile(Leukocyte* from, Leukocyte* to) { Missile* missile = Missile::createWithFrom(from, to); missile->setPosition(from->getPosition()); return missile; }
void runTerrainDestructionDemo() { isRunning = true; EngineInterface::createEngine("Data/Scripts/config.lua"); EngineInterface::addRenderTask("renderSprites"); EngineInterface::addUpdateTask("performFrustumCulling"); EngineInterface::addGameLoopTask("updateTerrain",updateTerrain); EngineInterface::connectKeyboardAction(Escape,exitTerrainDestructionDemo); EngineInterface::connectMouseAction(LeftButton,fireMissile); FlightCamera* camera = new FlightCamera(Vector3D(0.0f,2000.0f,0.0f),Vector3D(0.0f,0.0f,-1.0f)); EngineInterface::connectKeyboardAction(W,boost::bind(&FlightCamera::moveCameraForward,camera)); EngineInterface::connectMouseMoveAction(boost::bind(&FlightCamera::changeViewTarget,camera,_1,_2)); EngineInterface::addSceneCamera(camera); SceneEntity* terrain = new SceneEntity("Terrain","Terrain","Terrain"); terrain->initializeSceneEntity(); terrain->setEntityPosition(-128.0f*50.0f,0.0f,-128.0f*50.0f); EngineInterface::addIndependentToScene(terrain); SceneEntity* skyDome = new SceneEntity("Sky","SkyDome","SkyDome"); skyDome->initializeSceneEntity(); skyDome->setEntityOrientation(-90.0f,0.0f,0.0f); skyDome->setEntityScale(10000.0f,10000.0f,10000.0f); EngineInterface::addIndependentToScene(skyDome); SceneEntity* flight = new SceneEntity("F16","F16","F16"); flight->initializeSceneEntity(); flight->setEntityScale(0.1f,0.1f,0.1f); flight->setEntityPosition(0.0f,1600.0f,-10.0f); flight->setEntityOrientation(0.0f,180.0f,180.0f); flight->setFunctionUpdating(updateFlight); flight->entityPhysics.velocity.set(20.0f,20.0f,20.0f); flight->entityPhysics.isKinematic = true; EngineInterface::addEntityToScene(flight); Missile* missile = new Missile("Missile","Missile","Missile"); missile->initializeSceneEntity(); missile->setEntityScale(20.0f,20.0f,20.0f); missile->setExtendingUpdating(); missile->entityPhysics.isKinematic = true; missile->entityPhysics.velocity.set(200.0f,200.0f,200.0f); EngineInterface::addEntityToScene(missile); EngineInterface::initializeFont("Font",32); EngineInterface::addSprite("AyumiLogo",Vector3D(-500.0f,-500.0f,0.0f),Vector3D(256.0f,47.0f,0.0f)); EngineInterface::addSprite("Crosshair",Vector3D(0.0f,0.0f,0.0f),Vector3D(64.0f,64.0f,0.0f)); EngineInterface::addDynamicActor(flight,BOX,CollisionFilter::AIRCRAFT,CollisionFilter::TERRAIN); EngineInterface::addDynamicActor(missile,BOX,CollisionFilter::MISSILE,CollisionFilter::TERRAIN); EngineInterface::addCollisionCallback("F16","Terrain",flightCollision); EngineInterface::addCollisionCallback("Missile","Terrain",missileCollision); destruction = EngineInterface::createDestructibleTerrain(terrain,"Data/Mesh/terrainDemo.raw",Vector4D(256.0,50.0,50.0,1500.0),CollisionFilter::TERRAIN,CollisionFilter::MISSILE | CollisionFilter::AIRCRAFT); EngineInterface::runGameLoop(&isRunning); EngineInterface::releaseDestructibleTerrain(destruction); EngineInterface::releaseEngine(); }
bool MonsterDevil::onContactBegin(cocos2d::PhysicsContact& contact) { auto bodyA = contact.getShapeA()->getBody(); auto bodyB = contact.getShapeB()->getBody(); auto componentA = (BaseComponent*)bodyA->getNode(); auto componentB = (BaseComponent*)bodyB->getNode(); BaseComponent* enemyComponent; bool isComponentA = true; //어떤것 끼리 부딪혔는지는 안가르쳐주기 때문에 //여기서 어느쪽이 monsterDevil인지 밝혀낸다. if (componentA->getType() == getType()) { enemyComponent = componentB; isComponentA = true; } else { enemyComponent = componentA; isComponentA = false; } //FLOOR 충돌 무시 if (enemyComponent->getType() == OT_FLOOR) { return false; } //미사일이랑 충돌 처리 if (enemyComponent->getPhysicsBody()->getCategoryBitmask() == PHYC_MISSILE) { Missile* missile = static_cast<Missile*>(enemyComponent); //수류탄은 뎀 안 입음 if (missile->getType() == OT_MISSILE_GRENADE) { return false; } //몹이 쏜 건 안 맞음. if (!missile->isPlayerMissile()) { return false; } float damage = missile->getDamage(); m_Info.m_CurrentHp -= damage * 100 / (100 + m_Info.m_DefensivePower); //사망 if (m_Info.m_CurrentHp <= 0) { m_IsDead = true; } } return true; }
void Enemy::fire(float delta) { Missile* m; glm::vec3 forward = glm::normalize(glm::mat3_cast(getRotation()) * glm::vec3(0, 0, 1)); glm::vec3 position = getPosition() + 2.0f * forward; m = new Missile(position, 2.0f * forward); m->setRotation(getRotation()); m->rotate(glm::vec3(1, 0, 0), 3.1415920f / 2.0f); Game::getGame().addMissile(m); }
void MissileMovementLoop::update(float delta){ Missile* parent = (Missile*)getOwner(); if(parent==NULL) { return; }else{ auto moveDown = MoveTo::create(missileFlyDuration, Point(0,parent->getPosition().x)); parent->runAction(moveDown); } }
//Check if the Marauder should shoot. Create and initialize a missile and push it to missiles vector. void Marauder::shoot(sf::RenderWindow &window, Player &player, vector <Enemy *> &enemies, vector <Bullet *> &bullets, vector <Missile *> &missiles) { int random = rand() % 500 + 1; if (random == 1) { Missile* missile = new Missile(this->getPosition()); missile->velocity = (sf::Vector2f(5, 5)); missile->damage = (this->damage); missile->calculateRotation(window, player); missiles.push_back(missile); } }
void fireMissile() { Missile* missile = static_cast<Missile*>(EngineInterface::getEntity("Missile")); EngineInterface::playSoundEffect("Laser"); Vector3D missilePosition = EngineInterface::getEntity("F16")->entityState.position; missilePosition -= EngineInterface::getCamera()->getViewDirection() * 55.0f; missile->setEntityPosition(missilePosition[0],missilePosition[1],missilePosition[2]); missile->entityState.orientation = EngineInterface::getCamera()->getOrientation().inverse(); missile->moveDirection = EngineInterface::getCamera()->getViewDirection(); missile->isFired = true; missile->entityState.isVisible = true; }
/* * Method: AIKamikaze * * Crash into the target ship. * * > missile:AIKamikaze(target) * * Parameters: * * target - the <Ship> to destroy * * Returns: * true if the command could be enacted, false otherwise * * Availability: * * Gen 2017 * * Status: * * experimental */ static int l_missile_ai_kamikaze(lua_State *l) { Missile *m = LuaObject<Missile>::GetFromLua(1); Ship *target = LuaObject<Ship>::GetFromLua(2); if (target != nullptr) { m->AIKamikaze(target); lua_pushboolean(l, true); } else { lua_pushboolean(l, false); } return 1; }
Missile * Ship::SpawnMissile(ShipType::Id missile_type, int power) { if (GetFlightState() != FLYING) return 0; Missile *missile = new Missile(missile_type, this, power); missile->SetOrient(GetOrient()); missile->SetFrame(GetFrame()); // XXX DODGY! need to put it in a sensible location vector3d dir = -GetOrient().VectorZ(); missile->SetPosition(GetPosition()+50.0*dir); missile->SetVelocity(GetVelocity()); Pi::game->GetSpace()->AddBody(missile); return missile; }
Missile * Ship::SpawnMissile(ShipType::Id missile_type, int power) { if (GetFlightState() != FLYING) return 0; Missile *missile = new Missile(missile_type, this, power); missile->SetOrient(GetOrient()); missile->SetFrame(GetFrame()); const vector3d pos = GetOrient() * vector3d(0, GetAabb().min.y - 10, GetAabb().min.z); const vector3d vel = -40.0 * GetOrient().VectorZ(); missile->SetPosition(GetPosition()+pos); missile->SetVelocity(GetVelocity()+vel); Pi::game->GetSpace()->AddBody(missile); return missile; }
void startGame(Missile missile, Enemy enemy){ cout<< "do you want to launch a missile?(y/n)"<<endl; char check; cin>>check; while(check!='n'){ if(check=='y'){ askWhereX(missile.getPosition()); askWhereY(0); checkIfEnemyThere(missile.getPosition(), enemy); cout<<"Would you like to launch another?"<<endl; cin>>check; }else{
Missile* Missile::create(BeamType t) { Missile *pRet = new(std::nothrow) Missile(t); if (pRet && pRet->init()) { pRet->autorelease(); return pRet; } else { delete pRet; pRet = NULL; return NULL; } }
void MissileHandlePierce(Missile &missile, const Vec2i &pos) { CUnit *unit = UnitOnMapTile(pos, -1); if (unit && unit->IsAliveOnMap() && (missile.Type->FriendlyFire || unit->IsEnemy(*missile.SourceUnit->Player))) { missile.MissileHit(unit); } }
void Player::updateMissile() { std::set<Missile*>::iterator i = mMissile.begin(); while( i != mMissile.end() ) { Missile* missile = *i; //if (missile->getMissilePhysics()->isCollided() && !missile->isExploded()) //{ // missile->makeExplode(); //} missile->update(); if ( missile->getMissilePhysics()->isCollided() || missile->isMissileTick() ) { i = mMissile.erase(i); mPhysicsWorld->removeObject(missile->getMissilePhysics()); missile->getSceneNode()->removeAndDestroyAllChildren(); mSceneMgr->destroySceneNode(missile->getSceneNode()); delete missile; } else { i++; } } }
bool Ship::hit(Missile &m) { if(type==DESTROYED|| (type==PLAYER && m.type==Missile::Type::PLAYER) || (type==ENEMY && m.type==Missile::Type::ENEMY)) return false; Rectangle r(x-1,y+1,2,3); if(r.isInside(m.getX(),m.getY())){ m.type=Missile::Type::VOID; if(type==ENEMY) type=DESTROYED; return true; } else { return false; } }
void Engine::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0f, 2.0f, -15.0f); glRotatef(xAngle, 1.0f, 0.0f, 0.0f); glRotatef(yAngle, 0.0f, 1.0f, 0.0f); glScalef(scale, scale, scale); drawSea(SEA_SIZE); glColor3f(1,0,0); this->renderText(-23, 2, -15.0f, QString("Player 1")); this->renderText(-24, 1.1f, -15.0f, getHitpoints(&player1)); glColor3f(0,0,1); this->renderText(19, 2, -15.0f, QString("Player 2")); this->renderText(20, 1.1f, -15.0f, getHitpoints(&player2)); glColor3f(1,1,0); this->renderText(-0.5d, 1.0d, 1.0d, pauseText); glColor3f(0,1,0); this->renderText(-2.5d, 1.0d, -1.0d, checkForWinner()); this->renderText(-4.5d, 1.0d, 1.0d, newGameText); glPushMatrix(); glTranslatef(player1.xPos, 0, player1.zPos); glRotatef(player1.yAngle, 0, 1, 0); player1.draw(1, 0, 0); glPopMatrix(); glPushMatrix(); glTranslatef(player2.xPos, 0, player2.zPos); glRotatef(player2.yAngle, 0, 1, 0); player2.draw(0, 0, 1); glPopMatrix(); Missile* m; foreach(m, missilesList) { glPushMatrix(); glTranslatef(m->x, 0.4, m->z); glRotatef(m->angle, 0, 1, 0); m->draw(); glPopMatrix(); }
int main(void){ Missile missile; Enemy enemy; Vector2 TempVect; TempVect.x=0; TempVect.y=0; missile.setPosition(TempVect); startGame(missile, enemy); cin.get(); return 0; }
void RobotGame::updateWithMessage (void) { char *block = messageData.data(); while (missiles.removeFirst()) ; for (int i = 0; i < robots.count(); ++i) block = robots.at(i)->updateWithBlock(block); while (block < messageData.data() + messageData.size()) { Missile *missile = new Missile(*this, block); block = missile->updateWithBlock(block); missiles.append(missile); } thePlayField->repaint(FALSE); }
bool RushPig::onContactBegin(cocos2d::PhysicsContact& contact) { auto bodyA = contact.getShapeA()->getBody(); auto bodyB = contact.getShapeB()->getBody(); auto componentA = (BaseComponent*)bodyA->getNode(); auto componentB = (BaseComponent*)bodyB->getNode(); BaseComponent* enemyComponent; bool isComponentA = true; if (componentA->getType() == getType()) { enemyComponent = componentB; isComponentA = true; } else { enemyComponent = componentA; isComponentA = false; } //미사일이랑 충돌 처리 if (enemyComponent->getPhysicsBody()->getCategoryBitmask() == PHYC_MISSILE) { Missile* missile = static_cast<Missile*>(enemyComponent); float damage = missile->getDamage(); m_Info.m_CurrentHp -= damage * 100 / (100 + m_Info.m_DefensivePower); cocos2d::log("HP : %d / %d", m_Info.m_CurrentHp, m_Info.m_MaxHp); //사망 if (m_Info.m_CurrentHp <= 0) { m_IsDead = true; } } return true; }
Missile* SimpleStoresMgr::getNextMissileImp() { Missile* msl = 0; Basic::PairStream* list = getWeapons(); if (list != 0) { Basic::List::Item* item = list->getFirstItem(); while (item != 0 && msl == 0) { Basic::Pair* pair = (Basic::Pair*) item->getValue(); Missile* p = dynamic_cast<Missile*>( pair->object() ); if (p != 0) { if (p->isInactive() || p->isReleaseHold()) { msl = (Missile*) p->getPointer(); } } item = item->getNext(); } list->unref(); } return msl; }
void play(int i, Window& win) { nodelay(stdscr, TRUE); i = get_difficult(i); Player p(win); EnnemyHorde n = EnnemyHorde(i, "^v^"); Missile miss = Missile(10, "|"); Rocket rock = Rocket(2, "[]"); n.randomPOP(win); int input = 0; p.setScoreZero(); while (input != KEY_ECHAP && p.getHP() > 0) { clear(); miss.print_score(win); win.takeSize(); win.printBorder(); input = getch(); miss.activate(p.getX(), p.getY(), input); rock.activate(p.getX(), p.getY(), input); miss.checkDamages(n.getHorde(), n.getNumber(), win); rock.checkDamages(n.getHorde(), n.getNumber(), win); p.checkEnemies(n.getHorde(), n.getNumber(), win); p.print_life(win); miss.print_chargeur(win); rock.print_chargeur(win); if (p.getHP() > 0) { n.printit(win); miss.move(win); rock.move(win); miss.printit(win); rock.printit(win); p.printit(win); p.inputDirection(input); wrefresh(win.getWin()); p.move(win); p.printit(win); n.move(win); } while(getch() != ERR); usleep(60000); } if (p.getHP() <= 0) { clear(); print_die(win, p); } if (p.getScore() > hight_score) hight_score = p.getScore(); }