Пример #1
0
	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");
		}
	}
Пример #2
0
	void PlayerShip::deactivateSecondary(){
		mSecondaryActivated = false;
		ceaseFire(1);
	}
Пример #3
0
	void PlayerShip::deactivatePrimary(){
		mPrimaryActivated = false;
		ceaseFire(0);
	}
Пример #4
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;
		}
	}
}
Пример #5
0
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());
		}
	}
}