//----------------------------------------------------------------------------------------------------------------------------------- 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; }
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(); } } }
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())); } }
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; } } } }
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); } }
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; }
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; }
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; }
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; }; }
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(); } } }
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; } } }
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(); } }