private PrefabSets GetAvailablePrefabSetsForLocation(ChassisLocations location) { var locationString = VHLUtils.GetStringFromLocation(location); var weaponsData = chassisDef.HardpointDataDef.HardpointData.FirstOrDefault(x => x.location == locationString); var sets = new PrefabSets(); if (weaponsData.weapons == null) { //Control.mod.Logger.LogDebug($"no hardpoint data found for {chassisDef.Description.Id} at {location}"); } else { foreach (var weapons in weaponsData.weapons) { var index = sets.Count; try { var set = new PrefabSet(index, weapons); sets.Add(set); } catch (Exception e) { Control.mod.Logger.LogDebug($"error processing hardpoint data for {chassisDef.Description.Id} at {location}: index={index} weapons=[{weapons?.JoinAsString()}]", e); throw; } } } return(sets); }
private List <PrefabSet> GetAvailablePrefabSetsForLocation(ChassisLocations location) { var weaponsData = GetWeaponData(location); var sets = new List <PrefabSet>(); if (weaponsData.weapons == null) { Control.Logger.Debug?.Log($"no hardpoint data found for {chassisDef.Description.Id} at {location}"); } else { foreach (var weapons in weaponsData.weapons) { var index = sets.Count; try { var set = new PrefabSet(index, weapons.Where(x => !preMappedPrefabNames.Contains(x))); sets.Add(set); } catch (Exception e) { Control.Logger.Warning?.Log($"error processing hardpoint data for {chassisDef.Description.Id} at {location}: index={index} weapons=[{weapons?.JoinAsString()}]", e); //throw; } } } return(sets); }
public static PrefabSet PopulateFromDisk() { string path = Application.persistentDataPath + serializationPath; PrefabSet prefabSet = null; try{ prefabSet = (PrefabSet)SerializationUtil.Deserialize(path); if (prefabSet != null) { prefabSet.OnDeserialization(); } }catch (System.Exception ex) { Debug.LogError("Issue deserializing:" + ex); } if (prefabSet == null) { prefabSet = new PrefabSet(); prefabSet.OnDeserialization(); return(prefabSet); } else { return(prefabSet); } }
private int GetRandomPrefabIndex() { PrefabSet set = ActiveSet; if (set?.Prefabs == null || set.Prefabs.Count == 0) { return(-1); } IList <PrefabEntry> activePrefabSet = set.Prefabs; float selectionValue = Random.value; for (int index = 0; index < activePrefabSet.Count; index++) { PrefabEntry entry = activePrefabSet[index]; if (entry.OccurrenceFactor > selectionValue) { return(index); } selectionValue -= entry.OccurrenceFactor; } return(activePrefabSet.Count - 1); }
internal PrefabSelectionCandidate CreateWithoutSet(PrefabSet exclude, PrefabMapping newMapping) { var sets = FreeSets.Except(exclude); var mappings = new List <PrefabMapping>(Mappings) { newMapping }; return(new PrefabSelectionCandidate(sets, mappings)); }
private GameObject GetActivePrefab(int index) { PrefabSet set = ActiveSet; if (index < 0 || set?.Prefabs == null || index >= set.Prefabs.Count) { return(null); } return(set.Prefabs[index].Prefab); }
void init() { // Why the flag? Frequently initialization stuff has to happen in OnGui. if (!_initialized) { _initialized = true; selectedObject = new GUIStyle(); selectedObject.normal.background = MakeTex(8, 8, new Color32(75, 96, 145, 255)); unselectedObject = new GUIStyle(); foldoutClosed = new GUIStyle(EditorStyles.foldout); foldoutClosed.margin = new RectOffset(); foldoutOpen = new GUIStyle(foldoutClosed); foldoutOpen.normal.background = foldoutOpen.onNormal.background; foldoutOpen.active.background = foldoutOpen.onActive.background; foldoutOpen.hover.background = foldoutOpen.onHover.background; views = new List <ObjectView>(); prefabSet = PopulateFromDisk(); } }
void SpawnPrefabs(PrefabSet set) { Dictionary<Type, string> prefabSet = null; var rootName = "Undefined"; switch (set) { case PrefabSet.Undefined: Debug.LogError("Tried to spawn an undefined prefab set"); break; case PrefabSet.Player: prefabSet = _playerPrefabs; rootName = "Player"; break; case PrefabSet.Manager: prefabSet = _managerPrefabs; rootName = "Managers"; break; default: throw new ArgumentOutOfRangeException("set"); } var root = FindRootByName(rootName); foreach (var prefabToSpawn in prefabSet) { if (!ObjectOfTypeExistsInScene(prefabToSpawn.Key)) { var createdGameObject = Instantiate(Resources.Load(prefabToSpawn.Value, typeof(GameObject)), Vector3.zero, new Quaternion()) as GameObject; Debug.Log("Creating: " + createdGameObject.name); //Anything created by the bootstrapper should persist between scenes if (createdGameObject != null) { createdGameObject.transform.parent = root.transform; DontDestroyOnLoad(createdGameObject); } } } }
GameObject OffsetPrefab(PrefabSet sectionItem, GameObject obs) { Vector3 ori = obs.transform.position; Vector3 pos = ori; if (sectionItem.Origin != OriginPara.Center) { float xo = 0; float yo = 0; switch (sectionItem.Origin) { case OriginPara.NorthEast: xo = levelUnits / 2; yo = levelUnits / 2; break; case OriginPara.NorthWest: xo = -levelUnits / 2; yo = levelUnits / 2; break; case OriginPara.SouthEast: xo = levelUnits / 2; yo = -levelUnits / 2; break; case OriginPara.SouthWest: xo = -levelUnits / 2; yo = -levelUnits / 2; break; case OriginPara.RandomCorner: xo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1); yo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1); break; case OriginPara.Random: if (Lehmer.Next() > 0.5) { xo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1); yo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1); } break; } float ao = (start == 1 || start == 3) ? yo : xo; float bo = (start == 1 || start == 3) ? xo : yo; switch (start) { case 1: ao *= -1; break; case 2: ao *= -1; bo *= -1; break; case 3: bo *= -1; break; } pos.x += ao; pos.z += bo; } Vector2 d = Vector2.zero; if (sectionItem.UseCustomPos) { d = (sectionItem.EndPos - sectionItem.StartPos); } else { d = (levelUnits * Vector2.one) - sectionItem.Size; } float x = (int)(Lehmer.Next() * d.x); float y = (int)(Lehmer.Next() * d.y); float a = (start == 1 || start == 3) ? y : x; float b = (start == 1 || start == 3) ? x : y; switch (start) { case 1: a *= -1; break; case 2: a *= -1; b *= -1; break; case 3: b *= -1; break; } a -= ((pos - ori).x == 0.0f) ? a : (((pos - ori).x > 0) ? (sectionItem.Size.x / 2) : -(sectionItem.Size.y / 2)); b -= ((pos - ori).z == 0.0f) ? b : (((pos - ori).z > 0) ? (sectionItem.Size.y / 2) : -(sectionItem.Size.y / 2)); pos.x += a; pos.z += b; if (sectionItem.Offset != OffsetPara.None) { float offset = 4.0f; int dir = 0; switch (sectionItem.Offset) { case OffsetPara.Closer: dir = 1; break; case OffsetPara.Further: dir = -1; break; case OffsetPara.Random: dir = (Lehmer.Next() > 0.5) ? -1 : 1; break; } switch (start) { case 0: pos.z -= offset * dir; break; case 1: pos.x += offset * dir; break; case 2: pos.z += offset * dir; break; case 3: pos.x -= offset * dir; break; } } pos.y = 0.0f; obs.transform.position = pos; if (start == 1 || start == 3) { obs.transform.rotation = Quaternion.AngleAxis(90.0f, Vector3.up); } return(obs); }