Esempio n. 1
0
 void Awake()
 {
     me      = this;
     mainCam = Camera.main;
     player  = GameObject.FindGameObjectWithTag("Player");
     pwc     = player.GetComponent <PersonWeaponController> ();
     pm      = player.GetComponent <PersonMovementController> ();
     pcc     = player.GetComponent <PersonClothesController> ();
     if (LoadingDataStore.me == null)
     {
         GameObject g = new GameObject();
         g.name = "Load Data Store";
         g.AddComponent <LoadingDataStore> ();
     }
 }
Esempio n. 2
0
    void createObject(GameObject g2, Vector3 pos)
    {
        BuildingScript b = LevelController.me.getBuildingPosIsIn(pos);

        if (b == null)
        {
            //Debug.LogError("No building found for object position");
        }
        else
        {
            CommonObjectsStore c             = FindObjectOfType <CommonObjectsStore>();
            List <GameObject>  tilesForPoint = new List <GameObject>();
            b.getPoints();
            foreach (WorldTile wt in b.tilesInBuilding)
            {
                if (wt.walkable == false)
                {
                    continue;
                }

                float d = Vector2.Distance(wt.transform.position, pos);
                if (d > 12 || d < 5)
                {
                    continue;
                }

                tilesForPoint.Add(wt.gameObject);
            }

            if (tilesForPoint.Count == 0)
            {
                //Debug.LogError("No tiles were found in building");
                return;
            }
            else
            {
                GameObject pointToSpawn = null;
                float      d            = 999999.0f;
                bool       posValid     = true;
                foreach (GameObject g in tilesForPoint)
                {
                    List <Vector3> dir = new List <Vector3>();
                    dir.Add(new Vector3(-1, 0, 0));
                    dir.Add(new Vector3(1, 0, 0));
                    dir.Add(new Vector3(0, -1, 0));
                    dir.Add(new Vector3(0, 1, 0));

                    foreach (Vector3 direction in dir)
                    {
                        RaycastHit2D ray = Physics2D.Raycast(g.transform.position, direction, 0.5f, c.maskForMelee);
                        //Debug.DrawRay(g.transform.position, direction * 1.0f, Color.green, 20.0f);
                        if (ray.collider == null)
                        {
                        }
                        else
                        {
                            //if (ray.collider.tag == "Walls" || ray.collider.tag == "CivilianObject" || ray.collider.tag == "Door") {
                            //	posValid = false;
                            //}
                        }
                    }
                    if (posValid == true)
                    {
                        float d2 = Vector2.Distance(g.transform.position, pos);
                        if (d2 < d)
                        {
                            pointToSpawn = g;
                            d            = d2;
                        }
                    }
                }
                if (pointToSpawn == null)
                {
                }
                else
                {
                    Instantiate(g2, new Vector3(pointToSpawn.transform.position.x, pointToSpawn.transform.position.y, 0), Quaternion.Euler(0, 0, 0));
                }
            }
        }
    }
