示例#1
0
        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);
        }
示例#2
0
 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;
 }