Esempio n. 1
0
    /*===================================================*/
    // あたり判定の処理

    void OnTriggerEnter(Collider col)
    {
        // 弾にあたったら
        if (col.gameObject.tag == "Shot")
        {
            gm.RemoveEnemy(this);

            foreach (Enemy e in GameMgr.enemyList)
            {
                if ((this.transform.position - e.transform.position).sqrMagnitude < normalEyeSightLength)
                {
                    //e.SetDangerFlag(true);
                    //targetStagePos = player.transform.position;
                    e.SetRelayStagePos(Vector3.zero);
                    e.SetTargetStagePos(player.transform.position);
                    e.SetStates(StateType.Caution);
                }
            }

            dangerEnemyUI.SetActive(false);
            cautionEnemyUI.SetActive(false);
            if (keyEnemyUIFlag == true)
            {
                keyEnemyUI.SetActive(false);
                foreach (Wall w in GameMgr.wallList)
                {
                    if (w.gateFlag)
                    {
                        w.obj.SetActive(false);
                    }
                }
                dp.SetPurposeText("人質の場所に向かおう");
                Debug.Log("Gate Open");
            }
            if (Random.Range(0, 2) == 1)
            {
                pi.DestroyItem();
            }
            else
            {
                pi.gameObject.SetActive(false);
            }
            Vanish();
        }
    }
Esempio n. 2
0
    // Update is called once per frame
    void Update()
    {
        if (moveCameraFlag == true)
        {
            mainCamera.transform.position = Vector3.MoveTowards(mainCamera.transform.position, player.transform.position + cameraFollow.offset, Time.deltaTime * 25);
            if ((mainCamera.transform.position - (player.transform.position + cameraFollow.offset)).sqrMagnitude < 10f)
            {
                player.SetStartFlag(true);
                cameraFollow.enabled = true;
                moveCameraFlag       = false;
                if (enemyList != null)
                {
                    foreach (Enemy e in enemyList)
                    {
                        e.SetStartFlag(true);
                    }
                }
            }
        }

        if (player.GetHp() <= 0)
        {
            SceneManager.LoadScene("GameOver");
        }

        if (hostageFlag == true && (player.transform.position - startPos).sqrMagnitude < 2f && (player.transform.position - hostage.transform.position).sqrMagnitude < 5f)
        {
            SceneManager.LoadScene("GameClear");
        }


        if (SceneManager.GetActiveScene().name != "Select")
        {
            UpdateAlertUIStates();

            // プレイヤーに人質が近づいたら人質を連れる
            if ((player.transform.position - endPos).sqrMagnitude < 3f)
            {
                // 警告ステートの場合は人質を救出できない
                int cnt = 0;
                foreach (Enemy e in enemyList)
                {
                    //if (e.GetAttack()) cnt++;
                    if (e.GetStates() == StateType.Danger)
                    {
                        cnt++;
                    }
                }
                if (cnt == 0)
                {
                    hostageFlag = true;
                    dp.SetPurposeText("スタート地点に戻ろう");

                    // 敵が
                    if (Enemy.parent.Count() < (ENEMY_NUM / 2))
                    {
                        for (int i = 0; i < ENEMY_NUM / 4; i++)
                        {
                            int enemyNum = Random.Range(1, 3);
                            int ind      = 0;
                            for (int j = 0; j < stageList.Count; j++)
                            {
                                //
                                if (stageList[j].id == enemyNum)
                                {
                                    ind = j;
                                    break;
                                }
                            }
                            //Debug.Log("enemy : " + ind);
                            //Debug.Log(ind + " stageID : " + stageList[ind].id);
                            Enemy e       = Enemy.Add(enemyList.Count, stageList[ind].obj.transform.position.x, 1.0f, stageList[ind].obj.transform.position.z, stageList[ind].id, this, pm);
                            var   itemObj = Instantiate(itemBox, Vector3.zero, itemBox.transform.rotation);
                            pi = itemObj.GetComponent <PopItem>();
                            pi.Init(this, e);

                            e.InitMgrTarget(enemyMoveSpeed / 2, player, false, dp, pi);

                            //Debug.Log(stageList[0].obj.transform.position);

                            e.InitilizeShot();

                            e.InitilizeUI();

                            e.SetStartFlag(true);

                            enemyList.Add(e);
                        }
                    }
                }
            }

            // プレイヤーの周りにいない敵は描画しない
            foreach (Enemy e in enemyList)
            {
                if ((player.transform.position - e.transform.position).sqrMagnitude < 300f)
                {
                    e.gameObject.SetActive(true);
                }
                else
                {
                    e.gameObject.SetActive(false);
                }
            }
        }
    }
Esempio n. 3
0
    // Start is called before the first frame update
    void Start()
    {
        stageList = new List <Stage>();
        wallList  = new List <Wall>();

        mapList = new List <List <Map> >();
        mapList.Add(new List <Map>());

        stageIDList = new List <List <int> >();
        for (int i = 0; i < ROOM_NUM + 1; i++)
        {
            stageIDList.Add(new List <int>());
        }

        if (SceneManager.GetActiveScene().name != "Select")
        {
            // ステージを自動生成
            CreateStage cs = createStageManager.GetComponent <CreateStage>();
            cs.Create(new Vector3(-1, 0, 1), ROOM_NUM);
        }
        else
        {
            stageCenterPos = Vector3.zero;
            //startPos = new Vector3(-1, -104, -3);
        }



        stageFoundation.transform.position = new Vector3(stageCenterPos.x, -158f, stageCenterPos.z);

        pm = this.GetComponent <ProbabilityMap>();

        TargetColor = new Color(0.0f, 1.0f, 0.0f, 0.0f);

        mainCamera = GameObject.FindGameObjectWithTag("MainCamera");
        mainCamera.transform.position = new Vector3(stageCenterPos.x, 65f, stageCenterPos.z - 30f);
        cameraFollow = mainCamera.GetComponent <Follow>();
        Camera camera = mainCamera.GetComponent <Camera>();


        dp = this.GetComponent <DisplayPurpose>();


        InitilizePlayer(startPos, mainCamera);

        if (SceneManager.GetActiveScene().name != "Select")
        {
            InitilizeHostage(endPos);
            InitilizeDecoy();

            InitilizeEnemy();

            InitilizeStartEffect(startPos, startEffect);
        }
        else
        {
            mainCamera.transform.position = new Vector3(0f, -90f, -5f);
            player.transform.position     = new Vector3(0, -104, 0);

            dp.SetPurposeText("難易度を選ぼう");
        }


        ShotEffect.parent      = new TokenMgr <ShotEffect>("Exploson", ENEMY_NUM);
        ShotStartEffect.parent = new TokenMgr <ShotStartEffect>("Exploson7", ENEMY_NUM);

        hostageFlag = false;

        moveCameraFlag = false;

        dangerUIText  = dangerUI.GetComponentInChildren <Text>();
        cautionUIText = cautionUI.GetComponentInChildren <Text>();

        cautionUI.SetActive(false);
        dangerUI.SetActive(false);
        StartCoroutine("MoveCamera");
    }