myspace / Lua /Config /pathfind.lua
sirnii's picture
Upload 1816 files
b6a38d7 verified
raw
history blame
5.87 kB
const.TunnelTypeWalk = 2^0
const.TunnelTypeStairs = 2^1
const.TunnelTypeLadder = 2^2
const.TunnelTypeDrop1 = 2^3
const.TunnelTypeDrop2 = 2^4
const.TunnelTypeDrop3 = 2^5
const.TunnelTypeDrop4 = 2^6
const.TunnelTypeClimb1 = 2^7
const.TunnelTypeClimb2 = 2^8
const.TunnelTypeClimb3 = 2^9
const.TunnelTypeClimb4 = 2^10
const.TunnelTypeJumpOver1 = 2^11
const.TunnelTypeJumpOver2 = 2^12
const.TunnelTypeJumpAcross1 = 2^13
const.TunnelTypeJumpAcross2 = 2^14
const.TunnelTypeDoor = 2^15
const.TunnelTypeDoorBlocked = 2^16
const.TunnelTypeWindow = 2^17
const.TunnelMaskWalkFlat = const.TunnelTypeWalk
const.TunnelMaskWalk = const.TunnelTypeWalk | const.TunnelTypeStairs
const.TunnelMaskClimb = const.TunnelTypeClimb1 | const.TunnelTypeClimb2 | const.TunnelTypeClimb3 | const.TunnelTypeClimb4
const.TunnelMaskDrop = const.TunnelTypeDrop1 | const.TunnelTypeDrop2 | const.TunnelTypeDrop3 | const.TunnelTypeDrop4
const.TunnelMaskClimbDrop = const.TunnelMaskClimb| const.TunnelMaskDrop
const.TunnelMaskSmallAnimals = const.TunnelMaskWalk | const.TunnelTypeClimb1 | const.TunnelTypeClimb2 | const.TunnelTypeDrop1 | const.TunnelTypeDrop2
const.TunnelMaskLargeAnimals = const.TunnelMaskWalk
const.TunnelMaskPlayerStanding = -1
const.TunnelMaskPlayerProne = const.TunnelTypeWalk
const.TunnelMaskAIStanding = const.TunnelMaskPlayerStanding & ~const.TunnelTypeDoorBlocked
const.TunnelMaskAIProne = const.TunnelMaskPlayerProne & ~const.TunnelTypeDoorBlocked
const.TunnelMaskCivilian = const.TunnelMaskPlayerStanding & ~(const.TunnelTypeDoorBlocked | const.TunnelTypeWindow | const.TunnelMaskClimbDrop)
| const.TunnelTypeDrop1 | const.TunnelTypeClimb1
const.TunnelMaskMeleeRange = const.TunnelMaskWalk | const.TunnelTypeClimb1 | const.TunnelTypeDrop1 | const.TunnelTypeJumpOver1
const.TunnelMaskClosedDoor = const.TunnelTypeDoor | const.TunnelTypeDoorBlocked
const.TunnelMaskTraverseWait =
const.TunnelTypeLadder |
const.TunnelTypeDrop2 |
const.TunnelTypeDrop3 |
const.TunnelTypeDrop4 |
const.TunnelTypeClimb1 |
const.TunnelTypeClimb2 |
const.TunnelTypeClimb3 |
const.TunnelTypeClimb4 |
const.TunnelTypeJumpOver1 |
const.TunnelTypeJumpOver2 |
const.TunnelTypeJumpAcross1 |
const.TunnelTypeJumpAcross2 |
const.TunnelTypeDoorBlocked |
const.TunnelTypeWindow
const.TunnelMaskWalkStopAnim =
const.TunnelTypeLadder |
const.TunnelTypeDrop3 |
const.TunnelTypeDrop4 |
const.TunnelTypeClimb2 |
const.TunnelTypeClimb3 |
const.TunnelTypeClimb4 |
const.TunnelTypeDoor |
const.TunnelTypeDoorBlocked |
const.TunnelTypeWindow
local costWalk = 500
local difficult_terrain_modifier = 50
local costDifficultTerrain = costWalk * (100 + difficult_terrain_modifier) / 100
if Platform.desktop and Platform.developer then
function OnMsg.Autorun()
-- update the constant depend on the preset
assert(costWalk == Presets.ConstDef["Action Point Costs"].Walk.value * const.PassTileSize / const.SlabSizeX)
assert(difficult_terrain_modifier == Presets.ConstDef["Action Point Costs"].DifficultTerrainModifier.value)
end
end
pathfind_pass_types = {
"DefaultPass",
"DifficultTerrain",
"AmbientLifeAvoid",
"FireTerrain",
}
pathfind_pass_grid_types = {
"DefaultPass",
"AmbientLifeAvoid",
"FireTerrain",
}
pathfind_water_pass_type = "DifficultTerrain"
pathfind_water_pass_type_idx = (table.find(pathfind_pass_types, pathfind_water_pass_type) or 0) - 1 -- zero based
local default_pfcontext_meta = { __index = {
depth = 100000,
min_depth = 100000,
max_path_search_radius_coef = 100,
heuristic_mul = 2 * 4, -- 2 bit fixed point
heuristic_start_depth = 20000,
task_sleep = 0,
tunnel_mask = -1,
-- pass type costs
DefaultPass = costWalk,
DifficultTerrain = costDifficultTerrain,
AmbientLifeAvoid = costWalk,
FireTerrain = costWalk * 3,
}}
pathfind = {
{ -- player controlled unit standing or crouch stance
tunnel_mask = const.TunnelMaskPlayerStanding,
},
{ -- player controlled unit prone stance
tunnel_mask = const.TunnelMaskPlayerProne,
DifficultTerrain = const.pfImpassableCost,
},
{ -- AI controlled unit standing or crouch stance
tunnel_mask = const.TunnelMaskAIStanding,
},
{ -- AI controlled unit prone stance
tunnel_mask = const.TunnelMaskAIProne,
DifficultTerrain = const.pfImpassableCost,
},
{ -- ambient life
tunnel_mask = const.TunnelMaskCivilian,
AmbientLifeAvoid = 4 * costWalk,
FireTerrain = 4 * costWalk,
},
{ -- small animals
tunnel_mask = const.TunnelMaskSmallAnimals,
},
{ -- large animals
tunnel_mask = const.TunnelMaskLargeAnimals,
large_unit_pass_radius = 1,
large_unit_collision_cost = 4 * costWalk,
},
}
for i, t in ipairs(pathfind) do
setmetatable(t, default_pfcontext_meta)
end
function CalcPFClass(side, stance, body_type)
if body_type == "Large animal" then
return 6
elseif body_type == "Small animal" then
return 5
elseif not side or side == "neutral" then
return 4
elseif side ~= "player1" and side ~= "player2" then
return stance == "Prone" and 3 or 2
end
return stance == "Prone" and 1 or 0
end
pathfind_surf_types = {}
const.MaxPassableTerrainSlope = atan(const.SlabSizeZ, const.SlabSizeX)
const.PathMaxUnitRadius = 6*guim
const.PathMaxZTolerance = 2*guim
const.PathStrandedArea = 0
const.MaxPassableWaterDepth = 0 -- when the water is marker impassable
-- Obstacle collision spheroid sizes (in cm units)
const.passSpheroidWidth = 60*guic
const.passSpheroidHeight = 165*guic
const.passSpheroidCollisionOffsetZ = 10*guic
const.passVoxelTileSpheroidWidth = 80*guic
const.passVoxelTileSpheroidHeight = 175*guic
const.passVoxelTileSpheroidCollisionOffsetZ = 10*guic
--const.PathTurnAnimBlendTime = 500
--const.PathTurnRadius = 3*guim -- Defines the max arc radius for a 90 deg turn (in normal and large pass grids)
--const.PathTurnAnimRadius = 150*guic -- Defines the arc radius of the turning animation (the min "confortable" turn radius)
--const.PathTurnMinTime = 600