Пример #1
0
void CALLBACK CPlayer::Move(float fTime)
{
	float fDist = fTime * PLAYER_SPEED;

	if (_position.x < _nextPosition.x)
	{
		_position.x += fDist;

		if (_position.x >= _nextPosition.x)
			Stand();
	}
	else if (_position.x > _nextPosition.x)
	{
		_position.x -= fDist;

		if (_position.x <= _nextPosition.x)
			Stand();
	}
	else if (_position.y < _nextPosition.y)
	{
		_position.y += fDist;

		if (_position.y >= _nextPosition.y)
			Stand();
	}
	else if (_position.y > _nextPosition.y)
	{
		_position.y -= fDist;

		if (_position.y <= _nextPosition.y)
			Stand();
	}
}
void KeyControlledTransitionBarbarian_cl::ProcessKeyboardEvents()
{
  bool bUp = VAppImpl::GetInputMap()->GetTrigger(CHARACTER_MOVE_FORWARD)!=0;
  bool bRotLeft = VAppImpl::GetInputMap()->GetTrigger(CHARACTER_ROTATE_LEFT)!=0;
  bool bRotRight = VAppImpl::GetInputMap()->GetTrigger(CHARACTER_ROTATE_RIGHT)!=0;
  bool bShift = VAppImpl::GetInputMap()->GetTrigger(CHARACTER_RUN)!=0;

	if (bUp)
  {
    // Trigger the run/walk actions when CURSOR UP is pressed.
    // Allow rotating the entity while walking/running
    if (bShift)
      Run();
    else
      Walk();

		if (bRotLeft)
      RotateLeft();
    else if (bRotRight)
      RotateRight();
  }
  else
  {
    if (bRotLeft)
      RotateLeft();
    else if (bRotRight)
      RotateRight();
    else
      Stand();
  }
}
Пример #3
0
NonLiving::NonLiving(int x, int y, ActorType NewType):Actor(x,y)
{  
  setScriptSource(NewType.Script);
  Action Stand("Stand","");
  Animation Main(NewType.Source,"0,",0,0,1,true);
  //Main.setRotation(270,90,0);
  Stand.setMainAnimation(0);
  Stand.addAnimation(Main);
  addAction(Stand);
};
Пример #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()));
    }
}
Пример #5
0
void ComCharacter::CheckMonDeath()
{
	// 공격 상대가 죽었으면
	if (pAttackTarget && pAttackTarget->IsDeath() == true)
	{
		// 몬스터 죽음 처리
		pAttackTarget->Death();

		// 캐릭터 레벨업 처리
		if (Status->GetEXPAndCheckLevelUp())
			Status->LevelUP(0.05f);

		CancleAttackTarget();
		Stand();
	}
}
void KeyControlledTransitionCharacter_cl::ProcessKeyboardEvents()
{
  if(!m_bKeyboardInputAllowed) 
    return;

  bool bLeft = m_pInputMap->GetTrigger(CHARACTER_MOVE_LEFT)!=0;
  bool bRight = m_pInputMap->GetTrigger(CHARACTER_MOVE_RIGHT)!=0;
  bool bUp = m_pInputMap->GetTrigger(CHARACTER_MOVE_FORWARD)!=0;
  bool bDown = m_pInputMap->GetTrigger(CHARACTER_MOVE_BACKWARD)!=0;
  bool bShift = m_pInputMap->GetTrigger(CHARACTER_RUN)!=0;

	if (bUp)
  {
    // Trigger the run/walk actions when CURSOR UP is pressed.
    // Allow rotating the entity while walking/running
    if (bShift)
      Run();
    else
      Walk();

		if (bLeft)
      RotateLeft();
    else if (bRight)
      RotateRight();
  }
  else if (bDown)
  {
    // Trigger the walk backward action when CURSOR DOWN is pressed.
    // Allow rotating the entity while walking backwards
    WalkBackwards();

    if (bLeft)
      RotateLeft();
    else if (bRight)
      RotateRight();
  }
  else
  {
    if (bLeft)
      RotateLeft();
    else if (bRight)
      RotateRight();
    else
      Stand();
  }
}
Пример #7
0
	bool MonsterAI::RandomRun()
	{
		CMonster *monster = static_cast<CMonster*>(GetOwner());
		if (monster == NULL)
		{
			LogError(AI_MODULE, "MosterAI has no owner object...");
		}
		assert(monster);
		if(random(10000) < monster->GetMoveRandomValue())
		{
			long dir = 0;
			long curX = monster->GetTileX();
			long curY = monster->GetTileY();
			long dis = monster->Distance(curX, curY, m_BornPos.x, m_BornPos.y);
			if(dis > monster->GetPeaceMoveRange())
			{
				dir = GetLineDir(curX, curY, m_BornPos.x, m_BornPos.y);
				long gdir = (8 - dir) % 8;
				if(gdir >= 2 || gdir <= 6)
				{
					dir = (dir + random(3) - 1 + 8) % 8;
				}
			}
			else
			{
				dir = random(8);
			}

			long maxRunTimes = monster->GetMaxRunTimes();
			long minRunTimes = monster->GetMinRunTimes();

			AI_EVENT_SENDER(this).MoveByStep(dir, random(maxRunTimes - minRunTimes) + minRunTimes);
			// drive the ai
			Resume(0);
		}
		else
		{
			Stand(monster->GetStopFrame());
		}
		return true;
	}
