public void CommonSpawn(int unitLevel, int extraLevels, bool dynamicLevel, GameObject spawnPrefab, UnitToughness toughness = null) { //Debug.Log(gameObject.name + ".UnitSpawnNode.CommonSpawn()"); if (spawnPrefab == null || PlayerManager.MyInstance.MyCharacter == null) { return; } //GameObject spawnReference = Instantiate(spawnPrefabs[spawnIndex], GetSpawnLocation(), Quaternion.identity); // testing, re-enable transform position so mobs don't spawn way above the map if their prefab has a location set GameObject spawnReference = Instantiate(spawnPrefab, gameObject.transform.position, gameObject.transform.rotation); spawnReference.name = spawnReference.name + SystemGameManager.MyInstance.GetSpawnCount(); //Debug.Log(gameObject.name + ".UnitSpawnNode.Spawn(): gameObject spawned at: " + spawnReference.transform.position); Vector3 newSpawnLocation = Vector3.zero; Vector3 newSpawnForward = Vector3.forward; PersistentObject persistentObject = spawnReference.GetComponent <PersistentObject>(); if (persistentObject != null) { PersistentState persistentState = persistentObject.GetPersistentState(); if (persistentState != null) { newSpawnLocation = persistentState.Position; newSpawnForward = persistentState.Forward; } else { newSpawnLocation = GetSpawnLocation(); newSpawnForward = transform.forward; } } else { newSpawnLocation = GetSpawnLocation(); newSpawnForward = transform.forward; } //Debug.Log("UnitSpawnNode.Spawn(): newSpawnLocation: " + newSpawnLocation); NavMeshAgent navMeshAgent = spawnReference.GetComponent <NavMeshAgent>(); AIController aIController = spawnReference.GetComponent <AIController>(); aIController.MyStartPosition = newSpawnLocation; //Debug.Log("UnitSpawnNode.Spawn(): navhaspath: " + navMeshAgent.hasPath + "; isOnNavMesh: " + navMeshAgent.isOnNavMesh + "; isOnOffMeshLink: " + navMeshAgent.isOnOffMeshLink + "; pathpending: " + navMeshAgent.pathPending + "; warping now!"); //spawnReference.transform.position = newSpawnLocation; navMeshAgent.Warp(newSpawnLocation); spawnReference.transform.forward = newSpawnForward; //Debug.Log("UnitSpawnNode.Spawn(): afterMove: navhaspath: " + navMeshAgent.hasPath + "; isOnNavMesh: " + navMeshAgent.isOnNavMesh + "; pathpending: " + navMeshAgent.pathPending); CharacterUnit _characterUnit = spawnReference.GetComponent <CharacterUnit>(); if (respawnOn == respawnCondition.Despawn) { if (_characterUnit != null) { _characterUnit.OnDespawn += HandleDespawn; } } else if (respawnOn == respawnCondition.Loot) { LootableCharacter _lootableCharacter = spawnReference.GetComponent <LootableCharacter>(); if (_lootableCharacter != null) { _lootableCharacter.OnLootComplete += HandleLootComplete; } } else if (respawnOn == respawnCondition.Death) { if (_characterUnit != null && _characterUnit.MyCharacter != null && _characterUnit.MyCharacter.CharacterStats != null) { _characterUnit.MyCharacter.CharacterStats.OnDie += HandleDie; } } // don't override an existing toughness if (_characterUnit.MyCharacter.UnitToughness == null) { //Debug.Log("UnitSpawnNode.Spawn(): setting toughness to null on gameObject: " + spawnReference.name); _characterUnit.MyCharacter.SetUnitToughness(toughness); } int _unitLevel = (dynamicLevel ? PlayerManager.MyInstance.MyCharacter.CharacterStats.Level : unitLevel) + extraLevels; _characterUnit.MyCharacter.CharacterStats.SetLevel(_unitLevel); _characterUnit.MyCharacter.CharacterStats.TrySpawnDead(); spawnReferences.Add(spawnReference); }
public void Enter(AIController enemyController) { //Debug.Log("Entering Attack State"); this.aiController = enemyController; this.aiController.MyBaseCharacter.MyAnimatedUnit.MyCharacterMotor.StopFollowingTarget(); }
public void Enter(AIController aiController) { //Debug.Log(aiController.gameObject.name + ".FollowState.Enter()"); this.aiController = aiController; this.aiController.MyBaseCharacter.MyCharacterUnit.MyCharacterMotor.MyMovementSpeed = aiController.MyBaseCharacter.MyCharacterController.MyMovementSpeed; }