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));
        }
Example #2
0
            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;
                        }
                    }
                }
            }
Example #3
0
            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);
            }
Example #5
0
            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);
            }