本文整理汇总了C++中WorldObject类的典型用法代码示例。如果您正苦于以下问题:C++ WorldObject类的具体用法?C++ WorldObject怎么用?C++ WorldObject使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WorldObject类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: switch
void Garrison::Plot::DeleteGameObject(Map* map)
{
if (BuildingInfo.Guid.IsEmpty())
return;
for (ObjectGuid const& guid : BuildingInfo.Spawns)
{
WorldObject* object = nullptr;
switch (guid.GetHigh())
{
case HighGuid::Creature:
object = map->GetCreature(guid);
break;
case HighGuid::GameObject:
object = map->GetGameObject(guid);
break;
default:
continue;
}
if (object)
object->AddObjectToRemoveList();
}
BuildingInfo.Spawns.clear();
if (GameObject* oldBuilding = map->GetGameObject(BuildingInfo.Guid))
oldBuilding->Delete();
BuildingInfo.Guid.Clear();
}
示例2: MoveShips
void Sim::MoveShips()
{
for (int i = 0; i < ARRAYSIZE(mPlayers); ++i)
{
for (int j = 0; j < mPlayers[i].NumShips(); ++j)
{
if (mPlayers[i].GetShipHasTarget(j))
{
WorldObject* ship = mPlayers[i].GetShip(j);
V2 target = mPlayers[i].GetShipTarget(j);
V2 direction = (target - ship->pos).Normalize();
V2 delta = direction * F32(.35f);
V2 mappos = ToMap(ship->pos + delta);
ship->GetSpriteInstance()->SetAnimation(MapDeltaToBoatAnimation(delta));
if (mMap.Flags(mappos) & Map::Flag_Water)
{
ship->pos += delta;
if ((ship->pos - target).LengthSq() < 2)
{
mPlayers[i].SetShipHasTarget(j, false);
}
}
}
}
}
}
示例3: HandleObjectUpdate
void WorldSession::HandleObjectUpdate()
{
uint64 GUID;
uint8 UpdateField;
RecPckt >> GUID;
WorldObject* pObject = ObjectHolder<WorldObject>::Find(GUID);
while (!RecPckt.EndOfPacket())
{
RecPckt >> UpdateField;
switch (UpdateField)
{
case UPDATE_FIELD_X:
uint16 x;
RecPckt >> x;
pObject->MoveX(x);
break;
case UPDATE_FIELD_Y:
uint16 y;
RecPckt >> y;
pObject->MoveY(y);
break;
default:
break;
}
}
}
示例4: CHECK_WORLDOBJECT
Corpse* Eluna::CHECK_CORPSE(lua_State* L, int narg)
{
WorldObject* obj = CHECK_WORLDOBJECT(L, narg);
if (!obj)
return NULL;
return obj->ToCorpse();
}
示例5: DumpWorldToSyncLog
void DumpWorldToSyncLog( char *_filename )
{
FILE *file = fopen( _filename, "a" );
if( !file ) return;
fprintf( file, "\n\nBegin Final Object Positions\n" );
for( int i = 0; i < g_app->GetWorld()->m_teams.Size(); ++i )
{
Team *team = g_app->GetWorld()->m_teams[i];
for( int j = 0; j < team->m_fleets.Size(); ++j )
{
Fleet *fleet = team->m_fleets[j];
char *state = fleet->LogState();
fprintf( file, "%s\n", state );
}
}
for( int i = 0; i < g_app->GetWorld()->m_objects.Size(); ++i )
{
if( g_app->GetWorld()->m_objects.ValidIndex(i) )
{
WorldObject *obj = g_app->GetWorld()->m_objects[i];
char *state = obj->LogState();
fprintf( file, "%s\n", state );
}
}
fclose(file);
}
示例6: p
bool World::move(WorldObject* const worldObject, const int direction,
const int maxPower, int& usedPower)
{
Position p(0,0);
WorldObject *object;
WorldObjectList* list;
if ( maxPower < usedPower)
return false;
p.x = worldObject->p->x;
p.y = worldObject->p->y;
Direction::computePosition(&p,direction);
if (checkPosition(&p) == false )
return false;
list = world[p.x][p.y];
list->setToFirst();
while(object = list->getNext())
if(!object->conditionalMovement(worldObject,direction,maxPower,usedPower))
return false;
if(!moveObject(worldObject,direction))
return false;
return true;
}
示例7: WorldObject
/**
* Adds current path to WorldObjectManager's list. Note how we copy all the local
* to a new instance of a path world object.
*/
bool PathTool::addCurrent()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{
bool returnValue = true;
//only add path if it has more than 1 point
if (mCurrentNumberOfPoints > 1)
{
WorldObject* worldObject = new WorldObject();
worldObject->setName(mName);
worldObject->setColor(mColor);
worldObject->setGroup(WorldObject::PATH);
//instantiate path renderer and associate it with world object
PathRenderer* pathRenderer = new PathRenderer();
for (int i = 0; i < mCurrentNumberOfPoints; i++)
{
pathRenderer->addPoint(mPoints[i]);
}
worldObject->setMeshRenderer(pathRenderer);
//if object already exists (cannot add) perform cleanup
if (!WorldObjectManager::getInstance()->addWorldObject(worldObject))
{
//note: the path renderer that we associated with this world
//object will get deleted on the world object's destructor
delete worldObject;
returnValue = false;
}
}
return returnValue;
}
示例8: scoreEvaluator
int ActionCover::scoreEvaluator(Actor* actor,Action* action)
{
ActionCover* self = static_cast<ActionCover*>(action);
Anchor* resAnchor = NULL;
WorldObject* enemy = actor->getEnemy();
if (!enemy)
return 0;
if (self->m_attackInfo && !self->m_attackInfo->coverState.empty())
{
//check if there is anchor hereabout
Anchors& anchors = Anchor::getAnchors();
for (size_t i=0; i<anchors.size(); i++)
{
Anchor* anchor = anchors[i];
float distToEnemySq = (anchor->getPos() - enemy->getPos()).lengthSq();
if (distToEnemySq < MIN_DIST_TO_ENEMY*MIN_DIST_TO_ENEMY)
continue;
//.todo: check conditions(i.e. reasonable distance, availability, etc)
if (anchor->isVacant(actor))
{
resAnchor = anchor;
break;
}
}
}
if (resAnchor)
return 5;
else
return 0;
}
示例9: anchorRankEvaluator
float ActionCover::anchorRankEvaluator(Anchor* anchor)
{
float rank = -1.f;
if (anchor->isVacant(m_owner))
{
float dist = anchor->getDistSq(m_owner->getPos());
WorldObject* enemy = m_owner->getEnemy();
if (!enemy)
return rank;
float distToEnemySq = (anchor->getPos() - enemy->getPos()).lengthSq();
if (distToEnemySq < MIN_DIST_TO_ENEMY*MIN_DIST_TO_ENEMY)
return rank;
if (dist < MAX_DIST_TO_ANCHOR*MAX_DIST_TO_ANCHOR)
{
rank = 1.f/dist;
AnchorStatMap::iterator it = m_anchorStat.find(anchor);
unsigned int occupancyTime = it!=m_anchorStat.end() ? it->second : 0;
float occupancyTimeSec = (float) occupancyTime / 1000.f;
if (m_anchor == anchor && occupancyTimeSec < 10.f)
{
rank += 5.f; //persistence
}
else if(m_anchor != anchor && occupancyTimeSec < 5.f)
{
rank += 5.f - occupancyTimeSec;
}
}
}
return rank;
};
示例10: mousePressed
//---------------------------------------------------------------------------
MouseEventResult SelectingObjectsWithMouse::mousePressed( const MouseEvent& _evt )
{
World* world = WorldManager::getSingleton().getActiveWorld();
if(!world)
return MouseEventResult::NOT_PROCESSED;
Camera* camera = world->getCamera();
SceneManagerEx* sm = world->getSceneManager();
RaySceneQueryExPtr q = sm->createRayQueryEx(_evt.getAbsX(), _evt.getAbsY(), world->getViewportAbsCoord(), camera);
q->setQueryTypeMask( SceneQueryMask::VOB | SceneQueryMask::INVISIBLE_IN_GAME );
q->setMaxResults(1);
RaySceneQueryExResult& result = q->execute();
world->deselectAll();
if(!result.empty())
{
WorldObject* worldObject = WorldObject::getFromMovableObject(result.front().movable);
if(worldObject)
worldObject->select();
}
return MouseEventResult::PROCESSED;
}
示例11: SetTransportData
void MoveSplineInitArgs::SetTransportData(Unit& unit)
{
WorldObject* transport = NULL;
ObjectGuid _transportGuid = unit.GetTransportGuid();
switch(_transportGuid.GetHigh())
{
case HIGHGUID_PLAYER:
case HIGHGUID_VEHICLE:
transport = unit.GetMap()->GetUnit(_transportGuid);
break;
case HIGHGUID_MO_TRANSPORT:
transport = unit.GetMap()->GetTransport(_transportGuid);
break;
case HIGHGUID_TRANSPORT:
transport = unit.GetMap()->GetGameObject(_transportGuid);
break;
}
if (!transport)
{
ERROR_LOG("MoveSplineInitArgs: Unsupported transport %s for %s", _transportGuid.GetString().c_str(), unit.GetObjectGuid().GetString().c_str());
return;
}
else
DEBUG_LOG("MoveSplineInitArgs: Set transport %s for %s", _transportGuid.GetString().c_str(), unit.GetObjectGuid().GetString().c_str());
transportGuid = _transportGuid.GetRawValue();
transportSeat = unit.GetTransSeat();
transportPos = Location(transport->GetPositionX(), transport->GetPositionY(), transport->GetPositionZ(), transport->GetOrientation());
}
示例12: GetOwner
// Update the global position of a passenger
void TransportBase::UpdateGlobalPositionOf(ObjectGuid const& passengerGuid, Position const& pos) const
{
WorldObject* passenger = GetOwner()->GetMap()->GetWorldObject(passengerGuid);
if (!passenger)
return;
Position g = CalculateGlobalPositionOf(pos);
switch(passenger->GetTypeId())
{
case TYPEID_GAMEOBJECT:
case TYPEID_DYNAMICOBJECT:
m_owner->GetMap()->Relocation((GameObject*)passenger, g);
break;
case TYPEID_UNIT:
m_owner->GetMap()->Relocation((Creature*)passenger, g);
// If passenger is vehicle
if (((Unit*)passenger)->IsVehicle())
((Unit*)passenger)->GetVehicleKit()->UpdateGlobalPositions();
break;
case TYPEID_PLAYER:
m_owner->GetMap()->Relocation((Player*)passenger, g);
// If passenger is vehicle
if (((Unit*)passenger)->IsVehicle())
((Unit*)passenger)->GetVehicleKit()->UpdateGlobalPositions();
break;
case TYPEID_CORPSE:
// TODO - add corpse relocation
default:
break;
}
}
示例13: Vector
void ClusterBomb::explode()
{
#ifdef DEBUG
// printf("ClusterBomb just exploded!\n");
#endif
WorldObject * wo;
float angle = 6.28318 / BOMB_PIECES;
Vector a = Vector(1, 0, 0);
Vector b = Vector(0, 0, 1);
Vector c = Vector(0, .1, 0);
float mag = global::factory->getBlueprint(type).getSize().mag() / 4;
Vector off;
for (int i = 0; i < BOMB_PIECES; i++)
{
wo = new WorldObject(0, 0, DUMMY_SPHERE);
off = a * mag * sin(i * angle) + b * mag * cos(i * angle) + c;
wo->setPosition(position + off);
wo->setVelocity(velocity + off);
networkManager->network->getPhysicsPtr()->insertWorldObject(wo);
wo = new WorldObject(0, 0, DUMMY_SPHERE);
off = a * mag * cos(i * angle) + b * mag * sin(i * angle) - c;
wo->setPosition(position + off);
wo->setVelocity(velocity + off);
networkManager->network->getPhysicsPtr()->insertWorldObject(wo);
}
}
示例14: massiveDamage
void World::massiveDamage(const Vec2 &pos, int range, int damage)
{
// Пробегаем по всем объектам.
for ( std::list< WorldObject* >::iterator it = items.begin();
it != items.end();
++it )
{
// Нас интересуют пони.
if ( ( *it )->isTargetable() )
{
WorldObject* unit = *it;
// Интересуют только живые пони.
if ( !unit->isDead() )
{
// Находим расстояние до этого пони.
double distance = unit->getPos().distance(pos);
// Если зацепили пони.
if ( distance < range )
{
unit->hit( static_cast< int > ( damage ) );
}
}
}
}
}
示例15:
WorldObject *World::getNearestTarget(const Vec2 &pos, int range)
{
double minRange = 100000000;
WorldObject *target = nullptr;
for (std::list<WorldObject *>::iterator it = items.begin();
it != items.end();
++it)
{
WorldObject *unit = *it;
if (!unit->isTargetable())
continue;
if (unit->isDead())
continue;
double distance = pos.distance(unit->getPos());
if (distance < range)
{
if (distance < minRange)
{
minRange = distance;
target = unit;
}
}
}
return target;
}