Пример #8
0
/**
 * Checks that all non-moving actors are playing the same reel as when
 * the scene was saved.
 * Also 'stand' all the moving actors at their saved positions.
 */
void sortActors(SAVED_DATA *sd) {
	assert(!TinselV2);
	for (int i = 0; i < sd->NumSavedActors; i++) {
		ActorsLife(sd->SavedActorInfo[i].actorID, sd->SavedActorInfo[i].bAlive);

		// Should be playing the same reel.
		if (sd->SavedActorInfo[i].presFilm != 0) {
			if (!actorAlive(sd->SavedActorInfo[i].actorID))
				continue;

			RestoreActorReels(sd->SavedActorInfo[i].presFilm, sd->SavedActorInfo[i].presRnum, sd->SavedActorInfo[i].zFactor,
					sd->SavedActorInfo[i].presPlayX, sd->SavedActorInfo[i].presPlayY);
		}
	}

	RestoreAuxScales(sd->SavedMoverInfo);
	for (int i = 0; i < MAX_MOVERS; i++) {
		if (sd->SavedMoverInfo[i].bActive)
			Stand(nullContext, sd->SavedMoverInfo[i].actorID, sd->SavedMoverInfo[i].objX,
				sd->SavedMoverInfo[i].objY, sd->SavedMoverInfo[i].hLastfilm);
	}
}
Пример #9
0
void CBuildings::RenderTurret(const CNetObj_Turret *pCurrent, const CNetObj_Turret *pPrev)
{
	vec2 Pos = mix(vec2(pPrev->m_X, pPrev->m_Y), vec2(pCurrent->m_X, pCurrent->m_Y), Client()->IntraGameTick());
	float Scale = 0.8f;
	
	int s = pCurrent->m_Status;
	bool Flip = s & (1<<BSTATUS_MIRROR);
	int FlipY = Flip ? -1 : 1;
	
	// stand
	Graphics()->TextureSet(g_pData->m_aImages[IMAGE_BUILDINGS].m_Id);
	Graphics()->QuadsBegin();
	RenderTools()->SelectSprite(SPRITE_STAND, Flip ? SPRITE_FLAG_FLIP_Y : 0);
	
	Graphics()->SetColor(1, 1, 1, 1);
	Graphics()->QuadsSetRotation(0);
		
	//RenderTools()->DrawSprite(pCurrent->m_X, pCurrent->m_Y-24-9, 96*1.3f);
	
	IGraphics::CQuadItem Stand(Pos.x, Pos.y-25*FlipY, 96*Scale, 128*Scale); // -37
	Graphics()->QuadsDraw(&Stand, 1);
	Graphics()->QuadsEnd();
	
	
	int Weapon = pCurrent->m_Weapon;
	float Angle = (pCurrent->m_Angle+90) / (180/pi);
	vec2 p = Pos + vec2(cosf(Angle)*12, sinf(Angle)*12+(-40-9)*FlipY); //+ vec2(cosf(Angle)*90, sinf(Angle)*90-71);
	vec2 Dir = GetDirection((int)(Angle*256));
	
	
	// render weapon
	RenderTools()->SetShadersForWeapon(Weapon);
		
	Graphics()->TextureSet(g_pData->m_aImages[IMAGE_WEAPONS].m_Id);
	Graphics()->QuadsBegin();
	Graphics()->QuadsSetRotation(Angle);
	
	RenderTools()->RenderWeapon(Weapon, p, Dir, WEAPON_GAME_SIZE);
	
	Graphics()->QuadsEnd();
	
	
	// render muzzle
	if (GetWeaponFiringType(Weapon) != WFT_HOLD)
	{
		CustomStuff()->SetTurretMuzzle(ivec2(Pos.x, Pos.y), pCurrent->m_AttackTick, pCurrent->m_Weapon);
		
		CTurretMuzzle Muzzle = CustomStuff()->GetTurretMuzzle(ivec2(Pos.x, Pos.y));
		
		if (Muzzle.m_Weapon)
		{
			Graphics()->TextureSet(g_pData->m_aImages[IMAGE_MUZZLE].m_Id);
			Graphics()->QuadsBegin();
			Graphics()->QuadsSetRotation(Angle);
			
			vec2 Moff = GetMuzzleRenderOffset(Muzzle.m_Weapon)+vec2(-3, -6);
			RenderTools()->SelectSprite(SPRITE_MUZZLE1_1 + Muzzle.m_Muzzle*4 + Muzzle.m_Time*4, SPRITE_FLAG_FLIP_X);

			vec2 DirY(-Dir.y,Dir.x);
			vec2 MuzzlePos = p + Dir * Moff.x + DirY * Moff.y;

			RenderTools()->DrawSprite(MuzzlePos.x, MuzzlePos.y, 60);
			
			Graphics()->QuadsEnd();
		}
	}
	
	Graphics()->ShaderEnd();

	vec2 Offset = vec2(0, 0);
	
	// fastener
	Graphics()->TextureSet(g_pData->m_aImages[IMAGE_BUILDINGS].m_Id);
	Graphics()->QuadsBegin();
	RenderTools()->SelectSprite(SPRITE_TURRET_FASTENER, Dir.x < 0 ? SPRITE_FLAG_FLIP_Y : 0);
	Graphics()->SetColor(1, 1, 1, 1);
	
	
	if (m_pClient->m_Snap.m_pGameInfoObj)
	{
		int Flags = m_pClient->m_Snap.m_pGameInfoObj->m_GameFlags;
		int Team = pCurrent->m_Team;
	
		if ((Flags & GAMEFLAG_TEAMS) && !(Flags & GAMEFLAG_INFECTION))
		{
			if (Team == TEAM_RED)
				Graphics()->SetColor(1.0f, 0.8f, 0.0f, 1.0f);
			else if (Team == TEAM_BLUE)
				Graphics()->SetColor(0.3f, 0.5f, 1.0f, 1.0f);
		}
	}
	// local player's turret
	else if (pCurrent->m_Team == TEAM_BLUE)
	{
		vec4 c = CustomStuff()->m_LocalColor;
		Graphics()->SetColor(c.r, c.g, c.b, 1);
	}
	
	Graphics()->QuadsSetRotation(Angle);
		
	RenderTools()->DrawSprite(Pos.x+Offset.x, Pos.y+(-40-9)*FlipY+Offset.y, 64*1.3f);
	Graphics()->QuadsEnd();



	// no ammo & low health status
	s = pCurrent->m_Status;
	bool Repair = s & (1<<BSTATUS_REPAIR);
	
	//s = pCurrent->m_Status;
	//bool NoAmmo = s & (1<<BSTATUS_NOPE);
	bool NoAmmo = false;
	
	if (Repair && int(CustomStuff()->LocalTick()/12+(Pos.x/8 + Pos.y/32))%8 < 4)
	{
		Graphics()->TextureSet(g_pData->m_aImages[IMAGE_BUILDINGS].m_Id);
		Graphics()->QuadsBegin();
		RenderTools()->SelectSprite(SPRITE_STATUS_REPAIR);
		Graphics()->SetColor(1, 1, 1, 1);
		
		Graphics()->QuadsSetRotation(0);
		
		RenderTools()->DrawSprite(Pos.x - (NoAmmo ? 24 : 0), Pos.y-50-52*FlipY, 52);
		Graphics()->QuadsEnd();
	}
}
Пример #10
0
int KHero::LuaStand(Lua_State* L)
{
    Stand(true);
    return 0;
}
BOOL CFixedPositionArcher::RandomRun()
{
	Stand(1000);
	return FALSE;
}
INT	CFixedPositionArcher::Tracing(CMoveShape*pTarget)
{
	SearchSkill(pTarget);

	CBaseModule* basemodule=0;
	stStaticModuParam* moduparam=0;
	BOOL  HasSkill=TRUE;
	INT MinAtkDistance=0;
	INT MaxAtkDistance=0;

	if (HasChoiceSkill())
	{
		basemodule=dynamic_cast<CMonster*>(m_pOwner)->GetActiveSkill(0);//GetSearchedSkillKey()
	}
	else
	{
		Stand(dynamic_cast<CMonster*>(m_pOwner)->GetStopFrame());
		WhenLoseTarget();
		return TRACE_RESULT_TRACE;
	}




	if (basemodule!=NULL)
	{
		moduparam=basemodule->GetStaticParam();
		MinAtkDistance=moduparam->lMinAtkDistance;
		MaxAtkDistance=moduparam->lMaxAtkDistance;
	}
	else
	{
		Stand(dynamic_cast<CMonster*>(m_pOwner)->GetStopFrame());
		WhenLoseTarget();
		return TRACE_RESULT_TRACE;
	}

	//##合乎距离要求。
	LONG lDistance = m_pOwner -> RealDistance( pTarget );

	//如果在技能的距离内, 则使用技能
	if(lDistance >= MinAtkDistance && lDistance <= MaxAtkDistance )
	{
		if (HasSkill)
		{
			return TRACE_RESULT_SUCCESS;
		}
		else
		{
			Stand(dynamic_cast<CMonster*>(m_pOwner)->GetStopFrame());
			WhenLoseTarget();
			return TRACE_RESULT_TRACE;
		}

	}
	//##如果依然在追击范围内,就开始跟随玩家。
	else
	{
		Stand(dynamic_cast<CMonster*>(m_pOwner)->GetStopFrame());
		return TRACE_RESULT_TRACE;

	}
}
Пример #13
0
void BattleCharacter::RefreshTurnStatus()
{
	Stand();
}
void KeyControlledAnimatedCharacter_cl::ProcessKeyboardEvents()
{

  bool bLeft = m_pInputMap->GetTrigger(CHARACTER_MOVE_LEFT)!=0;
  bool bRight = m_pInputMap->GetTrigger(CHARACTER_MOVE_RIGHT)!=0;
  bool bUp = m_pInputMap->GetTrigger(CHARACTER_MOVE_FORWARD)!=0;
  bool bDown = m_pInputMap->GetTrigger(CHARACTER_MOVE_BACKWARD)!=0;
  bool bShift = m_pInputMap->GetTrigger(CHARACTER_RUN)!=0;
  bool bRaiseLowerWeapon = m_pInputMap->GetTrigger(CHARACTER_TOGGLE_WEAPON)!=0;
  bool bAttack = m_pInputMap->GetTrigger(CHARACTER_ATTACK)!=0;
  
  if (bUp)
  {
    // trigger the run/walk actions when CURSOR UP is pressed.
    // allow rotating the entity while walking/running
    if ( bShift )
      Run();
    else
      Walk();

    if (bLeft)
      RotateLeft();
    else if (bRight)
      RotateRight();
  }
  else if(bDown)
  {
    // trigger the walk backward action when CURSOR DOWN is pressed.
    // allow rotating the entity while walking backwards
    WalkBackwards();

    if(bLeft)
      RotateLeft();
    else if(bRight)
      RotateRight();
  }
  else
  {
    // switch to stand action if character is not rotating ???????????
    if ( !IsInRotateState() && !IsInRotateArmedState() )
      Stand();

    // trigger rotate actions if CURSOR LEFT/RIGHT is pressed, otherwise trigger stand action
    if(bLeft)
      RotateLeft();
    else if(bRight)
      RotateRight();
    else
      Stand();
  }


  // raise or lower weapon on SPACE key
  if(bRaiseLowerWeapon)
  {
    if(IsInUpperBodyIdleState()||IsInUpperBodyLowerWeaponState())
      Arm();
    else if(IsInUpperBodyIdleArmedState()||IsInUpperBodyDrawWeaponState())
      DisArm();
  }

  // attack on ENTER key
  if ( bAttack )
    GetUpperBodyState()->Attack();
}
Пример #15
0
bool LookUpGate::RunLookUpGate(){
	

	switch (mLookUpState) {
	case STOP:
		stop();
		break;
		
    case SETTLE:
        lean();
        break;
		
	case LEAN:
        lean();
        break;
		
	case THROGHGATE:
        ThroughLookUpGate();
        break;
		
	case BACKTOGATE:
        BackLookUpGate();
        break;
		
    case STAND:
        Stand();
        break;
		
	case BALANCE:
        StartBalance();
        break;
		
    default:
        break;
    }
	
	
	if(SettleCompleteFlag == true) {
		mLookUpState = LEAN;
		SettleCompleteFlag = false;
	}
	
	if(LeanCompleteFlag == true) {
		mLookUpState = THROGHGATE;
		LeanCompleteFlag = false;
	}
	
	if(ThroghGateCompleteFlag == true) {
#ifdef LOOKUPGATEDOUBLE
	if(SecondFlag == true) {	//★★★ダブル用フラグ初期化
			mLookUpState = STAND;
	//	mbalancingwalker->init();	//★★★前倒防止制御 うまくいくかわからない
	} else {
		mLookUpState = BACKTOGATE;//★★★ダブル用フラグ初期化
			ev3_led_set_color(LED_ORANGE);
	}
#else
	//	if(SecondFlag == true) {	//★★★ダブル用フラグ初期化
			mLookUpState = STAND;
	//	mbalancingwalker->init();	//★★★前倒防止制御 うまくいくかわからない
	//	} else {
		//	mLookUpState = BACKTOGATE;//★★★ダブル用フラグ初期化
	//	}
		
#endif
		ThroghGateCompleteFlag = false;
	}
	
	if(BackGateCompleteFlag == true) {
		mLookUpState = THROGHGATE;
		BackGateCompleteFlag = false;
		SecondFlag = true;
	}
	
	if(StandCompleteFlag == true) {
		mLookUpState = BALANCE;
		StandCompleteFlag = false;
	}
	
	return(LookUpCompFlag);
}