/** * Init the spawn group list to contain all the spawner groups which contain the tag * `(FACTION)` in their name. Parse out anything between the first `[]` looking for the * required tag `TYPE:` and optional tag `COST:` */ private void GetAllSpawnGroups() { var allSpawnGroups = MyDefinitionManager.Static.GetSpawnGroupDefinitions(); string tag = "(" + m_empireData.m_faction.Tag + ")"; foreach (var spawnGroup in allSpawnGroups) { if (!spawnGroup.Id.SubtypeName.Contains(tag)) { continue; } int dataStart = spawnGroup.Id.SubtypeName.IndexOf('['); int dataEnd = spawnGroup.Id.SubtypeName.IndexOf(']'); if (dataStart == -1 || dataEnd == -1) { Util.Warning("Skipping spawn group, due to bad data tag: " + spawnGroup.Id.SubtypeName); continue; } string[] dataTags = spawnGroup.Id.SubtypeName.Substring(dataStart + 1, Math.Max((dataEnd - 1) - (dataStart + 1), 0)).ToUpper().Split(','); int cost = 0; SpawnTag spawnTag = null; foreach (string data in dataTags) { try { if (data.StartsWith(DATA_TAG_TYPE)) { string tmp = data.Substring(DATA_TAG_TYPE.Length + 1); spawnTag = SPAWNER_TAGS.Find(t => tmp.StartsWith(t.m_tagString)); } else if (data.StartsWith(DATA_TAG_COST)) { string tmp = data.Substring(DATA_TAG_TYPE.Length + 1); cost = Int32.Parse(tmp); } else { Util.Warning("Skipping bad data tag: " + data); } } catch (Exception e) { Util.Warning("Skipping bad data tag: " + data + " because " + e.ToString()); } } if (spawnTag == null) { Util.Warning("Skipping spawn group, due to missing data tags: " + spawnGroup.Id.SubtypeName); continue; } m_spawnGroups.Add(new GroupInfo(cost, spawnTag.m_spawnClass, spawnTag.m_spawnType, spawnGroup)); } Util.Log("Found " + m_spawnGroups.Count() + " " + m_empireData.m_faction.Tag + " SpawnGroups."); }
void OnGUI() { GUILayout.Label("Spawn Point Helper Tool", EditorStyles.boldLabel); GUILayout.Space(10f); distance = EditorGUILayout.FloatField("Point Offset:", distance); spawnName = EditorGUILayout.TextField("Spawn Name:", spawnName); tagName = (SpawnTag)EditorGUILayout.EnumPopup("Spawn Tag:", tagName); EditorGUILayout.ObjectField("Parenting To:", Selection.activeTransform, typeof(Transform), true); GUILayout.Space(10f); GUI.backgroundColor = new Color(1f, 0.2f, 0.1f, 1f); if (GUILayout.Button("Set Spawn Position")) { Camera cam = SceneView.lastActiveSceneView.camera; if (SceneView.lastActiveSceneView == null) { return; } RaycastHit hit; if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, 100f)) { Transform toParent = Selection.activeTransform; GameObject go = GameObject.CreatePrimitive(PrimitiveType.Sphere); go.transform.localScale = Vector3.one * 0.5f; go.name = spawnName; go.tag = tagName.ToString(); go.transform.position = hit.point + (hit.normal * distance); go.transform.rotation = Quaternion.identity; go.transform.parent = toParent; DestroyImmediate(go.GetComponent <SphereCollider>()); } } }
public static void OpenWindow() { EditorWindow.GetWindow(typeof(SpawnPointHelper)); distance = EditorPrefs.GetFloat("SpawnDist", 1f); tagName = (SpawnTag)EditorPrefs.GetInt("SpawnTag", 0); }