コード例 #1
0
        public static PropInfo GetSpecialPointProp(SpecialPointType pointType)
        {
            switch (pointType)
            {
            case SpecialPointType.Unknown:
                return(null);

            default:
                return(null);

            case SpecialPointType.SpawnPointTarget:
                return(PrefabCollection <PropInfo> .FindLoaded(SpecialPoints.SpawnPointTarget));

            case SpecialPointType.SpawnPointPosition:
                return(PrefabCollection <PropInfo> .FindLoaded(SpecialPoints.SpawnPointPosition));

            case SpecialPointType.DespawnPointTarget:
                return(PrefabCollection <PropInfo> .FindLoaded(SpecialPoints.DespawnPointTarget));

            case SpecialPointType.DespawnPointPosition:
                return(PrefabCollection <PropInfo> .FindLoaded(SpecialPoints.DespawnPointPosition));

            case SpecialPointType.SpawnPoint2Target:
                return(PrefabCollection <PropInfo> .FindLoaded(SpecialPoints.SpawnPoint2Target));

            case SpecialPointType.SpawnPoint2Position:
                return(PrefabCollection <PropInfo> .FindLoaded(SpecialPoints.SpawnPoint2Position));

            case SpecialPointType.TruckDespawnPosition:
                return(PrefabCollection <PropInfo> .FindLoaded(SpecialPoints.TruckDespawnPosition));

            case SpecialPointType.TruckSpawnPosition:
                return(PrefabCollection <PropInfo> .FindLoaded(SpecialPoints.TruckSpawnPosition));
            }
        }
コード例 #2
0
        public static void CreateSpecialPoint(BuildingInfo buildingInfo, SpecialPointType pointType, Vector3 position)
        {
            var info = SpecialPoints.GetSpecialPointProp(pointType);

            if (info == null || info.m_prefabDataIndex == -1)
            {
                return;
            }
            if (SpecialPoints.GetMaxNumberOfPoints(buildingInfo, pointType) < 1)
            {
                return;
            }
            ushort prop;

            BuildingDecorationDetour.DisableLimits = true;
            try
            {
                if (PropManager.instance.CreateProp(out prop, ref Singleton <SimulationManager> .instance.m_randomizer,
                                                    info,
                                                    position, 0, true))
                {
                    PropManager.instance.m_props.m_buffer[(int)prop].FixedHeight = true;
                }
            }
            finally
            {
                BuildingDecorationDetour.DisableLimits = false;
            }
        }
コード例 #3
0
        public static int GetMaxNumberOfPoints(BuildingInfo buildingInfo, SpecialPointType pointType)
        {
            if (buildingInfo == null || pointType == SpecialPointType.Unknown)
            {
                return(0);
            }
            if (buildingInfo.m_buildingAI is DepotAI)
            {
                if (pointType != SpecialPointType.SpawnPointTarget &&
                    pointType != SpecialPointType.SpawnPointPosition &&
                    pointType != SpecialPointType.SpawnPoint2Position &&
                    pointType != SpecialPointType.SpawnPoint2Target)
                {
                    return(0);
                }

                return(9999);
            }
            else if (buildingInfo.m_buildingAI is CargoStationAI)
            {
                if (pointType != SpecialPointType.SpawnPointTarget &&
                    pointType != SpecialPointType.SpawnPointPosition &&
                    pointType != SpecialPointType.SpawnPoint2Position &&
                    pointType != SpecialPointType.SpawnPoint2Target &&
                    pointType != SpecialPointType.TruckSpawnPosition &&
                    pointType != SpecialPointType.TruckDespawnPosition)
                {
                    return(0);
                }

                return(1);
            }
            else if (buildingInfo.m_buildingAI is FishingHarborAI)
            {
                if (pointType != SpecialPointType.SpawnPointTarget &&
                    pointType != SpecialPointType.SpawnPointPosition &&
                    pointType != SpecialPointType.DespawnPointTarget &&
                    pointType != SpecialPointType.DespawnPointPosition)
                {
                    return(0);
                }

                return(1);
            }

            return(0);
        }
        private static void PlaceSpecialPoint(BuildingInfo info, Matrix4x4 matrix4x4, Vector3 pointLocation, SpecialPointType pointType)
        {
            var vector3 = matrix4x4.MultiplyPoint(pointLocation).MirrorZ();

            DisableLimits = true;
            try
            {
                Scripts.CreateSpecialPoint(info, pointType, vector3);
            }
            finally
            {
                DisableLimits = false;
            }
        }
        private static Vector3 FindClosestPositionPoint(Dictionary <ushort, SpecialPointType> specialPoints, SpecialPointType pointType, PropManager instance1,
                                                        Vector3 position, Vector3 globalPosition, Matrix4x4 matrix4x4_1)
        {
            Vector3 calculatedPositionGlobalPosition;
            var     minDistance   = float.MaxValue;
            ushort  positionIndex = 0;

            foreach (var pi in specialPoints.Where(p => p.Value == pointType).Select(p => p.Key))
            {
                var positionPosition = instance1.m_props.m_buffer[pi].Position;
                var distance         = Mathf.Abs(Vector3.Distance(position, positionPosition));
                if (distance > minDistance)
                {
                    continue;
                }
                minDistance   = distance;
                positionIndex = pi;
            }
            if (positionIndex == 0)
            {
                Debug.LogWarning("Couldn't find closest position position for target!");
                calculatedPositionGlobalPosition = globalPosition;
            }
            else
            {
                calculatedPositionGlobalPosition = matrix4x4_1.MultiplyPoint(instance1.m_props.m_buffer[positionIndex].Position);
            }
            return(calculatedPositionGlobalPosition);
        }
コード例 #6
0
 public static int CountSpecialPoints(SpecialPointType pointType)
 {
     return(PropManager.instance.m_props.m_buffer.
            Where(propInstance => propInstance.m_flags != 0).
            Count(propInstance => GetSpecialPointType(propInstance.Info) == pointType));
 }