classic jesus trick.
function to make unit blind:
Code: Select all
function blindUnit (unitID)
local orgLos = Spring.GetUnitSensorRadius (unitID, "los")
Spring.Echo ("orgLos=" .. (orgLos or "nil"))
Spring.SetUnitSensorRadius (unitID, "los", 0)
Spring.SetUnitSensorRadius (unitID, "airLos", 0)
end
Code: Select all
function unblindUnit (unitID)
local unitDefID = Spring.GetUnitDefID (unitID)
local orgLos = UnitDefs[unitDefID]["losRadius"] * 64 --64 works with mah mod
Spring.Echo ("orgLos from def=" .. (orgLos or "nil"))
Spring.SetUnitSensorRadius (unitID, "los", orgLos)
local orgLosAir = UnitDefs[unitDefID]["airLosRadius"] * 300 --300 is not quite right yet
Spring.Echo ("orgLosAir from def=" .. (orgLosAir or "nil"))
Spring.SetUnitSensorRadius (unitID, "airLos", orgLosAir)
end
Code: Select all
orgLos = UnitDefs[unitDefID]["losRadius"]
Spring.SetUnitSensorRadius (unitID, "los", orgLos)
Appearently the correct formula would be this:
https://github.com/spring/spring/blob/9 ... f.cpp#L326
Code: Select all
losRadius = udTable.GetFloat("sightDistance", 0.0f) * modInfo.losMul / (SQUARE_SIZE * (1 << modInfo.losMipLevel));
airLosRadius = udTable.GetFloat("airSightDistance", -1.0f);
if (airLosRadius == -1.0f) {
airLosRadius = udTable.GetFloat("sightDistance", 0.0f) * modInfo.airLosMul * 1.5f / (SQUARE_SIZE * (1 << modInfo.airMipLevel));
} else {
airLosRadius = airLosRadius * modInfo.airLosMul / (SQUARE_SIZE * (1 << modInfo.airMipLevel));
}
http://springrts.com/wiki/Modrules.lua#sensors
But how?
/edit
Tried GetUnitSensorRadius but
Spring.GetUnitSensorRadius (unitID, "airLos")
Spring.GetUnitSensorRadius (unitID, "los")
both return 0
Spring.GetUnitSensorRadius (unitID, "radar")
returns 960 if the unit has radarDistance = 1000, in its file.