示例#1
0
        // Initialise state
        public override void InitialiseState(Game1 game)
        {
            // Store reference to singleton Managers
            mapGen           = MapGen.Instance;
            poolManager      = PoolManager.Instance;
            collisionManager = CollisionManager.Instance;
            enemyDirector    = EnemyDirector.Instance;
            gameManager      = GameManager.Instance;

            collisionManager.Initialise();
            enemyDirector.Initialise();
            poolManager.Initialise();

            // Attach events
            enemyDirector.OnStageEnemiesDestroyed += OnStageBegin;
            // gameManager.Hero.OnDeath += OnHeroDeath;


            // Initialise
            mapGen.Initialise(game.Services);
            mapGen.GetMapData("BattleArena");


            base.InitialiseState(game);
        }
示例#2
0
    //エネミグループをプレハブからインスタンスする関数
    public void InstanceEnemy(string enemyGroup_name, GameObject callObj, GameObject parentObj = null)
    {
        for (int i = 0; i < enemyGroup_prefabs.Length; i++)
        {
            //プレハブにないなら生成しない
            if (!enemyGroup_prefabs[i].name.Equals(enemyGroup_name))
            {
                continue;                                                      //名前と一致していない
            }
            //生成したり登録したり
            GameObject enemyGroup = Instantiate(enemyGroup_prefabs[i], belgianAI);
            if (parentObj != null)
            {
                enemyGroup.transform.parent = parentObj.transform;
            }
            enemyGroup.transform.position = callObj.transform.position;
            instanceMap.Add(callObj, enemyGroup.transform); //add

            //rootがEnemyDirectorなら
            EnemyDirector single = enemyGroup.GetComponent <EnemyDirector>();
            if (single != null)
            {
                GameDirector.Instance().AddEnemyDirector(single);
                return;
            }

            //rootの子オブジェクトがEnemyDirectorなら
            EnemyDirector[] group = enemyGroup.GetComponentsInChildren <EnemyDirector>();
            for (int num = 0; num < group.Length; num++)
            {
                GameDirector.Instance().AddEnemyDirector(group[num]);
            }
            return;
        }
    }
示例#3
0
    private void Awake()
    {
        if (mInstance != null)
        {
            Destroy(gameObject);
            return;
        }

        UnityEngine.SceneManagement.SceneManager.activeSceneChanged += OnActiveSceneChanged;

        mInstance = this;
        DontDestroyOnLoad(gameObject);

        mPlayerStats           = GetComponentInChildren <CharacterStatistics>();
        mSaveManager           = GetComponent <SaveManager>();
        mTransitionManager     = GetComponentInChildren <ScreenTransitionManager>();
        mCinematicDirector     = GetComponentInChildren <CinematicDirector>();
        mCinematicDataProvider = GetComponentInChildren <CinematicDataProvider>();
        mCharacterStatInfo     = GetComponentInChildren <CharacterStatInfo>();
        mCentralEvents         = new CentralEvents();
        mCompanionBuilder      = GetComponentInChildren <CompanionBuilder>();
        mEnemyDirector         = GetComponentInChildren <EnemyDirector>();
        mSoundManager          = GetComponentInChildren <SoundManager>();
        mQuirkRegistry         = GetComponentInChildren <QuirkRegistry>();

        mSaveManager.LoadGame();

        playerData.onPlayerDataChanged           += OnPlayerDataChanged;
        playerStats.onCharacterStatisticsChanged += OnPlayerStatsChanged;
    }
示例#4
0
 //エネミー管理リストの削除関数
 public void RemoveEnemyDirector(EnemyDirector ene)
 {
     if (!enemyDirectors.Contains(ene))
     {
         return;
     }
     enemyDirectors.Remove(ene);
 }
示例#5
0
 //エネミー管理リストの追加関数
 public void AddEnemyDirector(EnemyDirector ene)
 {
     if (enemyDirectors.Contains(ene))
     {
         return;
     }
     enemyDirectors.Add(ene);
 }
示例#6
0
    // Start is called before the first frame update
    void Start()
    {
        enemyDirector = transform.parent.GetComponent <EnemyDirector>();

        thisAgent    = GetComponent <NavMeshAgent>();
        thisAnimator = GetComponent <Animator>();

        PlayerDetected = false;
        Player         = GameObject.Find("Brian").transform;

        Health = MaxHealth;
    }
示例#7
0
    private IEnumerator Shoot()
    {
        RaycastHit hit;

        // Reduce ammo by 1
        currentAmmo--;

        // Play Muzzle Animation
        if (muzzleFlash != null)
        {
            muzzleFlash.Play();
        }

        // Trigger Recoil Animation
        if (animator != null)
        {
            animator.SetBool("isRecoil", true);
        }

        // Check if Raycast detects hit
        if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
        {
            Debug.Log(hit.transform.name);

            EnemyDirector target = hit.transform.GetComponent <EnemyDirector>();

            if (target != null)
            {
                target.gameObject.GetComponent <Health>().TakeDamage(damage);

                if (impactEffect != null)
                {
                    Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
                }
            }
        }

        // Come back once the recoil animation is done and next fire available
        yield return(new WaitForSeconds(1f / fireRate));

        if (animator != null)
        {
            animator.SetBool("isRecoil", false);
        }
    }
示例#8
0
        internal void Update(float deltaTime)
        {
            //Update the FarseerPhysics physics
            PhysicsWorld.Step(deltaTime);

            Projectiles.ForEach(p => p.Update(deltaTime));
            Particles.ForEach(p => p.Update(deltaTime));
            Collectables.ForEach(c => c.Update(deltaTime));
            Enemies.ForEach(e => e.Update(deltaTime));

            MainPlayer.Update(deltaTime);
            Map.Update(deltaTime);
            EnemyDirector.Update(deltaTime);

            MainCamera.Update(deltaTime);

            Cull(Projectiles);
            Cull(Particles);
            Cull(Collectables);
            Cull(Enemies);
        }
示例#9
0
        internal void ClearGame()
        {
            Projectiles.ForEach(p => p.WasCleared());
            Projectiles.Clear();

            Particles.ForEach(p => p.WasCleared());
            Particles.Clear();

            Collectables.ForEach(c => c.WasCleared());
            Collectables.Clear();

            Enemies.ForEach(e => e.WasCleared());
            Enemies.Clear();

            Map.ClearGame();

            EnemyDirector.ClearGame();

            MainPlayer.WasCleared();
            MainPlayer = null;

            MainCamera = null;
        }
示例#10
0
    //インスタンスからエネミーを削除する関数
    public void DestroyEnemy(GameObject callObj)
    {
        //生成されていないなら
        if (!instanceMap.ContainsKey(callObj))
        {
            return;
        }

        //削除
        Transform will_desEneGroup = instanceMap[callObj]; //避難させておく

        instanceMap.Remove(callObj);

        //rootがEnemyDirectorなら
        if (will_desEneGroup == null)
        {
            return;
        }
        EnemyDirector single = will_desEneGroup.GetComponent <EnemyDirector>();

        if (single != null)
        {
            GameDirector.Instance().RemoveEnemyDirector(single);
            Destroy(will_desEneGroup.gameObject);
            return;
        }

        //rootの子オブジェクトがEnemyDirectorなら
        EnemyDirector[] group = will_desEneGroup.GetComponentsInChildren <EnemyDirector>();
        for (int num = 0; num < group.Length; num++)
        {
            GameDirector.Instance().RemoveEnemyDirector(group[num]);
        }
        Destroy(will_desEneGroup.gameObject);
        return;
    }