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