Esempio n. 1
0
//-----------------------------------------------------------------------------------------------------------------------------------
void Distance_control(void)
	{
	if(distance<5)
		{
		Reset(); //hovering
		if(indexWP==(numberWP-1))
			{
			Land();
			return;
			}
		else
			{
			indexWP++;
			ROS_INFO("Reached way-point number (%d); I'm going to the next\n", indexWP);
		    ROS_INFO("Count Down:-------> 3\n");
		    sleep(1);
		    ROS_INFO("Count Down:-------> 2\n");
		    sleep(1);
		    ROS_INFO("Count Down:-------> 1\n");
		    sleep(1);
		    ROS_INFO("-------> GO to new way point!!!\n");
		    request=true;
			}
	    }
	return;
	}
Esempio n. 2
0
void CBirdsFlock::Update(CCamera *pCamera)
{

	UpdateLandingPoints();

	m_isPlayerNearOrigin = GetEntity()!=NULL && IsPlayerInProximity(GetEntity()->GetPos());

	CFlock::Update(pCamera);

	float dt = gEnv->pTimer->GetFrameTime();

	// set the ai object in the middle of the boids
	UpdateAvgBoidPos(dt);

	if(m_status == Bird::FLYING && !m_bc.noLanding &&
			(gEnv->pTimer->GetFrameStartTime()- m_flightStartTime).GetSeconds() > m_flightDuration)
	{
		if(GetEntity() && !m_isPlayerNearOrigin)
			Land();
	}

	if(m_status == Bird::LANDING)
	{
		float timePassed = (gEnv->pTimer->GetFrameStartTime()- m_flightStartTime).GetSeconds();

		if(timePassed < START_LANDING_TIME+0.5f)
		{
			int n = m_boids.size();
			int numBoidsLandingNow = int(float(n*timePassed)/START_LANDING_TIME);

			if(numBoidsLandingNow >n)
				numBoidsLandingNow = n;

			for(int i = 0; i<numBoidsLandingNow ; ++i)
			{
				CBoidBird *bird = static_cast<CBoidBird *>(m_boids[i]);

				if(bird && !bird->IsDead() && !bird->IsLanding())
					bird->Land();
			}
		}

	}


	if(m_status == Bird::LANDING || m_status == Bird::ON_GROUND)
	{
		if(IsPlayerInProximity(GetAvgBoidPos()))
			TakeOff();
	}

}
void CEyeBotCircle::GoToCenter() {
   if(m_eState != STATE_GO_TO_CENTER) {
      /* State initialization */
      m_eState = STATE_GO_TO_CENTER;
      m_cTargetPos = m_cCircleCenter;
      m_pcPosAct->SetAbsolutePosition(m_cTargetPos);
   }
   else {
      if(Distance(m_cTargetPos, m_pcPosSens->GetReading().Position) < PROXIMITY_TOLERANCE) {
         /* State transition */
         Land();
      }
   }
}
Esempio n. 4
0
void Bird::HandleUpdate(StringHash eventType, VariantMap &eventData)
{
    if (dead_ && GetPosition().y_ < -5.0f) Disable();

    float timeStep = eventData[SceneUpdate::P_TIMESTEP].GetFloat();
    if (sinceSpeciesSet_ < morphTime_){
        Morph();
    }
    sinceSpeciesSet_ += timeStep;

    if (sinceStateChange_ > stateDuration_){
        switch (state_) {
        case BirdState::Flying: {
            SetState(BirdState::Landing);
        } break;
        case BirdState::Standing: {
            SetState(BirdState::Flying);
        } break;
        default:
            break;
        }
    }
    if(!(first_ && state_ == BirdState::Standing)) sinceStateChange_ += timeStep;

    switch (state_) {
    case BirdState::Flying: {
        Fly(timeStep);
    } break;
    case BirdState::Landing: {
        Land(timeStep);
    } break;
    case BirdState::Standing: {
        Stand(timeStep);
    } break;
    default:
        break;
    }

    //Move bird
    rootNode_->Translate(velocity_*timeStep, TS_WORLD);

    //Update rotation in accordance with the birds movement.
    if (velocity_.Length() > 0.01f){
        Quaternion rotation = rootNode_->GetWorldRotation();
        Quaternion aimRotation = rotation;
        aimRotation.FromLookRotation(velocity_);
        rootNode_->SetRotation(rotation.Slerp(aimRotation, 2.0f * timeStep * velocity_.Length()));
    }
}
Esempio n. 5
0
void Cf3MapObjectfunya::Synergy()
{
	if (m_State==DEAD||m_State==SMILING) return;
	m_OnEnemy = false;
	m_Power = m_PowerX = m_PowerY = 0.0f;
	Cf3MapObjectBase**it;
	// ギヤバネ
	for(it=m_pParent->GetMapObjects(m_nCX-2, m_nCY-2, m_nCX+2, m_nCY+2, MOT_GEASPRIN); (*it)!=NULL; it++){
		if ((*it)->IsValid()) {
			float objX, objY;
			(*it)->GetPos(objX,objY);
			if (!((Cf3MapObjectGeasprin*)(*it))->IsFrozen()) {
				if (IsIn(objX-16,m_X,objX+15)) {
					if (IsIn(objY-30,m_Y,objY+16)) {
						if (m_bOriginal) theApp->GetBGM()->MusicEffect(MEN_GEASPRIN);
						m_Y--;
						HighJump();
					}
				}ef(IsIn(objX+16,m_X,objX+29)) {
					if (IsIn(objY-16,m_Y,objY+15)) {
						if (m_bOriginal) theApp->GetBGM()->MusicEffect(MEN_GEASPRIN);
						m_DX=10;
					}
				}ef(IsIn(objX-29,m_X,objX-16)) {
					if (IsIn(objY-16,m_Y,objY+15)) {
						if (m_bOriginal) theApp->GetBGM()->MusicEffect(MEN_GEASPRIN);
						m_DX=-10;
					}
				}
			}else{
				if (IsIn(objX-16,m_X,objX+15)) {
					if (IsIn(objY-30,m_Y,objY)&&m_DY>=0) {
						m_OnEnemy = true;
						m_Y = objY-30;
						if (m_State==JUMPING) Land();
					}
				}ef(IsIn(objX+16,m_X,objX+29)) {
					if (IsIn(objY-16,m_Y,objY+15)) {
						m_X = objX+30;
						m_DX=0;
					}
				}ef(IsIn(objX-29,m_X,objX-16)) {
					if (IsIn(objY-16,m_Y,objY+15)) {
						m_X = objX-30;
						m_DX=-0;
					}
				}
			}
		}
Esempio n. 6
0
void CPlayerStateJump::UpdateFalling( CPlayer& player, const bool isHeavyWeapon, const SActorFrameMovementParams& movement, float frameTime )
{
	Vec3 desiredVel(ZERO);

	if( !CPlayerStateUtil::IsOnGround( player ) )
	{
		if( UpdateCommon( player, isHeavyWeapon, movement, frameTime, &desiredVel ) )
		{
			FinalizeVelocity( player, desiredVel );
		}
	}
	else
	{
		// We were falling, now we're on ground - we landed!
		Land(player, isHeavyWeapon, frameTime);
	}
}
Esempio n. 7
0
int main()
{
/*建立数据库*/
Head Db[Max_length]={0,NULL};
int N;
scanf("%d",&N);
char Operation[2];
char Name[Max_name];
char Password[Max_pass];
int i;
for(i=0;i<N;i++)
{
scanf("%s%s%s",&Operation,&Name,&Password);
if(strcmp(Operation,"L")==0)
Land(Name,Password,Db);
if(strcmp(Operation,"N")==0)
New(Name,Password,Db);
}
return 0;
}
Esempio n. 8
0
Cf3MapObjectfunya::Cf3MapObjectfunya(int nCX, int nCY)
	:Cf3MapObjectMain(MOT_FUNYA)
{
	m_Graphic = ResourceManager.Get(RID_MAIN);
	m_Graphic2 = ResourceManager.Get(RID_MAINICY);
	m_DX = m_DY = 0.0f;
	m_ChargePower = 0.0f;
	m_ChargeDec = 0.001f;
	m_nPower = 0;
	m_Power = m_PowerX = m_PowerY = 0.0f;
	m_Direction = DIR_FRONT;
	m_HitLeft = m_HitRight = m_HitTop = m_OnEnemy = false; m_HitBottom = true;
	Land();
	SetPos(nCX*32+16,nCY*32+18);
	m_VOffsetX = m_VOffsetY = m_VOffsetToX = m_VOffsetToY = 0;
	m_bOriginal = true;
	m_bFirst = true;
	m_PoseCounter2=0;
	m_BananaDistance = 0.0f;
}
Esempio n. 9
0
void CPlayerStateJump::UpdateJumping( CPlayer& player, const bool isHeavyWeapon, const SActorFrameMovementParams& movement, float frameTime )
{
	Vec3 desiredVel(ZERO);
	if( UpdateCommon( player, isHeavyWeapon, movement, frameTime, &desiredVel ) )
	{
		Vec3 jumpExtraForce(0,0,0);
		switch( GetJumpState() )
		{
		case JState_Jump:
			jumpExtraForce = CalculateInAirJumpExtraVelocity( player, desiredVel );
			break;
		}
		desiredVel += jumpExtraForce;

		FinalizeVelocity( player, desiredVel );

		if( CPlayerStateUtil::IsOnGround( player ) )
		{
			Land(player, isHeavyWeapon, frameTime);
		}
	}
}
void CEyeBotCircle::ControlStep() {
   /* Get RAB message, if any */
   RLOG << "Message received: ";
   if(! m_pcRABSens->GetReadings().empty()) {
      m_psFBMsg = &(m_pcRABSens->GetReadings()[0]);
      LOG << *reinterpret_cast<const UInt64*>(m_psFBMsg->Data.ToCArray());
   }
   else {
      m_psFBMsg = NULL;
      LOG << "none";
   }
   LOG << std::endl;
   /* Execute state logic */
   switch(m_eState) {
      case STATE_START:
         TakeOff();
         break;
      case STATE_TAKE_OFF:
         TakeOff();
         break;
      case STATE_LEAVE_CIRCLE_CENTER:
         LeaveCircleCenter();
         break;
      case STATE_MOVE_ALONG_CIRCLE:
         MoveAlongCircle();
         break;
      case STATE_GO_TO_CENTER:
         GoToCenter();
         break;
      case STATE_LAND:
         Land();
         break;
      default:
         LOGERR << "[BUG] Unknown robot state: " << m_eState << std::endl;
   }
   /* Write debug information */
   RLOG << "Current state: " << m_eState << std::endl;
   RLOG << "Target pos: " << m_cTargetPos << std::endl;
}
Esempio n. 11
0
 void OnReachWP(uint32 iWaypointId, bool bForwards)
 {
     switch(iWaypointId)
     {
     case 1:
         {
             _unit->GetAIInterface()->setMoveType(MOVEMENTTYPE_WANTEDWP);
             _unit->GetAIInterface()->setWaypointToMove(2);
             Fly();
         }break;
     case 2:
         {
             _unit->GetAIInterface()->setMoveType(MOVEMENTTYPE_WANTEDWP);
             _unit->GetAIInterface()->setWaypointToMove(3);
         }break;
     case 3:
         {
             _unit->GetAIInterface()->m_canMove = false;
             _unit->GetAIInterface()->SetAllowedToEnterCombat(true);
             _unit->GetAIInterface()->setCurrentAgent(AGENT_SPELL);
             //_unit->m_pacified--;
             _unit->GetAIInterface()->SetAIState(STATE_SCRIPTIDLE);
             _unit->GetAIInterface()->setMoveType(MOVEMENTTYPE_DONTMOVEWP);
             _unit->GetAIInterface()->setWaypointToMove(0);
             WorldPacket data(SMSG_MOVE_SET_HOVER, 13);
             data << _unit->GetNewGUID();
             data << uint32(0);
             _unit->SendMessageToSet(&data, false);
             m_currentWP = 3;
         }break;
     case 8:
         {
             _unit->GetAIInterface()->SetAllowedToEnterCombat(true);
             _unit->GetAIInterface()->setCurrentAgent(AGENT_NULL);
             _unit->GetAIInterface()->SetAIState(STATE_SCRIPTIDLE);
             _unit->GetAIInterface()->setMoveType(MOVEMENTTYPE_DONTMOVEWP);
             _unit->GetAIInterface()->setWaypointToMove(0);
             /*_unit->m_pacified--;
             if(_unit->m_pacified > 0)
                 _unit->m_pacified--;*/
             WorldPacket data(SMSG_MOVE_UNSET_HOVER, 13);
             data << _unit->GetNewGUID();
             data << uint32(0);
             _unit->SendMessageToSet(&data, false);
             Land();
         }break;
     default:
         {
             _unit->GetAIInterface()->m_canMove = false;
             _unit->GetAIInterface()->SetAllowedToEnterCombat(true);
             _unit->GetAIInterface()->SetAIState(STATE_SCRIPTIDLE);
             _unit->GetAIInterface()->setMoveType(MOVEMENTTYPE_DONTMOVEWP);
             _unit->GetAIInterface()->setWaypointToMove(0);
             WorldPacket data(SMSG_MOVE_SET_HOVER, 13);
             data << _unit->GetNewGUID();
             data << uint32(0);
             _unit->SendMessageToSet(&data, false);
             //_unit->m_pacified--;
         }break;
     };
 }
Esempio n. 12
0
void CBoidBird::Update( float dt,SBoidContext &bc )
{
	if (m_physicsControlled)
	{
		UpdatePhysics(dt,bc);
		return;
	}
	if (m_dead)
		return;
	
	if (m_heading.IsZero())
		m_heading = Vec3(1,0,0);

	m_lastThinkTime += dt;

	{
		if (bc.followPlayer && !m_spawnFromPt)
		{
			if (m_pos.GetSquaredDistance(bc.playerPos) > MAX_BIRDS_DISTANCE*MAX_BIRDS_DISTANCE)
			{
				float z = bc.MinHeight + (Boid::Frand()+1)/2.0f*(bc.MaxHeight - bc.MinHeight);
				m_pos = bc.playerPos + Vec3(Boid::Frand()*MAX_BIRDS_DISTANCE,Boid::Frand()*MAX_BIRDS_DISTANCE,z );
				m_speed = bc.MinSpeed + ((Boid::Frand()+1)/2.0f) / (bc.MaxSpeed - bc.MinSpeed);
				m_heading = Vec3(Boid::Frand(),Boid::Frand(),0).GetNormalized();
			}
		}

		if(m_status == Bird::TAKEOFF)
		{
			float timePassed = (gEnv->pTimer->GetFrameStartTime() - m_takeOffStartTime).GetSeconds();
			if(m_playingTakeOffAnim &&  timePassed >= m_TakeOffAnimLength)
			{
				m_playingTakeOffAnim = false;
				PlayAnimationId(Bird::ANIM_FLY,true);
			}
			else if( timePassed > TAKEOFF_TIME)
			{
				SetStatus(Bird::FLYING);
			}

		}

		if(m_status == Bird::LANDING)
		{
			Vec3 vDist(m_landingPoint - m_pos);
			float dist2 = vDist.GetLengthSquared2D();
			float dist = sqrt_tpl(dist2 + vDist.z*vDist.z);

			if(dist > 0.02f && m_pos.z > m_landingPoint.z)
			{
				//if(vDist.z < 3 && m_heading)
				vDist /= dist;
				float fInterpSpeed = 2+fabs(m_heading.Dot(vDist))*3.f;
				Interpolate(m_heading,vDist, fInterpSpeed, dt);
				m_heading.NormalizeSafe(); 
			
				if(m_heading.z < vDist.z)
				{
					Interpolate(m_heading.z,vDist.z,3.0f,dt);
					m_heading.NormalizeSafe();
				}

				bool wasLandDeceleratingAlready = m_landDecelerating;
				m_accel.zero();
				m_landDecelerating = dist < bc.landDecelerationHeight;
				if(m_landDecelerating)
				{
					float newspeed= m_startLandSpeed* dist/3.f;
					if(m_speed > newspeed)
						m_speed = newspeed;
 					if(m_speed < 0.2f)
 						m_speed = 0.2f;
					if(!wasLandDeceleratingAlready)
						PlayAnimationId(Bird::ANIM_LANDING_DECELERATING, true);
				}
				else
					m_startLandSpeed = m_speed;
			}
			else
				Landed(bc);

			CalcMovementBird( dt,bc,true );
			UpdatePitch(dt,bc);
			return;

		}

		if (m_status != Bird::ON_GROUND)
		{
			Think(dt,bc);

			// Calc movement with current velocity.
			CalcMovementBird( dt,bc,true );
		}
		else 
		{
			if(bc.walkSpeed > 0 && m_onGroundStatus == Bird::OGS_WALKING)
				ThinkWalk(dt,bc);
			CalcMovementBird( dt,bc,true );
		}

		m_accel.Set(0,0,0);
		UpdatePitch(dt,bc);

		// Check if landing/on ground after think().
		if ( m_status == Bird::LANDING ||(m_dying && m_status != Bird::ON_GROUND))
		{
			float LandEpsilon = 0.5f;

			// Check if landed on water.
			if (m_pos.z-bc.waterLevel < LandEpsilon+0.1f && !m_dying)
			{
				//! From water immidiatly take off.
				//! Gives fishing effect. 
				TakeOff(bc);
			}

		}

		m_actionTime += dt;

		if (m_status == Bird::ON_GROUND )
			UpdateOnGroundAction(dt, bc);
		else
		{
			if(!bc.noLanding && m_actionTime > m_maxActionTime 
				&& !static_cast<CBirdsFlock*>(m_flock)->IsPlayerNearOrigin())
				Land();
		}
	}








}
Esempio n. 13
0
void Character::Update(sf::RenderWindow &Window, sf::Clock &gameTime)
{
	sf::Time elapsed = gameTime.getElapsedTime();
	gameTime.restart();

	// Update location by trajectory
	sf::Vector2<float> pLocation = sf::Vector2<float>((location.x), location.y);

	if (state == GROUNDED)
	{
		if (trajectory.x > 0.0f)
		{
			trajectory.x -= FRICTION * elapsed.asSeconds();
			if (trajectory.x < 0.0f) trajectory.x = 0.0f;
		}

		if (trajectory.x < 0.0f)
		{
			trajectory.x += FRICTION * elapsed.asSeconds();
			if (trajectory.x > 0.0f) trajectory.x = 0.0f;
		}
	}

	location.x += trajectory.x * (float)elapsed.asSeconds();

	if (state == AIR)
	{
		location.y += trajectory.y * elapsed.asSeconds();
		trajectory.y += elapsed.asSeconds() * GRAVITY;
	}

	// Collision
	// Air Collision
	if (state == AIR)
	{
		if (trajectory.y > 0.0f)
		{
			for (int i = 0; i < map->ledges.size(); i++)
			{
				if (map->ledges[i]->nodes.size() > 1)
				{
					int ts = map->GetLedgeSec(i, pLocation.x);
					int s = map->GetLedgeSec(i, location.x);

					float fY = 0, tfY;

					if (s > -1 && ts > -1)
					{
						tfY = map->GetLedgeYLoc(i, s, pLocation.x);
						fY = map->GetLedgeYLoc(i, s, location.x);

						if (pLocation.y <= tfY && location.y >= fY)
						{
							location.y = fY;
							ledgeAttach = i;
							Land();
						}
						else
						{
							if (map->ledges[i]->flags == SOLID && location.y > fY)
							{
								location.y = fY;
								ledgeAttach = i;
								Land();
							}
						}
					}
				}
			}
		}
	}

	// Ground Collision
	else if (state == GROUNDED)
	{
		if (ledgeAttach > -1)
		{
			if (map->GetLedgeSec(ledgeAttach, location.x) == -1)
			{
				//FallOff();
			}
			else
			{
				location.y = map->GetLedgeYLoc(ledgeAttach, map->GetLedgeSec(ledgeAttach, location.x), location.x);
			}
		}
		else
		{
			// Check collision
		}
	}

	// Input Keyboard
	if (InputManager::instance().HeldDown(sf::Keyboard::Left))
	{
		trajectory.x = -200.0f;
	}
	else if (InputManager::instance().HeldDown(sf::Keyboard::Right))
	{
		trajectory.x = 200.0f;
	}

	// Input Gamepad
	float gamepadLeftStickX = InputManager::instance().GetJoystickAxis(sf::Joystick::X);
	if (gamepadLeftStickX > 10.0f || gamepadLeftStickX < -10.0f)
	{
		trajectory.x = gamepadLeftStickX * 2.0f;
	}

	if (state == GROUNDED)
	{
		if (InputManager::instance().Pressed(sf::Keyboard::Space) ||
			InputManager::instance().Pressed(0, false, true))
		{
			trajectory.y = -400.0f;
			state = AIR;
			ledgeAttach = -1;
		}
	}
}
Esempio n. 14
0
void Cf3MapObjectfunya::OnMove()
{
	if (!IsValid()) return;
	if (!m_pParent->IsPlayable()) return;
	if (m_bFirst) { HitCheck(); m_bFirst = false; }
	float Wind = m_pParent->GetWind(floor(m_X/32),floor(m_Y/32));
	float Friction = m_pParent->GetFriction(floor(m_X/32),floor((m_Y+14)/32));
	float Gravity = GetGravity();
	if (m_pParent->ItemCompleted()) Smile();
	if (theSetting->m_Hyper) m_nPower=4;
	// 動かしま〜す
	if (m_State==STANDING||m_State==SLEEPING||m_State==BLINKING) {
		// 立ってるとき
		m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION;
		BringClose(m_DX,0.0f,Friction);
		if (m_DX==0) m_Direction = DIR_FRONT;
		if (m_State==STANDING && ++m_Sleepy>=30*40/3) Sleep();
		if (m_State==BLINKING && --m_PoseCounter==0) m_State = STANDING;
		if (m_State==STANDING && CApp::random(120)==0) Blink();
		if (m_PowerY<=0 && m_pInput->GetKeyPressed(F3KEY_JUMP)) StartJump();
		if (m_PowerX<=0 && m_pInput->GetKeyPressed(F3KEY_LEFT)) Run(DIR_LEFT);
		if (m_PowerX>=0 && m_pInput->GetKeyPressed(F3KEY_RIGHT)) Run(DIR_RIGHT);
		if (m_pInput->GetKeyPressed(F3KEY_DOWN)) Sit();
		if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn();
		if (!m_HitBottom) {
			Fall();
		}
	}ef(m_State==RUNNING) {
		// 走ってるとき
		int AXL = 0, AXR = 0;
		if (m_PowerX<=0 && m_pInput->GetKeyPressed(F3KEY_LEFT)) AXL = 1;
		if (m_PowerX>=0 && m_pInput->GetKeyPressed(F3KEY_RIGHT)) AXR = 1;
		m_DX -= Friction*(m_DX-Wind)*RUNFRICTION;
		m_DX += Friction*2.0f*(AXR-AXL);
		if (AXL&&!AXR) m_Direction = DIR_LEFT;
		if (AXR&&!AXL) m_Direction = DIR_RIGHT;
		if (!AXL&&!AXR) Stop();
		if (m_PowerY<=0 && m_pInput->GetKeyPressed(F3KEY_JUMP)) StartJump();
		if (m_pInput->GetKeyPressed(F3KEY_DOWN)) Sit();
		if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn();
		if (!m_HitBottom) {
			Fall();
		}
	}ef(m_State==WALKING) {
		// 歩いてるとき
		int AXL = 0, AXR = 0;
		if (m_PowerX<=0 && m_pInput->GetKeyPressed(F3KEY_LEFT)) AXL = 1;
		if (m_PowerX>=0 && m_pInput->GetKeyPressed(F3KEY_RIGHT)) AXR = 1;
		m_DX += WALKACCEL*(AXR-AXL);
		m_DX -= m_DX*WALKFRICTION;
		if (AXL&!AXR) m_Direction = DIR_LEFT;
		if (AXR&!AXL) m_Direction = DIR_RIGHT;
		if (!AXL&!AXR) m_Direction = DIR_FRONT;
		if (!m_pInput->GetKeyPressed(F3KEY_DOWN)) Stop();
		if (m_PowerY<=0 && m_pInput->GetKeyPushed(F3KEY_JUMP)) StartJump();
		if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn();
		if (!m_HitBottom) Fall();
	}ef(m_State==CHARGING) {
		// パワー充填中
		if (m_ChargePower>0) {
			m_ChargePower -= m_ChargeDec;
			if (m_ChargePower<0) m_ChargePower = 0;
		}
		m_X -= m_DX;
		if (m_pInput->GetKeyPushed(F3KEY_DOWN)) Sit();
		if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn();
		if (!m_pInput->GetKeyPressed(F3KEY_JUMP)) Jump();
		if (!m_HitBottom) Fall();
	}ef(m_State==JUMPING) {
		// 空中
		if (m_DY>=0) {
			int AXL = 0, AXR = 0;
			if (m_PowerX<=0 && m_pInput->GetKeyPressed(F3KEY_LEFT)) AXL = 1;
			if (m_PowerX>=0 && m_pInput->GetKeyPressed(F3KEY_RIGHT)) AXR = 1;
			m_DX -= (m_DX-Wind)*JUMPFRICTIONX;
			m_DX += JUMPACCEL*(AXR-AXL);
			if (AXL&!AXR) m_Direction = DIR_LEFT;
			if (AXR&!AXL) m_Direction = DIR_RIGHT;
		}
		if (m_HitLeft||m_HitRight) m_Direction = DIR_FRONT;
		m_DY += Gravity;
		if (m_DY>=0) {
			if (m_PowerY>=0 && m_pInput->GetKeyPressed(F3KEY_DOWN)) m_DY += Gravity*ADDGRAVITY;
			m_DY -= m_DY*JUMPFRICTIONY;
			if (m_pInput->GetKeyPressed(F3KEY_UP)) {
				m_DY += Gravity;
				m_DY -= m_DY*JUMPFRICTIONY;
			}
		}
		if (m_pInput->GetKeyPushed(F3KEY_ATTACK)) BreatheIn();
		if (m_HitBottom) Land();
	}ef(m_State==BREATHEIN) {
		// 冷気充填中
		m_ChargePower+=1.0f;
		if (m_pInput->GetKeyPushed(F3KEY_LEFT)) m_Direction = DIR_LEFT;
		if (m_pInput->GetKeyPushed(F3KEY_RIGHT)) m_Direction = DIR_RIGHT;
		if (m_pInput->GetKeyPushed(F3KEY_UP)) m_Direction = DIR_FRONT;
		if (m_HitBottom) {
			m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION;
			BringClose(m_DX,0.0f,Friction);
			if (m_pInput->GetKeyPushed(F3KEY_DOWN)) Sit();
		}else {
			m_ChargePower+=1.0f;
			if (m_DY>=0) {
				m_DX -= (m_DX-Wind)*JUMPFRICTIONX;
			}
			m_DY += Gravity;
			if (m_DY>=0) {
				m_DY -= m_DY*JUMPFRICTIONY;
			}
		}
		if (!m_pInput->GetKeyPressed(F3KEY_ATTACK)) BreatheOut();
	}ef(m_State==BREATHEOUT) {
		// 冷気放出!!
		m_ChargePower-=1.0f;
		if (m_HitBottom) {
			m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION;
			BringClose(m_DX,0.0f,Friction);
		}else {
			if (m_DY>=0) {
				m_DX -= (m_DX-Wind)*JUMPFRICTIONX;
			}
			m_DY += Gravity;
			if (m_DY>=0) {
				m_DY -= m_DY*JUMPFRICTIONY;
			}
		}
		if (m_ChargePower<=0.0f) {
			if (m_nPower) {
				if (m_HitBottom) Land(); else Fall();
			}else {
				Tire();
			}
		}
	}ef(m_State==TIRED) {
		// ちかれたー!
		m_PoseCounter--;
		if (m_HitBottom) {
			m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION;
			BringClose(m_DX,0.0f,Friction);
		}else {
			m_DX -= (m_DX-Wind)*JUMPFRICTIONX;
			if (m_HitLeft||m_HitRight) m_Direction = DIR_FRONT;
			m_DY += Gravity;
			m_DY -= m_DY*JUMPFRICTIONY;
		}
		if (m_PoseCounter==0) Land();
	}ef(m_State==FROZEN) {
		// 凍っちゃった…
		m_PoseCounter--;
		if (m_HitBottom) {
			m_DX -= WINDFACTOR*(m_DX-Wind)*RUNFRICTION/5;
			BringClose(m_DX,0.0f,Friction/5);
		}else {
			m_DX -= (m_DX-Wind)*JUMPFRICTIONX/5;
			m_DY += Gravity*(1+ADDGRAVITY);
			m_DY -= m_DY*JUMPFRICTIONY/5;
		}
		if (m_PoseCounter==0) Land();
	}
	// 速度飽和(めり込み防止)
	Saturate(-RUNMAX,m_DX,RUNMAX);
	Saturate(-JUMPMAX,m_DY,FALLMAX);
	// 実際の移動+当たり判定
	// 1回の移動ごとに当たり判定
	// という手順ですり抜けバグは解消されるはず
	m_HitLeft = m_HitRight = m_HitTop = m_HitBottom = false;
	m_X += m_DX;
	HitCheck();
	if (!m_HitTop&&!m_HitBottom) {
		m_Y += m_DY;
		HitCheck();
	}
}