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)); } }
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; } }
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); }
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)); }