private static float AdjustedRangeFromTerrain(float range, IntVec3 pos, Map map) { float original = range; var terrain = map.terrainGrid.TerrainAt(pos); var terrainDefExtension = TerrainDefExtension.Get(terrain); if (terrainDefExtension.rangeFactor != 1) { range *= terrainDefExtension.rangeFactor; } return(original - Mathf.RoundToInt(original - range)); }
public static void Postfix(LocalTargetInfo target, Map map, ref float __result) { var things = target.Cell.GetThingList(map); for (int i = 0; i < things.Count; i++) { var thing = things[i]; var terrainSetter = thing.def.GetCompProperties <CompProperties_TerrainSetter>(); if (terrainSetter != null) { var terrain = terrainSetter.terrainDef; var terrainDefExtension = TerrainDefExtension.Get(terrain); if (terrainDefExtension.coverEffectiveness > 0) { __result += (1 - __result) * terrainDefExtension.coverEffectiveness; } } } }
public static void Postfix(LocalTargetInfo target, Map map, ref List <CoverInfo> __result) { var things = target.Cell.GetThingList(map); for (int i = 0; i < things.Count; i++) { var thing = things[i]; var terrainSetter = thing.def.GetCompProperties <CompProperties_TerrainSetter>(); if (terrainSetter != null) { var terrain = terrainSetter.terrainDef; var terrainDefExtension = TerrainDefExtension.Get(terrain); __result.Add(new CoverInfo(thing, terrainDefExtension.coverEffectiveness)); /*if (terrainDefExtension.coverEffectiveness > 0) * { * __result.Add(new CoverInfo(thing, terrainDefExtension.coverEffectiveness)); * }*/ } } }
private static int AdjustedTerrainCost(int cost, int nextIndex, int curIndex, TerrainDef[] terrainGrid, TraverseParms parms) { if (parms.pawn != null) { var curTerrain = terrainGrid[curIndex]; var nextTerrain = terrainGrid[nextIndex]; if (curTerrain != nextTerrain) { var nextTerrainDefExtension = TerrainDefExtension.Get(nextTerrain); if (nextTerrainDefExtension.pathCostEntering > -1) { cost += (nextTerrainDefExtension.pathCostEntering - nextTerrain.pathCost); } var curTerrainDefExtension = TerrainDefExtension.Get(curTerrain); if (curTerrainDefExtension.pathCostLeaving > -1) { cost += (curTerrainDefExtension.pathCostLeaving - curTerrain.pathCost); } } } return(cost); }
private static int FinalTerrainPathCost(int original, TerrainDef terrain, IntVec3 prevCell, Map map) { if (prevCell.IsValid) { var prevTerrain = map.terrainGrid.TerrainAt(prevCell); if (terrain != prevTerrain) { // Entering terrain var terrainDefExtension = TerrainDefExtension.Get(terrain); if (terrainDefExtension.pathCostEntering > -1) { return(terrainDefExtension.pathCostEntering); } // Exiting terrain var prevTerrainDefExtension = TerrainDefExtension.Get(prevTerrain); if (prevTerrainDefExtension.pathCostLeaving > -1) { return(prevTerrainDefExtension.pathCostLeaving); } } } return(original); }