void PlayerShip::takeDamage(DamagePackage& pack, double time){ float dam=0; //DamagePackage& pack = hitter->getDamagePackage(); if (pack.getDamageCycle() == DAM_CYCLE_INSTANT){ dam = pack.getTotalDamage(); }else if (pack.getDamageCycle() == DAM_CYCLE_CONTINUOUS){ dam = pack.getTotalDamage()*time;//Level::getSingleton()->getTimeDelta(); } if (mShield > 0){ mShield-=dam; if (mShield < 0){ mHealth += mShield; mShield = 0; } }else{ mHealth-=dam; } if (mHealth <= 0){ setQueryFlags(SceneQueryFlag::SceneQueryFlag::IMMATERIAL); ceaseFire(0); ceaseFire(1); mDeathFX->setParent(mSceneNode); mDeathFX->build(); mDeathFX->activate(); mEntity->setVisible(false); //mLevelSegment->getActiveCamera()->shake(10000); mTimeToReset = 3; //throw("You are dead"); } }
void PlayerShip::deactivateSecondary(){ mSecondaryActivated = false; ceaseFire(1); }
void PlayerShip::deactivatePrimary(){ mPrimaryActivated = false; ceaseFire(0); }
void magnetGun::update(float dt) { pos = owner->getPosition(); pos.y -= 30; float mod = 0; if(((playerObj*)owner)->GetAnimNumber() == 1) mod -= 4; else mod += 4; mod *= owner->getFacing(); pos.x += mod; if(target) aimVect = target->getPosition() - pos; else aimVect = theMouse->getPos() - pos; aimVect.normalize(); if(fabs(pos.x - theMouse->getPos().x) > 3) { if(aimVect.x > 0) owner->setFacing(FACE_LEFT); else owner->setFacing(FACE_RIGHT); } updateWorldMatrix(); if(mode != MAG_OFF) { if(target) { target->setVel(vector3()); target->setAcc(vector3(0,-GRAVITY)); } else { // ((movingObj*)owner)->setVel(vector3()); // ((movingObj*)owner)->setAcc(vector3(0,-GRAVITY)); } float len = 0; //vector3 traj = (theMouse->getPos() - pos).normalized(); #define traj aimVect switch(mode) { case MAG_PUSH: if(target) { if((target->getPosition() - pos).length() < range) target->modPos(traj * (power * dt)); } else owner->modPos(traj * -(power * dt)); break; case MAG_PULL: if(target) target->modPos(traj * -(power * dt)); else owner->modPos(traj * (power * dt)); break; case MAG_HOLD: traj = (theMouse->getPos() - target->getPosition()); len = traj.length(); if(len > HOLDRANGE) ceaseFire(); else if(len > 10) target->modPos(traj.normalized() * (power * 0.75f * dt)); break; default: break; } } }
void DefaultDrone::updateAlive(double timeDelta, double parentTime){ float f = timeAlive(); if (!mDbe->isStatic()){ Coordinator::Transform base; if (mTransformCoordinator){ base = mTransformCoordinator->getValue(timeAlive()); }else{ base = dynamic_cast<Coordinator::TransformCoordinator*>(Coordinator::CoordinatorFactory::getSingleton()->get("static_transform:0,0,0"))->getValue(0); } getNode()->setPosition(base.mPos); getNode()->setOrientation(base.mRot); Ogre::TransformKeyFrame key(NULL, 0); key = dynamic_cast<DefaultDroneDBE*>(mDbe)->getKeyFrame(f); Ogre::Vector3 v = key.getTranslate(); v=v*base.mScl; getNode()->translate(v); Ogre::Radian angle; Ogre::Vector3 axis; Ogre::Quaternion r = key.getRotation(); if ( base.mScl.x == -1){ r.ToAngleAxis(angle, axis); axis.x *= -1; angle = (Ogre::Radian)0-angle; r.FromAngleAxis(angle, axis); } mSceneNode->rotate(r); } { list<GoAnim::GoAnim*>::iterator it, begin, end; begin = mGoAnim.begin(); end = mGoAnim.end(); for (it=begin;it!=end;it++){ (*it)->update(timeDelta, parentTime); } }{ list<FIRING_TIME>::iterator it, begin, end; begin = (dynamic_cast<DefaultDroneDBE*>(mDbe)->getFiringTime())->begin(); end = (dynamic_cast<DefaultDroneDBE*>(mDbe)->getFiringTime())->end(); for (it=begin;it!=end;it++){ if (mLevelSegment->isTimeInFrame(getTimeOn()+(*it).time)){ //Util::Log("IsTimeInFrame:"+ts(getTimeOn()+(*it).time)); if ((*it).firingOption == FIRING_START){ fire((*it).mount, (*it).inertia); }else{ ceaseFire((*it).mount); } } } }{ /*list<DRONE_TIMED_ANIM>::iterator it, begin, end; begin = (dynamic_cast<DefaultDroneDBE*>(mDbe)->getTimedAnim())->begin(); end = (dynamic_cast<DefaultDroneDBE*>(mDbe)->getTimedAnim())->end(); for (it=begin;it!=end;it++){ if (mLevelSegment->isTimeInFrame(getTimeOn()+(*it).time)){ Util::Log("IsTimeInFrame:"+ts(getTimeOn()+(*it).time)); Ogre::AnimationState* as; as = mEntity->getAnimationState( (*it).label ); as->setEnabled(true); as->setLoop((*it).loop); mAnim.push_back(as); //fire((*it).type); } }*/ }{ list<Ogre::AnimationState*>::iterator it, begin, end; begin = mAnim.begin(); end = mAnim.end(); for (it=begin;it!=end;it++){ (*it)->addTime(timeDelta);//Level::getSingleton()->getTimeDelta()); } } }