示例#1
0
void Missile::RecvObject(RakNet::BitStream* bs, MyMsgIDs type)
{
	char _deleted;

	switch (type)
	{
		case ID_UPDATEMISSILE:
		{
			bs->Read(_deleted);
			// So were we deleted this time?
			if (_deleted == 1)
			{
				deleted = 1;
			}
			else
			{
				// Since we weren't deleted, let's update ourselvs
				float x, y, w;
				bs->Read(x);
				bs->Read(y);
				bs->Read(w);
				UpdateLoc(x, y, w);
				bs->Read(x);
				SetVelocityX(x);
				bs->Read(y);
				SetVelocityY(y);
			}
			break;
		}
	}
}
示例#2
0
void PlayerObject::HandleEvent(Event* pEvent)
{
	if (pEvent->GetEventID() == "playerKeyUp.Up")
	{
		SetVelocityY(0.0);
		ChangeAnimation("Idle");
	}
	else if (pEvent->GetEventID() == "playerKeyUp.Down")
	{
		SetVelocityY(0.0);
		ChangeAnimation("Idle");
	}
	else if (pEvent->GetEventID() == "playerKeyUp.Right")
	{
		SetVelocityX(0.0);
		ChangeAnimation("Idle");
		m_Animations[m_currentAnimation]->SetScale(XMFLOAT2(1.0f, 1.0f));
	}
	else if (pEvent->GetEventID() == "playerKeyUp.Left")
	{
		SetVelocityX(0.0);
		ChangeAnimation("Idle");
		m_Animations[m_currentAnimation]->SetScale(XMFLOAT2(-1.0f, 1.0f));
	}
	else if (pEvent->GetEventID() == "playerKeyDown.Up")
	{
		SetVelocityY(25.0f);
		ChangeAnimation("Walk");
	}
	else if (pEvent->GetEventID() == "playerKeyDown.Down")
	{
		SetVelocityY(-25.0f);
		ChangeAnimation("Walk");
	}
	else if (pEvent->GetEventID() == "playerKeyDown.Right")
	{
		SetVelocityX(25.0f);
		ChangeAnimation("Walk");
		m_Animations[m_currentAnimation]->SetScale(XMFLOAT2(1.0f, 1.0f));
	}
	else if (pEvent->GetEventID() == "playerKeyDown.Left")
	{
		SetVelocityX(-25.0f);
		ChangeAnimation("Walk");
		m_Animations[m_currentAnimation]->SetScale(XMFLOAT2(-1.0f, 1.0f));
	}
}
示例#3
0
void FallingObject::OnDestroy() {
	dying = true;
	SetPower(0);
	SetVelocityX(0);
	SetVelocityY(0);

	if( m_currentSprite == 24)
	{
		SetX(rand() % World::GetScreenWidth());
		SetY(0);
		SetVelocityY(5 + rand() % 10);
		SetVelocityX(-4);
		SetPower(1);
		SetHealth(1);
		dying = false;
		m_currentSprite = 5;
	}
}
示例#4
0
void cFreePlayMenu::Step (uint32_t a_ElapsedMiliSec)
{
   if (GetPosition() != GetPreviousPosition())
   {
      sf::Vector3<double> l_Position = GetPosition();
      m_Player1Label.setPosition(GetPosition().x, l_Position.y + 4);
      l_Position.y += m_pPlayer1Option->GetBoundingBox().height + 5;
      m_Player2Label.setPosition(GetPosition().x, l_Position.y + 4);
      l_Position.y += m_pPlayer2Option->GetBoundingBox().height + 5;
      m_GameSpeedLabel.setPosition(GetPosition().x, l_Position.y + 4);
   }

   // We can't post a message from inside the MessageReceived function, so it
   // gets deferred to here instead.
   // TODO: This might not actually be true. It might only be registering for
   // messages that is problematic.
   if (m_PostBackMessage)
   {
      sMessage l_Message;
      l_Message.m_From = GetUniqueId();
      l_Message.m_Category = "Button";
      l_Message.m_Key = "Menu Change";
      l_Message.m_Value = "cMainMenu";
      GetResources()->GetMessageDispatcher()->PostMessage(l_Message);
      m_PostBackMessage = false;
   }

   if (GetVelocity().x < 0)
   {
      if (GetPosition().x + m_Player1Label.getLocalBounds().width < GetResources()->GetWindow()->getSize().x / 2)
      {
         SetVelocityX(0, kNormal);
      }
   }
   else if (GetVelocity().x > 0)
   {
      if (GetPosition().x > GetResources()->GetWindow()->getSize().x)
      {
         SetVelocityX(0, kNormal);
      }
   }
}
示例#5
0
void cBonusShot::Initialize()
{
   m_OriginalPosition = GetPosition();

   // Initial angle starts away from destination
   m_AngleInRadians = atan2(m_Destination.y - m_OriginalPosition.y, m_Destination.x - m_OriginalPosition.x);
   m_AngleInRadians += g_kPI;

   SetVelocityX(cos(m_AngleInRadians) * m_Speed, kNormal);
   SetVelocityY(sin(m_AngleInRadians) * m_Speed, kNormal);
}
示例#6
0
Character::Character(World* world, int initialPosX, int initialPosY, int velX, int velY)
	: ControlableGameObject(world, initialPosX, initialPosY, CLIP_WIDTH,
			CLIP_HEIGHT , velX, velY, CHAR_HEALTH, CHAR_POWER, LOAD_PATH)
{
	m_currentSprite = 0;
	jumpFrame = 0;
	SetVelocityX(0);
	SetVelocityY(0);

	currentFrame = 0;
}
示例#7
0
void cFreePlayMenu::MessageReceived(sMessage a_Message)
{
   if (a_Message.m_From == m_pStartButton->GetUniqueId())
   {
      //~ std::cout << "Start button pressed" << std::endl;
      GetResources()->SetActiveLevel("Level1", true);

      std::string l_Player1Option = m_pPlayer1Option->GetSelectedOption();
      std::string l_Player2Option = m_pPlayer2Option->GetSelectedOption();
      std::string l_GameSpeed = m_pGameSpeedOption->GetSelectedOption();

      GetResources()->GetGameConfigData()->SetProperty("Player1", l_Player1Option);
      GetResources()->GetGameConfigData()->SetProperty("Player2", l_Player2Option);
      GetResources()->GetGameConfigData()->SetProperty("GameType", "FreePlay");
      GetResources()->GetGameConfigData()->SetProperty("GameSpeed", l_GameSpeed);

   }
   else if (a_Message.m_From == m_pBackButton->GetUniqueId())
   {
      SetVelocityX(1000, kNormal);
      m_PostBackMessage = true;
   }
}
示例#8
0
void cBonusShot::Step (uint32_t a_ElapsedMiliSec)
{
   // Calculate angle to destination
   double l_AngleToDest =
      atan2(m_Destination.y - GetPosition().y, m_Destination.x - GetPosition().x);

   if (m_AngleInRadians < l_AngleToDest + g_kPI / 40 || m_AngleInRadians > l_AngleToDest - g_kPI / 40)
   {
      // We need to rotate our angle towards destination. Figure out direction.
      bool l_IsClockwise = false;
      if (l_AngleToDest < -g_kPI / 2.0)
      {
         l_IsClockwise = true;
      }

      double l_AngleDiff = l_AngleToDest - m_AngleInRadians;
      l_AngleDiff = std::fmod(l_AngleDiff, 2 * g_kPI);
      //~ if (l_AngleDiff > 0)
      //~ {
         //~ l_IsClockwise = false;
      //~ }
//~
      //~ if (l_AngleDiff > g_kPI)
      //~ {
         //~ l_IsClockwise = !l_IsClockwise;
      //~ }

      // Now rotate
      if (m_Speed < g_kMaxSpeed)
      {
         m_Speed += g_kAcceleration * a_ElapsedMiliSec / 1000;
      }
      //~ else
      //~ {
         //~ std::cout << "MAXXXXXXXXXXXX" << std::endl;
      //~ }

      double l_DistanceToRotate = m_Speed / 1000 * 4 * g_kPI * a_ElapsedMiliSec / 1000.0;
      if (l_DistanceToRotate > fabs(l_AngleDiff))
      {
         m_AngleInRadians = l_AngleToDest;
      }
      else if (l_IsClockwise)
      {
         m_AngleInRadians -= l_DistanceToRotate;
         if (m_AngleInRadians < -g_kPI)
         {
            m_AngleInRadians += 2 * g_kPI;
         }
      }
      else
      {
         m_AngleInRadians += l_DistanceToRotate;
         if (m_AngleInRadians > g_kPI)
         {
            m_AngleInRadians -= 2 * g_kPI;
         }
      }

   }

   SetVelocityX(cos(m_AngleInRadians) * m_Speed, kNormal);
   SetVelocityY(sin(m_AngleInRadians) * m_Speed, kNormal);

   // If the destination is between our position and original position then we
   // made it.
   sf::Vector3<double> l_Distance1 = m_Destination - m_OriginalPosition;
   sf::Vector3<double> l_Distance2 = GetPosition() - m_OriginalPosition;
   if (fabs(l_Distance2.x) > fabs(l_Distance1.x))
   {
      UnregisterObject(true);
   }

}
示例#9
0
// These functions are overloaded from cObject
void cCloud::Initialize()
{
   m_Speed += GetPosition().y/17;
   SetVelocityX(m_Speed, kNormal);
}