本文整理汇总了C++中Projectile::GetOwner方法的典型用法代码示例。如果您正苦于以下问题:C++ Projectile::GetOwner方法的具体用法?C++ Projectile::GetOwner怎么用?C++ Projectile::GetOwner使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Projectile
的用法示例。
在下文中一共展示了Projectile::GetOwner方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Shoot
void Application::Shoot(Projectile::PROJECTILE_TYPE type)
{
Projectile* p = FetchProjectile();
if (p)
{
float posX = ships_.at(0)->GetX();
float posY = ships_.at(0)->GetY();
switch (type)
{
case Projectile::PROJ_BULLET:
{
// TODO: Find pos
p->Init(ships_.at(0), type, posX, posY, ships_.at(0)->GetW());
p->SetDamage(1);
p->SetSpeed(400.f);
bulletShootTimer = 0.f;
}
break;
case Projectile::PROJ_SEEKING_MISSLE:
{
// TODO: Find pos
p->Init(ships_.at(0), type, posX, posY, ships_.at(0)->GetW());
p->SetDamage(5);
p->SetSpeed(250.f);
p->SetTarget(FindNearest());
missileShootTimer = 0.f;
}
break;
}
RakNet::BitStream bs;
bs.Write((unsigned char)ID_SHOOT);
bs.Write(p->GetID());
bs.Write(p->GetType());
bs.Write(p->GetX());
bs.Write(p->GetY());
bs.Write(p->GetW());
bs.Write(p->GetVelocityX());
bs.Write(p->GetVelocityY());
bs.Write(p->GetSpeed());
bs.Write(p->GetDamage());
bs.Write(p->GetOwner()->GetID());
// Send target if available
if (p->GetTarget())
{
bs.Write(p->GetTarget()->GetID());
}
else
{
bs.Write(-1);
}
rakpeer_->Send(&bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_SYSTEM_ADDRESS, true);
}
}
示例2: Update
//.........这里部分代码省略.........
// Lab 13 Task 13 : Update network missiles
/*for (MissileList::iterator missile = missiles_.begin(); missile != missiles_.end(); missile++)
{
if ((*missile)->Update(ships_, timedelta))
{
//havecollision
delete*missile;
missiles_.erase(missile);
break;
}
}*/
// Update enemies
/*for (vector<Enemy*>::iterator it = enemyList.begin(); it != enemyList.end(); ++it)
{
Enemy* e = *it;
if (e->GetActive())
{
bool reset = e->Update(timedelta);
if (reset)
{
RakNet::BitStream bs;
bs.Write((unsigned char)ID_DESTROY_ENEMY);
bs.Write(e->GetID());
rakpeer_->Send(&bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_SYSTEM_ADDRESS, true);
}
}
}*/
// Update projectile
for (vector<Projectile*>::iterator it = projectileList.begin(); it != projectileList.end(); ++it)
{
Projectile* p = *it;
if (/*p->GetOwner() == ships_.at(0) && */p->GetActive()) // Only update your own projectile
{
bool reset = p->Update(timedelta);
RakNet::BitStream bs;
if (reset)
{
DestroyProjectile(p);
bs.Write((unsigned char)ID_DESTROY_PROJECTILE);
bs.Write(p->GetID());
rakpeer_->Send(&bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_SYSTEM_ADDRESS, true);
}
else
{
for (vector<Enemy*>::iterator it2 = enemyList.begin(); it2 != enemyList.end(); ++it2)
{
Enemy* e = *it2;
if (e->GetActive())
{
bool collision = p->CollideWith(e);
if (collision)
{
int newHP = e->Injure(p->GetDamage());
if (newHP <= 0)
{
RakNet::BitStream bs;
// Add score to player
p->GetOwner()->AddScore(100);
bs.Write((unsigned char)ID_UPDATE_SCORE);
bs.Write(p->GetOwner()->GetID());
bs.Write(p->GetOwner()->GetScore());
rakpeer_->Send(&bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_SYSTEM_ADDRESS, true);
示例3: OnObjectCollision
void ServerArena::OnObjectCollision(GLib::Object3D* pObjectA, GLib::Object3D* pObjectB)
{
GLib::ObjectType typeA = pObjectA->GetType();
GLib::ObjectType typeB = pObjectB->GetType();
// Player - Projectile collision only.
if((pObjectB->GetType() == GLib::PLAYER && pObjectA->GetType() == GLib::PROJECTILE) || (pObjectB->GetType() == GLib::PROJECTILE && pObjectA->GetType() == GLib::PLAYER))
{
Projectile* projectile = pObjectA->GetType() == GLib::PROJECTILE ? (Projectile*)pObjectA : (Projectile*)pObjectB;
Player* player = pObjectA->GetType() == GLib::PLAYER ? (Player*)pObjectA : (Player*)pObjectB;
if(projectile->GetOwner() == player->GetId())
return;
if(mServer->GetArenaState() != SHOPPING_STATE && !player->GetEliminated())
{
// Checks what skill the projectile is and uses the XML data to determine the skill attributes
// depending on the skill level.
projectile->HandlePlayerCollision(player, this, mServer->GetItemLoader());
// Add status effect if there is any.
StatusEffect* statusEffect = projectile->GetStatusEffect(mServer->GetItemLoader());
if(statusEffect != nullptr)
player->AddStatusEffect(statusEffect);
// Set hurt animation.
if(player->GetCurrentAnimation() != 7) // Death animation
player->SetAnimation(6, 0.4f);
// Add lifesteal life.
Player* owner = (Player*)mWorld->GetObjectById(projectile->GetOwner());
owner->SetCurrentHealth(owner->GetCurrentHealth() + owner->GetLifeSteal());
// Let the clients now about the changes immediately.
BroadcastWorld();
// Tell all clients about the collision.
RakNet::BitStream bitstream;
bitstream.Write((unsigned char)NMSG_PROJECTILE_PLAYER_COLLISION);
bitstream.Write(projectile->GetId()); // Projectile Id.
bitstream.Write(player->GetId()); // Player Id.
mServer->SendClientMessage(bitstream);
gConsole->AddLine("Projectile - Player collision (" + to_string(player->GetId()) + ", " + to_string(projectile->GetId())+ ")");
}
// Remove the projectile.
projectile->Kill();
}
else if(pObjectA->GetType() == GLib::PROJECTILE && pObjectB->GetType() == GLib::PROJECTILE)
{
Projectile* projectileA = (Projectile*)pObjectA;
Projectile* projectileB = (Projectile*)pObjectB;
if(projectileA->GetOwner() != projectileB->GetOwner())
{
pObjectA->Kill();
pObjectB->Kill();
// Tell all clients about the collision.
RakNet::BitStream bitstream;
bitstream.Write((unsigned char)NMSG_PROJECTILE_PROJECTILE_COLLISION);
mServer->SendClientMessage(bitstream);
}
}
}