void Start() { //Setea los valores del enemigo health = maxHealth; foreach (GameObject player in GameObject.FindGameObjectsWithTag("Player")) { targets.Add(player.transform); } sprt = gameObject.GetComponent <SpriteRenderer>(); rb2d = gameObject.GetComponent <Rigidbody2D>(); //Guarda una referencia del script del padre(invocador), y después separa al esqueleto del nigromante owner = GetComponentInParent <NecromancerController>(); transform.parent = null; }
public NecromancerPatrolState(NecromancerController parent) { //Guarda una referencia al script del nigromante enemy = parent; enemy.ResetPatrol(); }
void Start() { anime = GetComponent <Animator>(); instance = GetComponentInParent <NecromancerController>(); }
public NecromancerRunState(NecromancerController parent) { //Guarda una referencia al script del nigromante enemy = parent; }
private IEnumerator PlayScript() { outfitter.rightTeleporter.GetComponent <VRTK_BasicTeleport> ().Teleported += OnFirstPlayerTeleport; outfitter.leftTeleporter.GetComponent <VRTK_BasicTeleport> ().Teleported += OnFirstPlayerTeleport; outfitter.rightControllerTooltips.UpdateText(VRTK_ControllerTooltips.TooltipButtons.TouchpadTooltip, "Teleport"); outfitter.leftControllerTooltips.UpdateText(VRTK_ControllerTooltips.TooltipButtons.TouchpadTooltip, "Teleport"); trainingRoomWaypoint.OnPlayerInWaypointRange += OnPlayerWaypointReached; yield return(StartCoroutine(WaitForCondition())); yield return(StartCoroutine(PlayConversation())); outfitter.rightControllerTooltips.UpdateText(VRTK_ControllerTooltips.TooltipButtons.TriggerTooltip, "Use Objects"); outfitter.leftControllerTooltips.UpdateText(VRTK_ControllerTooltips.TooltipButtons.TriggerTooltip, "Use Objects"); while (trainingRoomDoor.isOpen) { yield return(null); } outfitter.rightControllerTooltips.UpdateText(VRTK_ControllerTooltips.TooltipButtons.TriggerTooltip, ""); outfitter.leftControllerTooltips.UpdateText(VRTK_ControllerTooltips.TooltipButtons.TriggerTooltip, ""); trainingRoomDoor.playerUsable = false; yield return(new WaitForSeconds(1f)); yield return(StartCoroutine(PlayConversation())); int quest_id = 0; quest_id = questManager.StartQuest("Pick up the arcane crystal."); arcaneCrystal.SetPlayerUsable(quest_id); arcaneCrystal.OnItemPickedUp += OnArcaneCrystalPickedUp; yield return(StartCoroutine(WaitForCondition())); yield return(new WaitForSeconds(1f)); yield return(StartCoroutine(PlayConversation())); smallArcaneDummy = Instantiate <GameObject> (targetDummyPrefab, targetDummySpawnPoint.position, targetDummySpawnPoint.rotation); smallArcaneDummy.GetComponent <MonsterController> ().OnMonsterDied += OnSmallArcaneDummyDied; yield return(StartCoroutine(WaitForCondition())); yield return(StartCoroutine(PlayConversation())); musicManager.TransitionToDanger(); yield return(new WaitForSeconds(3.5f)); // hardcoded :( monsterManager.SpawnMonsterMelee(MonsterManager.MonsterEngageType.Immediate, false, introSpawnPoints [0]); trainingRoomDoor.ForceUse(); musicManager.TransitionToCombat(); yield return(new WaitForSeconds(1.5f)); yield return(StartCoroutine(PlayConversation())); orb.Move(alfredWaypoints [0].position, alfredWaypoints [0].rotation); while (monsterManager.ExistLivingMonsters()) { yield return(null); } monsterManager.SpawnMonsterMelee(MonsterManager.MonsterEngageType.Immediate, true, introSpawnPoints [1]); yield return(new WaitForSeconds(2f)); monsterManager.SpawnMonsterMelee(MonsterManager.MonsterEngageType.Immediate, true, introSpawnPoints [2]); yield return(new WaitForSeconds(2f)); monsterManager.SpawnMonsterMelee(MonsterManager.MonsterEngageType.Immediate, true, introSpawnPoints [0]); yield return(new WaitForSeconds(4f)); monsterManager.SpawnMonsterMelee(MonsterManager.MonsterEngageType.Immediate, true, introSpawnPoints [1]); while (monsterManager.ExistLivingMonsters()) { yield return(null); } musicManager.TransitionToDanger(); yield return(new WaitForSeconds(1f)); yield return(StartCoroutine(PlayConversation())); yield return(new WaitForSeconds(6f)); // last line from Alfred is 4.3 seconds, wait for it to finish. // Alfred moves to master's room orb.Move(alfredWaypoints [1].position, alfredWaypoints [1].rotation); // wait for player to move to 4th floor fourthFloorWaypoint.OnPlayerInWaypointRange += OnPlayerWaypointFourthFloor; // open door to master's room masterRoomDoor.ForceUse(); // wait till user enters master's room masterRoomWaypoint.OnPlayerInWaypointRange += OnPlayerWaypointReached; yield return(StartCoroutine(WaitForCondition())); musicManager.TransitionToCombat(); // summon skeletons and let them engage monsterManager.SpawnMonsterMelee(MonsterManager.MonsterEngageType.Immediate, true, introSpawnPoints [5]); yield return(new WaitForSeconds(2f)); // let Alfred call out for help yield return(StartCoroutine(PlayConversation())); monsterManager.SpawnMonsterRanged(MonsterManager.MonsterEngageType.Immediate, true, introSpawnPoints [6]); yield return(new WaitForSeconds(2f)); monsterManager.SpawnMonsterMelee(MonsterManager.MonsterEngageType.Immediate, true, introSpawnPoints [7]); // wait for all skellies to die while (monsterManager.ExistLivingMonsters()) { yield return(null); } musicManager.TransitionToDanger(); // spawn more skeletons in the mansion foreach (Transform t in rangedLingerSpawnPoints) { monsterManager.SpawnMonsterRanged(MonsterManager.MonsterEngageType.OnSight, false, t); } foreach (Transform t in meleeLingerSpawnPoints) { monsterManager.SpawnMonsterMelee(MonsterManager.MonsterEngageType.OnSight, false, t); } // enable all events that can happen now kitchenHallWaypoint.OnPlayerInWaypointRange += OnPlayerEnteredKitchenHallway; kitchenDoor.playerUsable = true; kitchenDoor.OnDoorOpened += OnPlayerOpenedKitchenDoor; guardRoomDoor.OnDoorLocked += OnPlayerTriedOpenGuardRoomDoor; backpack.OnItemPickedUp += OnPlayerPickedUpBackpack; // let alfred send the player on his mission through the mansion yield return(new WaitForSeconds(1f)); yield return(StartCoroutine(PlayConversation())); // enable quest items, subscribe to their pickup, wait for them to be picked up quest_id = questManager.StartQuest("Find the dark crystal in one of the chests."); darkCrystal.SetPlayerUsable(quest_id); darkCrystal.OnItemPickedUp += OnQuestItemPickedUp; quest_id = questManager.StartQuest("Collect some food for the road from the kitchen downstairs."); food.SetPlayerUsable(quest_id); food.OnItemPickedUp += OnQuestItemPickedUp; quest_id = questManager.StartQuest("Find a map of the surrounding lands. Perhaps in the library?"); map.SetPlayerUsable(quest_id); map.OnItemPickedUp += OnQuestItemPickedUp; quest_id = questManager.StartQuest("Pick up your backpack. You probably left it in your room."); backpack.SetPlayerUsable(quest_id); backpack.OnItemPickedUp += OnQuestItemPickedUp; quest_id = questManager.StartQuest("Take the keys to the mansion. The house guards usually keep some spares downstairs."); keys.SetPlayerUsable(quest_id); keys.OnItemPickedUp += OnQuestItemPickedUp; yield return(WaitForCondition()); int meet_alfred_quest_id = questManager.StartQuest("Meet Alfred at the exit."); // wait for player to enter the main hall mainHallWaypoint.OnPlayerInWaypointRange += OnPlayerEnteredMainHall; yield return(WaitForCondition()); // disable player teleportation outfitter.SetOutfitterMode(Outfitter.OutfitterMode.INACTIVE); // close all doors, let necromancer emerge from small meeting room foreach (CloseableDoor door in mainHallDoors) { if (door.isOpen) { door.ForceUse(); } door.playerUsable = false; } // also let Alfred move in position for when player dies if (!masterRoomDoor.isOpen) { masterRoomDoor.ForceUse(); } orb.Move(alfredWaypoints [2].position, Quaternion.identity); // spawn necromancer and let him insult player GameObject o = Instantiate <GameObject> (necromancerPrefab, necromancerSpawnPoint.position, Quaternion.identity); necromancer = o.GetComponent <NecromancerController> (); necromancer.skeletonSummonLocations = necromancerEventSpawnPoints; yield return(new WaitForSeconds(necromancer.fadeInTime)); yield return(new WaitForSeconds(necromancer.Speak(0))); necromancer.OnDestinationReached += OnNecromancerInPosition; necromancer.MoveToDestination(necromancerWaypoint.position); yield return(WaitForCondition()); musicManager.TransitionToBossfight(); yield return(new WaitForSeconds(necromancer.Speak(1) + 1f)); // enable player teleportation and let necromancer engage outfitter.SetOutfitterMode(Outfitter.OutfitterMode.EXPLORE); necromancer.EngagePlayer(); // wait till player dies playerHealth.OnPlayerDied += OnPlayerDeath; yield return(WaitForCondition()); // wait another 2 seconds to make sure player can't see or hear anything yield return(new WaitForSeconds(2f)); // destroy necromancer and remaining skeletons MonsterController[] monsters = FindObjectsOfType <MonsterController> (); foreach (MonsterController m in monsters) { Destroy(m.gameObject); } musicManager.TransitionToNeutral(); // move Alfred next to player questManager.CompleteQuest(meet_alfred_quest_id); StaircaseDoor.ForceUse(); orb.OnDestinationReached += OnAlfredReachedDestination; CapsuleCollider player = GameObject.FindGameObjectWithTag("Player").GetComponent <CapsuleCollider> (); Vector3 pos = player.transform.position; pos.x += player.center.x; pos.z += player.center.z; orb.Move(pos, Quaternion.identity, 2f); yield return(WaitForCondition()); // instantiate healing effect and heal player back up GameObject healingCircle = Instantiate(healingCirclePrefab, Vector3.zero, healingCirclePrefab.transform.rotation); while (playerHealth.hitpoints < playerHealth.maxHitpoints) { playerHealth.Heal(10); yield return(new WaitForSeconds(1f)); if (playerHealth.hitpoints > 35 && playerHealth.hitpoints <= 45) { yield return(PlayConversation()); } } Destroy(healingCircle); yield return(new WaitForSeconds(1f)); // let Alfred explain situation and send player on next quest orb.Move(alfredWaypoints [3].position, alfredWaypoints [3].rotation, 0f); yield return(WaitForCondition()); yield return(PlayConversation()); int last_quest = questManager.StartQuest("Leave the mansion through the front door."); // wait for player to use outside door and exit level foreach (CloseableDoor door in mainHallDoors) { door.playerUsable = true; } exitDoor.OnDoorLocked += OnPlayerUsedExitDoor; exitDoor.SetDoorOfInterest(true); yield return(WaitForCondition()); // END OF LEVEL questManager.CompleteQuest(last_quest); Debug.Log("LEVEL FINISHED!"); yield return(new WaitForSeconds(1f)); SceneManager.LoadSceneAsync("GameEnd"); }