本文整理汇总了C++中SystemBody类的典型用法代码示例。如果您正苦于以下问题:C++ SystemBody类的具体用法?C++ SystemBody怎么用?C++ SystemBody使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SystemBody类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: l_sbody_attr_children
static int l_sbody_attr_children(lua_State *l)
{
SystemBody * sbody = LuaObject<SystemBody>::CheckFromLua(1);
LuaTable children(l);
int i = 1;
for (auto child : sbody->GetChildren()) {
LuaPush(l, i++);
LuaObject<SystemBody>::PushToLua(child);
lua_settable(l, -3);
}
return 1;
}
示例2: l_sbody_attr_parent
/*
* Attribute: parent
*
* The parent of the body, as a <SystemBody>. A body orbits its parent.
*
* Availability:
*
* alpha 14
*
* Status:
*
* stable
*/
static int l_sbody_attr_parent(lua_State *l)
{
SystemBody *sbody = LuaObject<SystemBody>::CheckFromLua(1);
// sbody->parent is 0 as it was cleared by the acquirer. we need to go
// back to the starsystem proper to get what we need.
RefCountedPtr<StarSystem> s = Pi::game->GetGalaxy()->GetStarSystem(sbody->GetPath());
SystemBody *live_sbody = s->GetBodyByPath(sbody->GetPath());
if (!live_sbody->GetParent())
return 0;
LuaObject<SystemBody>::PushToLua(live_sbody->GetParent());
return 1;
}
示例3: l_sbody_attr_body
static int l_sbody_attr_body(lua_State *l)
{
SystemBody * sbody = LuaObject<SystemBody>::CheckFromLua(1);
if(Pi::game) {
Space *space = Pi::game->GetSpace();
if(space) {
const SystemPath &path = sbody->GetPath();
Body *body = space->FindBodyForPath(&path);
if(body) {
LuaObject<Body>::PushToLua(body);
} else {
lua_pushnil(l);
}
}
} else {
lua_pushnil(l);
}
return 1;
}
示例4: assert
vector3d Space::GetHyperspaceExitPoint(const SystemPath &source, const SystemPath &dest) const
{
assert(m_starSystem);
assert(source.IsSystemPath());
assert(dest.IsSameSystem(m_starSystem->GetPath()));
RefCountedPtr<const Sector> source_sec = m_sectorCache->GetCached(source);
RefCountedPtr<const Sector> dest_sec = m_sectorCache->GetCached(dest);
Sector::System source_sys = source_sec->m_systems[source.systemIndex];
Sector::System dest_sys = dest_sec->m_systems[dest.systemIndex];
const vector3d sourcePos = vector3d(source_sys.GetPosition()) + vector3d(source.sectorX, source.sectorY, source.sectorZ);
const vector3d destPos = vector3d(dest_sys.GetPosition()) + vector3d(dest.sectorX, dest.sectorY, dest.sectorZ);
Body *primary = 0;
if (dest.IsBodyPath()) {
assert(dest.bodyIndex < m_starSystem->GetNumBodies());
primary = FindBodyForPath(&dest);
while (primary && primary->GetSystemBody()->GetSuperType() != SystemBody::SUPERTYPE_STAR) {
SystemBody* parent = primary->GetSystemBody()->GetParent();
primary = parent ? FindBodyForPath(&parent->GetPath()) : 0;
}
}
if (!primary) {
// find the first non-gravpoint. should be the primary star
for (Body* b : GetBodies())
if (b->GetSystemBody()->GetType() != SystemBody::TYPE_GRAVPOINT) {
primary = b;
break;
}
}
assert(primary);
// point along the line between source and dest, a reasonable distance
// away based on the radius (don't want to end up inside black holes, and
// then mix it up so that ships don't end up on top of each other
vector3d pos = (sourcePos - destPos).Normalized() * (primary->GetSystemBody()->GetRadius()/AU+1.0)*11.0*AU*Pi::rng.Double(0.95,1.2) + MathUtil::RandomPointOnSphere(5.0,20.0)*1000.0;
assert(pos.Length() > primary->GetSystemBody()->GetRadius());
return pos + primary->GetPositionRelTo(GetRootFrame());
}
示例5: position_system_lights
static void position_system_lights(Frame *camFrame, Frame *frame, std::vector<Camera::LightSource> &lights)
{
if (lights.size() > 3) return;
SystemBody *body = frame->GetSystemBody();
// IsRotFrame check prevents double counting
if (body && !frame->IsRotFrame() && (body->GetSuperType() == SystemBody::SUPERTYPE_STAR)) {
vector3d lpos = frame->GetPositionRelTo(camFrame);
const double dist = lpos.Length() / AU;
lpos *= 1.0/dist; // normalize
const float *col = StarSystem::starRealColors[body->type];
const Color lightCol(col[0], col[1], col[2], 0.f);
vector3f lightpos(lpos.x, lpos.y, lpos.z);
lights.push_back(Camera::LightSource(frame->GetBody(), Graphics::Light(Graphics::Light::LIGHT_DIRECTIONAL, lightpos, lightCol, lightCol)));
}
for (Frame::ChildIterator it = frame->BeginChildren(); it != frame->EndChildren(); ++it) {
position_system_lights(camFrame, *it, lights);
}
}
示例6: l_set_hyperspace_target
static int l_set_hyperspace_target(lua_State *l)
{
LuaObject<Player>::CheckFromLua(1);
if (Pi::game->IsNormalSpace()) {
const SystemPath path = *LuaObject<SystemPath>::CheckFromLua(2);
if (!path.IsSystemPath()) {
if (!path.IsBodyPath()) {
return luaL_error(l, "Player:SetHyperspaceTarget() -- second parameter is not a system path or the path of a star");
}
RefCountedPtr<StarSystem> sys = Pi::game->GetGalaxy()->GetStarSystem(path);
// Lua should never be able to get an invalid SystemPath
// (note: this may change if it becomes possible to remove systems during the game)
assert(path.bodyIndex < sys->GetNumBodies());
SystemBody *sbody = sys->GetBodyByPath(path);
if (!sbody->GetSuperType() == SystemBody::SUPERTYPE_STAR)
return luaL_error(l, "Player:SetHyperspaceTarget() -- second parameter is not a system path or the path of a star");
}
Pi::game->GetSectorView()->SetHyperspaceTarget(path);
return 0;
} else
return luaL_error(l, "Player:SetHyperspaceTarget() cannot be used while in hyperspace");
}
示例7: l_space_spawn_ship_landed_near
/*
* Function: SpawnShipLandedNear
*
* Create a ship and place it on the surface near the given <Body>.
*
* > ship = Space.SpawnShipLandedNear(type, body, min, max)
*
* Parameters:
*
* type - the name of the ship
*
* body - the <Body> near which the ship should be spawned. It must be on the ground or close to it,
* i.e. it must be in the rotating frame of the planetary body.
*
* min - minimum distance from the surface point below the body to place the ship, in Km
*
* max - maximum distance to place the ship
*
* Return:
*
* ship - a <Ship> object for the new ship
*
* Example:
*
* > -- spawn a ship 10km from the player
* > local ship = Ship.SpawnShipLandedNear("viper_police", Game.player, 10, 10)
*
* Availability:
*
* July 2013
*
* Status:
*
* experimental
*/
static int l_space_spawn_ship_landed_near(lua_State *l)
{
if (!Pi::game)
luaL_error(l, "Game is not started");
LUA_DEBUG_START(l);
const char *type = luaL_checkstring(l, 1);
if (! ShipType::Get(type))
luaL_error(l, "Unknown ship type '%s'", type);
Body *nearbody = LuaObject<Body>::CheckFromLua(2);
const float min_dist = luaL_checknumber(l, 3);
const float max_dist = luaL_checknumber(l, 4);
if (min_dist > max_dist)
luaL_error(l, "min_dist must not be larger than max_dist");
Ship *ship = new Ship(type);
assert(ship);
// XXX protect against spawning inside the body
Frame * newframe = nearbody->GetFrame()->GetRotFrame();
if (!newframe->IsRotFrame())
luaL_error(l, "Body must be in rotating frame");
SystemBody *sbody = newframe->GetSystemBody();
if (sbody->GetSuperType() != SystemBody::SUPERTYPE_ROCKY_PLANET)
luaL_error(l, "Body is not on a rocky planet");
if (max_dist > sbody->GetRadius())
luaL_error(l, "max_dist too large for planet radius");
// We assume that max_dist is much smaller than the planet radius, i.e. that our area is reasonably flat
// So, we
const vector3d up = nearbody->GetPosition().Normalized();
vector3d x;
vector3d y;
// Calculate a orthonormal basis for a horizontal plane. For numerical reasons we do that determining the smallest
// coordinate and take the cross product with (1,0,0), (0,1,0) or (0,0,1) respectively to calculate the first vector.
// The second vector is just the cross product of the up-vector and out first vector.
if (up.x <= up.y && up.x <= up.z) {
x = vector3d(0.0, up.z, -up.y).Normalized();
y = vector3d(-up.y*up.y - up.z*up.z, up.x*up.y, up.x*up.z).Normalized();
} else if (up.y <= up.x && up.y <= up.z) {
x = vector3d(-up.z, 0.0, up.x).Normalized();
y = vector3d(up.x*up.y, -up.x*up.x - up.z*up.z, up.y*up.z).Normalized();
} else {
x = vector3d(up.y, -up.x, 0.0).Normalized();
y = vector3d(up.x*up.z, up.y*up.z, -up.x*up.x - up.y*up.y).Normalized();
}
Planet *planet = static_cast<Planet*>(newframe->GetBody());
const double radius = planet->GetSystemBody()->GetRadius();
const vector3d planar = MathUtil::RandomPointInCircle(min_dist * 1000.0, max_dist * 1000.0);
vector3d pos = (radius * up + x * planar.x + y * planar.y).Normalized();
float latitude = atan2(pos.y, sqrt(pos.x*pos.x + pos.z * pos.z));
float longitude = atan2(pos.x, pos.z);
Pi::game->GetSpace()->AddBody(ship);
ship->SetLandedOn(planet, latitude, longitude);
LuaObject<Ship>::PushToLua(ship);
LUA_DEBUG_END(l, 1);
return 1;
}
示例8: l_sbody_attr_apoapsis
/*
* Attribute: apoapsis
*
* The apoapsis of the body's orbit, in metres (m).
*
* Availability:
*
* alpha 16
*
* Status:
*
* experimental
*/
static int l_sbody_attr_apoapsis(lua_State *l)
{
SystemBody *sbody = LuaObject<SystemBody>::CheckFromLua(1);
lua_pushnumber(l, sbody->GetOrbMax()*AU);
return 1;
}
示例9: l_sbody_attr_super_type
/*
* Attribute: superType
*
* The supertype of the body, as a <Constants.BodySuperType> constant
*
* Availability:
*
* alpha 10
*
* Status:
*
* stable
*/
static int l_sbody_attr_super_type(lua_State *l)
{
SystemBody *sbody = LuaObject<SystemBody>::CheckFromLua(1);
lua_pushstring(l, EnumStrings::GetString("BodySuperType", sbody->GetSuperType()));
return 1;
}
示例10: l_sbody_attr_astro_description
static int l_sbody_attr_astro_description(lua_State *l)
{
SystemBody * sbody = LuaObject<SystemBody>::CheckFromLua(1);
LuaPush(l, sbody->GetAstroDescription());
return 1;
}
示例11: l_sbody_attr_orbital_period
/*
* Attribute: orbitPeriod
*
* The orbit of the body, around its parent, in days, as a float
*
* Availability:
*
* 201708
*
* Status:
*
* experimental
*/
static int l_sbody_attr_orbital_period(lua_State *l)
{
SystemBody *sbody = LuaObject<SystemBody>::CheckFromLua(1);
lua_pushnumber(l, sbody->GetOrbit().Period() / float(60*60*24));
return 1;
}
示例12: l_sbody_attr_eccentricty
/*
* Attribute: eccentricity
*
* The orbital eccentricity of the body
*
* Availability:
*
* alpha 16
*
* Status:
*
* experimental
*/
static int l_sbody_attr_eccentricty(lua_State *l)
{
SystemBody *sbody = LuaObject<SystemBody>::CheckFromLua(1);
lua_pushnumber(l, sbody->GetEccentricity());
return 1;
}
示例13: l_sbody_attr_path
static int l_sbody_attr_path(lua_State *l)
{
SystemBody * sbody = LuaObject<SystemBody>::CheckFromLua(1);
LuaObject<SystemPath>::PushToLua(sbody->GetPath());
return 1;
}
示例14: l_sbody_attr_gravity
/*
* Attribute: gravity
*
* The gravity on the surface of the body (m/s).
*
* Availability:
*
* alpha 21
*
* Status:
*
* experimental
*/
static int l_sbody_attr_gravity(lua_State *l)
{
SystemBody *sbody = LuaSystemBody::CheckFromLua(1);
lua_pushnumber(l, sbody->CalcSurfaceGravity());
return 1;
}
示例15: l_sbody_attr_is_scoopable
static int l_sbody_attr_is_scoopable(lua_State *l)
{
SystemBody * sbody = LuaSystemBody::CheckFromLua(1);
lua_pushboolean(l, sbody->IsScoopable());
return 1;
}