Merge pull request #4722 from fluffyfreak/optimise-sector-view
Optimise sector view and docked face generationmaster
commit
8fe817d1ff
|
@ -38,7 +38,8 @@ widgetSizes.buttonFullRefuelSize = Vector2(widgetSizes.buttonSizeBase.x*2 + widg
|
||||||
widgetSizes.buttonLaunchSize = Vector2(widgetSizes.buttonSizeBase.x*5, widgetSizes.buttonSizeBase.y)
|
widgetSizes.buttonLaunchSize = Vector2(widgetSizes.buttonSizeBase.x*5, widgetSizes.buttonSizeBase.y)
|
||||||
widgetSizes.iconSize = Vector2(0, widgetSizes.buttonSizeBase.y)
|
widgetSizes.iconSize = Vector2(0, widgetSizes.buttonSizeBase.y)
|
||||||
|
|
||||||
local face;
|
local face = nil
|
||||||
|
local stationSeed = 0
|
||||||
local shipDef
|
local shipDef
|
||||||
local winPos = Vector2(0,0)
|
local winPos = Vector2(0,0)
|
||||||
|
|
||||||
|
@ -291,9 +292,12 @@ StationView:registerView({
|
||||||
refresh = function()
|
refresh = function()
|
||||||
local station = Game.player:GetDockedWith()
|
local station = Game.player:GetDockedWith()
|
||||||
shipDef = ShipDef[Game.player.shipId]
|
shipDef = ShipDef[Game.player.shipId]
|
||||||
if(station) then
|
if (station) then
|
||||||
local rand = Rand.New(station.seed)
|
if (stationSeed ~= station.seed) then
|
||||||
face = InfoFace.New(Character.New({ title = l.STATION_MANAGER }, rand), {windowPadding = widgetSizes.windowPadding, itemSpacing = widgetSizes.itemSpacing})
|
stationSeed = station.seed
|
||||||
|
local rand = Rand.New(station.seed)
|
||||||
|
face = InfoFace.New(Character.New({ title = l.STATION_MANAGER }, rand), {windowPadding = widgetSizes.windowPadding, itemSpacing = widgetSizes.itemSpacing})
|
||||||
|
end
|
||||||
hyperdrive = table.unpack(Game.player:GetEquip("engine")) or nil
|
hyperdrive = table.unpack(Game.player:GetEquip("engine")) or nil
|
||||||
hyperdrive_fuel = hyperdrive and hyperdrive.fuel or Equipment.cargo.hydrogen
|
hyperdrive_fuel = hyperdrive and hyperdrive.fuel or Equipment.cargo.hydrogen
|
||||||
hyperdriveIcon = PiImage.New("icons/goods/" .. hyperdrive_fuel.icon_name .. ".png")
|
hyperdriveIcon = PiImage.New("icons/goods/" .. hyperdrive_fuel.icon_name .. ".png")
|
||||||
|
|
|
@ -19,6 +19,10 @@ LuaManager::LuaManager() :
|
||||||
pi_lua_open_standard_base(m_lua);
|
pi_lua_open_standard_base(m_lua);
|
||||||
lua_atpanic(m_lua, pi_lua_panic);
|
lua_atpanic(m_lua, pi_lua_panic);
|
||||||
|
|
||||||
|
// this will print nothing currently because there's no stack yet, but it means that the function is included
|
||||||
|
// in the codebase and thus available via the "immediate" window in the MSVC debugger for us in any C++ lua function
|
||||||
|
pi_lua_stacktrace(m_lua);
|
||||||
|
|
||||||
instantiated = true;
|
instantiated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1072,3 +1072,18 @@ int secure_trampoline(lua_State *l)
|
||||||
lua_CFunction fn = lua_tocfunction(l, lua_upvalueindex(1));
|
lua_CFunction fn = lua_tocfunction(l, lua_upvalueindex(1));
|
||||||
return fn(l);
|
return fn(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://zeux.io/2010/11/07/lua-callstack-with-c-debugger/
|
||||||
|
void pi_lua_stacktrace(lua_State *l)
|
||||||
|
{
|
||||||
|
lua_Debug entry;
|
||||||
|
int depth = 0;
|
||||||
|
|
||||||
|
while (lua_getstack(l, depth, &entry)) {
|
||||||
|
int status = lua_getinfo(l, "Sln", &entry);
|
||||||
|
assert(status);
|
||||||
|
|
||||||
|
Output("%s(%d): %s\n", entry.short_src, entry.currentline, entry.name ? entry.name : "?");
|
||||||
|
depth++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -83,6 +83,8 @@ bool pi_lua_split_table_path(lua_State *l, const std::string &path);
|
||||||
|
|
||||||
int secure_trampoline(lua_State *l);
|
int secure_trampoline(lua_State *l);
|
||||||
|
|
||||||
|
void pi_lua_stacktrace(lua_State *l);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#define LUA_DEBUG_START(luaptr) const int __luaStartStackDepth = lua_gettop(luaptr)
|
#define LUA_DEBUG_START(luaptr) const int __luaStartStackDepth = lua_gettop(luaptr)
|
||||||
#define LUA_DEBUG_END(luaptr, expectedStackDiff) \
|
#define LUA_DEBUG_END(luaptr, expectedStackDiff) \
|
||||||
|
|
|
@ -370,6 +370,7 @@ void SectorView::OnClickSystem(const SystemPath &path)
|
||||||
void SectorView::PutSystemLabels(RefCountedPtr<Sector> sec, const vector3f &origin, int drawRadius)
|
void SectorView::PutSystemLabels(RefCountedPtr<Sector> sec, const vector3f &origin, int drawRadius)
|
||||||
{
|
{
|
||||||
PROFILE_SCOPED()
|
PROFILE_SCOPED()
|
||||||
|
|
||||||
Uint32 sysIdx = 0;
|
Uint32 sysIdx = 0;
|
||||||
for (std::vector<Sector::System>::iterator sys = sec->m_systems.begin(); sys != sec->m_systems.end(); ++sys, ++sysIdx) {
|
for (std::vector<Sector::System>::iterator sys = sec->m_systems.begin(); sys != sec->m_systems.end(); ++sys, ++sysIdx) {
|
||||||
// skip the system if it doesn't fall within the sphere we're viewing.
|
// skip the system if it doesn't fall within the sphere we're viewing.
|
||||||
|
@ -378,14 +379,20 @@ void SectorView::PutSystemLabels(RefCountedPtr<Sector> sec, const vector3f &orig
|
||||||
// if the system is the current system or target we can't skip it
|
// if the system is the current system or target we can't skip it
|
||||||
bool can_skip = !sys->IsSameSystem(m_selected) && !sys->IsSameSystem(m_hyperspaceTarget) && !sys->IsSameSystem(m_current);
|
bool can_skip = !sys->IsSameSystem(m_selected) && !sys->IsSameSystem(m_hyperspaceTarget) && !sys->IsSameSystem(m_current);
|
||||||
|
|
||||||
|
// skip if we have no population and won't drawn uninhabited systems
|
||||||
|
if (can_skip && (sys->GetPopulation() <= 0 && !m_drawUninhabitedLabels)) continue;
|
||||||
|
|
||||||
// skip the system if it belongs to a Faction we've toggled off and we can skip it
|
// skip the system if it belongs to a Faction we've toggled off and we can skip it
|
||||||
if (m_hiddenFactions.find(sys->GetFaction()) != m_hiddenFactions.end() && can_skip) continue;
|
if (can_skip && m_hiddenFactions.find(sys->GetFaction()) != m_hiddenFactions.end()) continue;
|
||||||
|
|
||||||
// determine if system in hyperjump range or not
|
// determine if system in hyperjump range or not
|
||||||
RefCountedPtr<const Sector> playerSec = GetCached(m_current);
|
RefCountedPtr<const Sector> playerSec = GetCached(m_current);
|
||||||
float dist = Sector::DistanceBetween(sec, sysIdx, playerSec, m_current.systemIndex);
|
float dist = Sector::DistanceBetween(sec, sysIdx, playerSec, m_current.systemIndex);
|
||||||
bool inRange = dist <= m_playerHyperspaceRange;
|
bool inRange = dist <= m_playerHyperspaceRange;
|
||||||
|
|
||||||
|
// skip if we're out of rangen and won't draw out of range systems systems
|
||||||
|
if (can_skip && (!inRange && !m_drawOutRangeLabels)) continue;
|
||||||
|
|
||||||
// place the label
|
// place the label
|
||||||
vector3d systemPos = vector3d((*sys).GetFullPosition() - origin);
|
vector3d systemPos = vector3d((*sys).GetFullPosition() - origin);
|
||||||
vector3d screenPos;
|
vector3d screenPos;
|
||||||
|
@ -426,7 +433,6 @@ void SectorView::PutFactionLabels(const vector3f &origin)
|
||||||
|
|
||||||
for (auto it = m_visibleFactions.begin(); it != m_visibleFactions.end(); ++it) {
|
for (auto it = m_visibleFactions.begin(); it != m_visibleFactions.end(); ++it) {
|
||||||
if ((*it)->hasHomeworld && m_hiddenFactions.find((*it)) == m_hiddenFactions.end()) {
|
if ((*it)->hasHomeworld && m_hiddenFactions.find((*it)) == m_hiddenFactions.end()) {
|
||||||
|
|
||||||
Sector::System sys = GetCached((*it)->homeworld)->m_systems[(*it)->homeworld.systemIndex];
|
Sector::System sys = GetCached((*it)->homeworld)->m_systems[(*it)->homeworld.systemIndex];
|
||||||
if ((m_pos * Sector::SIZE - sys.GetFullPosition()).Length() > (m_zoomClamped / FAR_THRESHOLD) * OUTER_RADIUS) continue;
|
if ((m_pos * Sector::SIZE - sys.GetFullPosition()).Length() > (m_zoomClamped / FAR_THRESHOLD) * OUTER_RADIUS) continue;
|
||||||
|
|
||||||
|
@ -800,7 +806,7 @@ void SectorView::DrawNearSector(const int sx, const int sy, const int sz, const
|
||||||
// if the system belongs to a faction we've chosen to temporarily hide
|
// if the system belongs to a faction we've chosen to temporarily hide
|
||||||
// then skip it if we can
|
// then skip it if we can
|
||||||
m_visibleFactions.insert(i->GetFaction());
|
m_visibleFactions.insert(i->GetFaction());
|
||||||
if (m_hiddenFactions.find(i->GetFaction()) != m_hiddenFactions.end() && can_skip) continue;
|
if (can_skip && m_hiddenFactions.find(i->GetFaction()) != m_hiddenFactions.end()) continue;
|
||||||
|
|
||||||
// determine if system in hyperjump range or not
|
// determine if system in hyperjump range or not
|
||||||
RefCountedPtr<const Sector> playerSec = GetCached(m_current);
|
RefCountedPtr<const Sector> playerSec = GetCached(m_current);
|
||||||
|
|
Loading…
Reference in New Issue