Esempio n. 3
0
    void OnSceneGUI()
    {
        pos   = Event.current.mousePosition;
        pos.y = SceneView.currentDrawingSceneView.camera.pixelHeight - pos.y;
        pos   = SceneView.currentDrawingSceneView.camera.ScreenToWorldPoint(pos);
        pos.z = 0;
        Selection.selectionChanged += OnDeselect;

        if (im == null)
        {
            im = FindObjectOfType <IDManager>();
        }

        if (c == null)
        {
            c = FindObjectOfType <CommonObjectsStore>();
        }
        if (id == null)
        {
            id = FindObjectOfType <ItemDatabase>();
        }

        Handles.BeginGUI();

        /*  string[] options = System.Enum.GetNames(typeof( uniqueNPCSetting));
         * GUILayout.BeginHorizontal();
         *
         * foreach(string st in options)
         * {
         *    if (button(st))
         *    {
         *        mySetting = getSettingFromString(st) ;
         *    }
         * }
         * GUILayout.EndHorizontal();*/

        if (mySetting == uniqueNPCSetting.menu)
        {
            //draw buttons on each of the NPCID's found in the level,
            if (npcsInWorld == null || npcsInWorld.Length == 0)
            {
                refreshNPCS();
            }

            foreach (NPCID npc in npcsInWorld)
            {
                inworldLabel(npc.transform.position, npc.firstName + " " + npc.lastName);
                if (inworldButton(npc.gameObject.transform.position, Color.cyan))
                {
                    npcEditing        = npc.gameObject;
                    controllerEditing = npcEditing.GetComponent <NPCController>();
                    clothesEditing    = npcEditing.GetComponent <PersonClothesController>();
                    deciderEditing    = npcEditing.GetComponent <NPCBehaviourDecider>();
                    inventoryEditing  = npcEditing.GetComponent <Inventory>();
                    idEditing         = npc;
                    npcItems          = npcEditing.GetComponent <NPCItemInitialiser>();
                    mySetting         = uniqueNPCSetting.editing;
                }
            }

            if (button("New Unique NPC"))
            {
                GameObject g         = (GameObject)Instantiate(c.civilian, new Vector3(SceneView.currentDrawingSceneView.camera.transform.position.x, SceneView.currentDrawingSceneView.camera.transform.position.y, 0), Quaternion.Euler(0, 0, 0));
                NPCID      createdID = g.AddComponent <NPCID>();
                createdID.myId = im.getNPCID();
                g.GetComponent <NPCBehaviourDecider>().myType = AIType.neutral;
                g.GetComponent <NPCController>().myType       = AIType.neutral;
                refreshNPCS();
                EditorUtility.SetDirty(id);
                EditorUtility.SetDirty(createdID);
            }
        }
        else if (mySetting == uniqueNPCSetting.editing)
        {
            if (button("Menu"))
            {
                EditorUtility.SetDirty(npcEditing);
                EditorUtility.SetDirty(controllerEditing);
                EditorUtility.SetDirty(clothesEditing);
                EditorUtility.SetDirty(deciderEditing);
                EditorUtility.SetDirty(idEditing);
                EditorUtility.SetDirty(inventoryEditing);
                EditorUtility.SetDirty(npcItems);
                npcEditing        = null;
                controllerEditing = null;
                clothesEditing    = null;
                deciderEditing    = null;

                mySetting = uniqueNPCSetting.menu;
            }
            string[] editOptions = System.Enum.GetNames(typeof(editingTask));
            string   info        = "Editing NPC with the ID " + idEditing.myId;
            label(info, info.Length * 8, 30);
            taskScroll = GUILayout.BeginScrollView(taskScroll, GUILayout.Width(500), GUILayout.Height(50));
            GUILayout.BeginHorizontal();
            foreach (string st in editOptions)
            {
                if (button(st))
                {
                    currentTask = getTaskFromString(st);
                }
            }
            GUILayout.EndScrollView();
            GUILayout.EndHorizontal();
            GUILayout.Label(currentTask.ToString());
            if (currentTask == editingTask.name)
            {
                viewScroll = GUILayout.BeginScrollView(viewScroll, GUILayout.Width(400), GUILayout.Height(400));

                GUILayout.BeginHorizontal();
                string st = "Name: " + idEditing.firstName + " " + idEditing.lastName;
                label(st, st.Length * 8, 30);
                idEditing.firstName = textInput(idEditing.firstName);
                idEditing.lastName  = textInput(idEditing.lastName);
                EditorUtility.SetDirty(idEditing);
                EditorUtility.SetDirty(npcEditing);
                GUILayout.EndHorizontal();

                if (button("NPC Always Active" + idEditing.alwaysActive.ToString()))
                {
                    idEditing.alwaysActive = !idEditing.alwaysActive;
                }

                GUILayout.EndScrollView();
            }
            else if (currentTask == editingTask.position)
            {
                if (editRotation == false)
                {
                    if (button("Change Rotation"))
                    {
                        editRotation = true;
                    }
                    drawPositionHandle(ref npcEditing);
                    EditorUtility.SetDirty(npcEditing);
                }
                else
                {
                    if (button("Change Position"))
                    {
                        editRotation = false;
                    }
                    drawRotationHandle(ref npcEditing);
                    EditorUtility.SetDirty(npcEditing);
                }
            }
            else if (currentTask == editingTask.items)
            {
                viewScroll = GUILayout.BeginScrollView(viewScroll, GUILayout.Width(400), GUILayout.Height(400));

                label("Items To add:");
                string item = getItems();
                if (item != "None")
                {
                    if (npcItems.itemsToAdd == null)
                    {
                        npcItems.itemsToAdd = new List <string>();
                    }
                    npcItems.itemsToAdd.Add(item);
                    EditorUtility.SetDirty(npcItems);
                }

                label("Add random item:");
                string randItem = getItems();
                if (randItem != "None")
                {
                    if (npcItems.randomItems == null)
                    {
                        npcItems.randomItems = new List <string>();
                    }
                    npcItems.randomItems.Add(randItem);
                    EditorUtility.SetDirty(npcItems);
                }
                label("Items Being Given");
                foreach (string st in npcItems.itemsToAdd)
                {
                    GUILayout.BeginHorizontal();
                    label(st, st.Length * 8, 30);
                    if (button("X"))
                    {
                        npcItems.itemsToAdd.Remove(st);
                        EditorUtility.SetDirty(npcItems);

                        return;
                    }
                    GUILayout.EndHorizontal();
                }
                label("Items that may be given");
                foreach (string st in npcItems.randomItems)
                {
                    GUILayout.BeginHorizontal();
                    label(st, st.Length * 8, 30);
                    if (button("X"))
                    {
                        npcItems.randomItems.Remove(st);
                        EditorUtility.SetDirty(npcItems);

                        return;
                    }
                    GUILayout.EndHorizontal();
                }
                GUILayout.EndScrollView();
            }
            else if (currentTask == editingTask.aesthetics)
            {
                viewScroll = GUILayout.BeginScrollView(viewScroll, GUILayout.Width(400), GUILayout.Height(400));

                if (clothesEditing.clothesToWearAtStart == null)
                {
                    clothesEditing.clothesToWearAtStart = new List <string>();
                }

                if (button("Random Clothes " + clothesEditing.getRandomClothes.ToString()))
                {
                    clothesEditing.getRandomClothes = !clothesEditing.getRandomClothes;
                }
                label("Clothes you could add:");
                if (clothesEditing.getRandomClothes == false)
                {
                    string st = getClothes();
                    if (st != "None")
                    {
                        if (clothesEditing.clothesToWearAtStart.Contains(st) == false)
                        {
                            clothesEditing.clothesToWearAtStart.Add(st);
                        }
                    }
                }

                foreach (string st in clothesEditing.clothesToWearAtStart)
                {
                    GUILayout.BeginHorizontal();
                    label(st, st.Length * 8, 30);
                    if (button("X"))
                    {
                        clothesEditing.clothesToWearAtStart.Remove(st);
                        return;
                    }
                    GUILayout.EndHorizontal();
                }

                GUILayout.EndScrollView();
            }
            else if (currentTask == editingTask.whenToActivate)
            {
                viewScroll = GUILayout.BeginScrollView(viewScroll, GUILayout.Width(400), GUILayout.Height(400));
                label("Activate NPC:");

                /* label("On Mission Start");
                 * string missionStart = getMission();
                 * if(missionStart!="None")
                 * {
                 *   if (idEditing.started_missionsToActivateOn == null)
                 *   {
                 *       idEditing.started_missionsToActivateOn = new List<string>();
                 *   }
                 *   if (idEditing.started_missionsToActivateOn.Contains(missionStart) == false)
                 *   {
                 *       idEditing.started_missionsToActivateOn.Add(missionStart);
                 *       EditorUtility.SetDirty(idEditing);
                 *       return;
                 *   }
                 * }
                 *
                 * label("On Mission Finish");
                 * string missionEnd = getMission();
                 * if(missionEnd!="None")
                 * {
                 *   if (idEditing.finished_missionsToActivateOn == null)
                 *   {
                 *       idEditing.finished_missionsToActivateOn = new List<string>();
                 *   }
                 *   if (idEditing.finished_missionsToActivateOn.Contains(missionStart) == false)
                 *   {
                 *       idEditing.finished_missionsToActivateOn.Add(missionStart);
                 *       EditorUtility.SetDirty(idEditing);
                 *       return;
                 *   }
                 * }
                 */
                label("Unique NPC's Dead");
                int val = getUniquieNPCID();
                if (val != -1)
                {
                    if (idEditing.idsToActivateOnIfDead == null)
                    {
                        idEditing.idsToActivateOnIfDead = new List <int>();
                    }

                    if (idEditing.idsToActivateOnIfDead.Contains(val) == false)
                    {
                        idEditing.idsToActivateOnIfDead.Add(val);
                    }
                }

                label("------------------------");

                GUILayout.EndScrollView();
            }
            else if (currentTask == editingTask.whenToDeactivate)
            {
                viewScroll = GUILayout.BeginScrollView(viewScroll, GUILayout.Width(400), GUILayout.Height(400));

                label("Deactivate NPC:");

                /* label("On Mission Start");
                 * string missionStart = getMission();
                 * if (missionStart != "None")
                 * {
                 *   if (idEditing.started_missionsToDeactivateOn == null)
                 *   {
                 *       idEditing.started_missionsToDeactivateOn = new List<string>();
                 *   }
                 *   if (idEditing.started_missionsToDeactivateOn.Contains(missionStart) == false)
                 *   {
                 *       idEditing.started_missionsToDeactivateOn.Add(missionStart);
                 *       EditorUtility.SetDirty(idEditing);
                 *       return;
                 *   }
                 * }
                 *
                 * label("On Mission Finish");
                 * string missionEnd = getMission();
                 * if (missionEnd != "None")
                 * {
                 *   if (idEditing.finished_missionsToDeactivateOn == null)
                 *   {
                 *       idEditing.finished_missionsToDeactivateOn = new List<string>();
                 *   }
                 *   if (idEditing.finished_missionsToDeactivateOn.Contains(missionStart) == false)
                 *   {
                 *       idEditing.finished_missionsToDeactivateOn.Add(missionStart);
                 *       EditorUtility.SetDirty(idEditing);
                 *       return;
                 *   }
                 * }*/

                label("Unique NPC's Dead");
                int val = getUniquieNPCID();
                if (val != -1)
                {
                    if (idEditing.idsToDeactivateOnIfDead == null)
                    {
                        idEditing.idsToDeactivateOnIfDead = new List <int>();
                    }

                    if (idEditing.idsToDeactivateOnIfDead.Contains(val) == false)
                    {
                        idEditing.idsToDeactivateOnIfDead.Add(val);
                        EditorUtility.SetDirty(idEditing);
                    }
                }

                GUILayout.EndScrollView();
            }
            else if (currentTask == editingTask.peacefulConditions)
            {
                viewScroll = GUILayout.BeginScrollView(viewScroll, GUILayout.Width(400), GUILayout.Height(400));

                label("Make NPC Peaceful:");

                /*label("On Mission Start");
                 * string missionStart = getMission();
                 * if (missionStart != "None")
                 * {
                 *  if (idEditing.started_missionsToMakeNotHostile == null)
                 *  {
                 *      idEditing.started_missionsToMakeNotHostile = new List<string>();
                 *  }
                 *  if (idEditing.started_missionsToMakeNotHostile.Contains(missionStart) == false)
                 *  {
                 *      idEditing.started_missionsToMakeNotHostile.Add(missionStart);
                 *      EditorUtility.SetDirty(idEditing);
                 *      return;
                 *  }
                 * }
                 *
                 * label("On Mission Finish");
                 * string missionEnd = getMission();
                 * if (missionEnd != "None")
                 * {
                 *  if (idEditing.finished_missionsToMakeNotHostile == null)
                 *  {
                 *      idEditing.finished_missionsToMakeNotHostile = new List<string>();
                 *  }
                 *  if (idEditing.finished_missionsToMakeNotHostile.Contains(missionStart) == false)
                 *  {
                 *      idEditing.finished_missionsToMakeNotHostile.Add(missionStart);
                 *      EditorUtility.SetDirty(idEditing);
                 *      return;
                 *  }
                 * }
                 */
                label("Unique NPC's Dead");
                int val = getUniquieNPCID();
                if (val != -1)
                {
                    if (idEditing.idsThatMakeNotHostileOnDeath == null)
                    {
                        idEditing.idsThatMakeNotHostileOnDeath = new List <int>();
                    }

                    if (idEditing.idsThatMakeNotHostileOnDeath.Contains(val) == false)
                    {
                        idEditing.idsThatMakeNotHostileOnDeath.Add(val);
                        EditorUtility.SetDirty(idEditing);
                    }
                }

                GUILayout.EndScrollView();
            }
            else if (currentTask == editingTask.hostileConditions)
            {
                viewScroll = GUILayout.BeginScrollView(viewScroll, GUILayout.Width(400), GUILayout.Height(400));

                label("Make NPC Hostile:");

                /* label("On Mission Start");
                 * string missionStart = getMission();
                 * if (missionStart != "None")
                 * {
                 *   if (idEditing.started_missionsToMakeHostile == null)
                 *   {
                 *       idEditing.started_missionsToMakeHostile = new List<string>();
                 *   }
                 *   if (idEditing.started_missionsToMakeHostile.Contains(missionStart) == false)
                 *   {
                 *       idEditing.started_missionsToMakeHostile.Add(missionStart);
                 *       EditorUtility.SetDirty(idEditing);
                 *       return;
                 *   }
                 * }
                 *
                 * label("On Mission Finish");
                 * string missionEnd = getMission();
                 * if (missionEnd != "None")
                 * {
                 *   if (idEditing.finished_missionsToMakeHostile == null)
                 *   {
                 *       idEditing.finished_missionsToMakeHostile = new List<string>();
                 *   }
                 *   if (idEditing.finished_missionsToMakeHostile.Contains(missionStart) == false)
                 *   {
                 *       idEditing.finished_missionsToMakeHostile.Add(missionStart);
                 *       EditorUtility.SetDirty(idEditing);
                 *       return;
                 *   }
                 * }*/

                label("Unique NPC's Dead");
                int val = getUniquieNPCID();
                if (val != -1)
                {
                    if (idEditing.idsThatMakeHostileOnDeath == null)
                    {
                        idEditing.idsThatMakeHostileOnDeath = new List <int>();
                    }

                    if (idEditing.idsThatMakeHostileOnDeath.Contains(val) == false)
                    {
                        idEditing.idsThatMakeHostileOnDeath.Add(val);
                        EditorUtility.SetDirty(idEditing);
                    }
                }

                GUILayout.EndScrollView();
            }
            else if (currentTask == editingTask.whenToEnable)
            {
            }
            else if (currentTask == editingTask.whenToDisable)
            {
            }
            else if (currentTask == editingTask.editLists)
            {
                viewScroll = GUILayout.BeginScrollView(viewScroll, GUILayout.Width(400), GUILayout.Height(400));

                label("Hostile Conditions:");
                //hostile
                if (idEditing.idsThatMakeHostileOnDeath != null)
                {
                    foreach (int i in idEditing.idsThatMakeHostileOnDeath)
                    {
                        if (button("Remove " + i.ToString()))
                        {
                            idEditing.idsThatMakeHostileOnDeath.Remove(i);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                if (idEditing.started_missionsToMakeHostile != null)
                {
                    foreach (string st in idEditing.started_missionsToMakeHostile)
                    {
                        if (button("Remove " + st))
                        {
                            idEditing.started_missionsToMakeHostile.Remove(st);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                if (idEditing.finished_missionsToMakeHostile != null)
                {
                    foreach (string st in idEditing.finished_missionsToMakeHostile)
                    {
                        if (button("Remove " + st))
                        {
                            idEditing.finished_missionsToMakeHostile.Remove(st);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                label("Peaceful Conditions:");
                //not hostile
                if (idEditing.idsThatMakeNotHostileOnDeath != null)
                {
                    foreach (int i in idEditing.idsThatMakeNotHostileOnDeath)
                    {
                        if (button("Remove " + i.ToString()))
                        {
                            idEditing.idsThatMakeNotHostileOnDeath.Remove(i);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                if (idEditing.started_missionsToMakeNotHostile != null)
                {
                    foreach (string st in idEditing.started_missionsToMakeNotHostile)
                    {
                        if (button("Remove " + st))
                        {
                            idEditing.started_missionsToMakeNotHostile.Remove(st);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                if (idEditing.finished_missionsToMakeNotHostile != null)
                {
                    foreach (string st in idEditing.finished_missionsToMakeNotHostile)
                    {
                        if (button("Remove " + st))
                        {
                            idEditing.finished_missionsToMakeNotHostile.Remove(st);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                label("Activate Conditions:");
                //activate NPC
                if (idEditing.idsToActivateOnIfDead != null)
                {
                    foreach (int i in idEditing.idsToActivateOnIfDead)
                    {
                        if (button("Remove " + i.ToString()))
                        {
                            idEditing.idsToActivateOnIfDead.Remove(i);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                if (idEditing.started_missionsToActivateOn != null)
                {
                    foreach (string st in idEditing.started_missionsToActivateOn)
                    {
                        if (button("Remove " + st))
                        {
                            idEditing.started_missionsToActivateOn.Remove(st);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }


                if (idEditing.finished_missionsToActivateOn != null)
                {
                    foreach (string st in idEditing.finished_missionsToActivateOn)
                    {
                        if (button("Remove " + st))
                        {
                            idEditing.finished_missionsToActivateOn.Remove(st);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                label("Deactivate Conditions:");
                //deactivate NPC
                if (idEditing.idsToDeactivateOnIfDead != null)
                {
                    foreach (int i in idEditing.idsToDeactivateOnIfDead)
                    {
                        if (button("Remove " + i.ToString()))
                        {
                            idEditing.idsToDeactivateOnIfDead.Remove(i);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }

                if (idEditing.started_missionsToDeactivateOn != null)
                {
                    foreach (string st in idEditing.finished_missionsToDeactivateOn)
                    {
                        if (button("Remove " + st))
                        {
                            idEditing.finished_missionsToDeactivateOn.Remove(st);
                            EditorUtility.SetDirty(idEditing);

                            return;
                        }
                    }
                }


                if (idEditing.finished_missionsToDeactivateOn != null)
                {
                    foreach (string st in idEditing.finished_missionsToDeactivateOn)
                    {
                        if (button("Remove " + st))
                        {
                            idEditing.finished_missionsToDeactivateOn.Remove(st);
                            EditorUtility.SetDirty(idEditing);
                            return;
                        }
                    }
                }

                GUILayout.EndScrollView();
            }
            displayGlobalNPCData();

            //name
            //aesthetics (clothes, skin color)
            //Items
            //when to enable (What conditions have to be met for the NPC to start appearing in the world). (Mission done etc..)
            //when to disable (what conditions cause the NPC to stop beign displayed in the world) (not available at that time, mission done etc...)
            //hostile conditions (What conditions would cause the NPC to become hostile) (been attacked by player, at war with faction, wanted...)
            //peaceful conditions (what conditions would cause the NPC to become peaceful after turning hostile) (Mission complete, time passed)
            //stopping conditions (What conditions cause the NPC to stop existing in the world)(dead,mission done etc...)
        }

        Handles.EndGUI();
    }