Esempio n. 1
0
        /**
         * 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.");
        }
Esempio n. 2
0
    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>());
            }
        }
    }
Esempio n. 3
0
 public static void OpenWindow()
 {
     EditorWindow.GetWindow(typeof(SpawnPointHelper));
     distance = EditorPrefs.GetFloat("SpawnDist", 1f);
     tagName  = (SpawnTag)EditorPrefs.GetInt("SpawnTag", 0);
 }