Пример #1
0
    // Start is called before the first frame update
    void Start()
    {
        CameraPos = this.transform.position;

        enemyTime  = 0;
        enemyCount = 1;

        stageList = new List <Stage>();
        wallList  = new List <Wall>();

        CreateStage cs = this.GetComponent <CreateStage>();

        cs.Create(new Vector3(-1, 0, 1), ROOM_NUM);

        f = this.GetComponent <Follow>();

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

        // 作成していたStageを読み取り初期化
        Initilize_Stage();

        //
        Initilize_Wall();

        //
        pm = this.gameObject.GetComponent <ProbabilityMap>();

        ShotEffect.parent = new TokenMgr <ShotEffect>("Exploson", ENEMY_NUM);
    }
Пример #2
0
    /// <summary>
    /// 目的地を設定する関数
    /// </summary>
    /// <param name="pm"> 確率マップからプレイヤーがいる確率の高い座標を選択するためのインスタンス </param>
    /// <param name="stageList"> 保存している確率マップを取り出す用のリスト </param>
    public void SelectTarget(ProbabilityMap pm, ref List <Stage> stageList)
    {
        // 中継地点が設定されている場合、中継地点に到着したので中継地点を初期化
        if (relayStagePos != Vector3.zero)
        {
            relayStagePos = Vector3.zero;
            return;
        }
        // 中継地点が設定されていない場合、目的地に到着したので次の目的地を設定
        else
        {
            // 次の目的地を設定
            targetStage = pm.Sort_Prob(stageList, this);

            // 次の目的地の座標を設定
            targetStagePos = new Vector3(targetStage.obj.transform.position.x, targetStage.obj.transform.position.y + 1, targetStage.obj.transform.position.z);

            wp.Initialize();

            //
            moveFlag = false;

            SetStageID(targetStage.id);
        }
    }
Пример #3
0
    public void UpdateEnemy(ProbabilityMap pm, List <Stage> stageList, List <Wall> wallList, Vector3 playerPos)
    {
        pm.UpdateProbabilityMap(ref stageList, this.transform.forward, this.transform.position);

        if (GetAttack())
        {
            if (IsReachTarget(ref stageList))
            {
                PushTargetPosStk(playerPos);
            }

            Look();
            Shoot(playerPos);
        }
        else
        {
            if (IsReachTarget(ref stageList))
            {
                //Debug.Log("Reach Target");
                SelectTarget(pm, ref stageList);
            }

            SearchPlayer(playerPos);
        }


        forward.x = to_binary(this.transform.forward.x);
        forward.y = to_binary(this.transform.forward.y);

        SelectTarget_in_Obst(forward, ref wallList);

        //Coloring_Target(ref targetStage, new Color(targetStage.material.color.r, 1.0f, targetStage.material.color.b, 0.0f));

        Move_Target();
    }
Пример #4
0
    public void SelectTarget(ProbabilityMap pm, ref List <Stage> stageList)
    {
        /*
         * for (int i = 0; i < stages.Length; i++)
         * {
         *  tmpStageColors[i] += (stages[i].gameObject.transform.position - this.gameObject.transform.position).magnitude;
         * }
         */

        targetPosStk.Pop();

        if (targetPosStk.Count == 0)
        {
            //Debug.Log("Select Target");

            targetStage = pm.Sort_Prob(stageList);

            Vector3 targetPos = new Vector3(targetStage.obj.transform.position.x, targetStage.obj.transform.position.y + 1, targetStage.obj.transform.position.z);
            targetPos = targetPos + (targetPos - this.transform.position).normalized / 2;

            targetPosStk.Push(targetPos);

            wp.Initialize();
        }


        MoveFlag = false;
    }
Пример #5
0
        static void ProccessGenerateResourceOps()
        {
            while (generateResourceRequestOps.TryDequeue(out var op))
            {
                var asteroidEntityId = op.EntityId.Id;

                var response = new ResourceGenerationReponse();

                if (ResourcesInventorySystem.TryGetResourceInfo(asteroidEntityId, 0, out var resourceInfo))
                {
                    response.databaseId = resourceInfo.databaseId;
                    response.type       = resourceInfo.type;
                    response.quantity   = resourceInfo.quantity;
                }
                else
                {
                    var position = PositionsSystem.GetComponent(asteroidEntityId).coords;

                    var time = (long)(DateTime.Now.ToUniversalTime() - centuryBegin).TotalSeconds;

                    var lowSample  = ProbabilityMap.EvaluateLowSample(position.x, position.y, position.z, time);
                    var medSample  = ProbabilityMap.EvaluateMedSample(position.x, position.y, position.z, time);
                    var highSample = ProbabilityMap.EvaluateHighSample(position.x, position.y, position.z, time);

                    var sample = ProbabilityMap.LayeringSample(lowSample, medSample, highSample);

                    var      seed = asteroidEntityId ^ BitConverter.ToInt64(Encoding.UTF8.GetBytes(op.Request.userDatabaseId), 0);
                    IRandomU prng = new XoShiRo128starstar(seed);

                    var scanner = op.Request.scanner;

                    var quantity = QuantityGenerator.Sample(sample, prng, scanner);

                    if (quantity > 0)
                    {
                        response.quantity = quantity;

                        var scannerResource = scanner.speciality;
                        if (scannerResource == ResourceType.Random)
                        {
                            scannerResource = (ResourceType)prng.Next(1, (int)ResourceType.Count);
                        }

                        response.type = scannerResource;

                        var resourceDBId = Helpers.GenerateCloudFireStoreRandomDocumentId(prng);
                        var asteroidDBId = Helpers.GenerateCloudFireStoreRandomDocumentId(prng);

                        response.databaseId = resourceDBId;

                        SpatialOSConnectionSystem.addPersistenceOps.Enqueue(
                            new AddComponentOp <PersistenceData>
                        {
                            EntityId = op.EntityId,
                            Data     = new PersistenceData()
                        });

                        var addComponentOp = new AddComponentOp <IdentificationData>
                        {
                            EntityId = op.EntityId,
                            Data     = new IdentificationData
                            {
                                entityDatabaseId = asteroidDBId,
                            }
                        };

                        IdentificationsSystem.OnComponentAdded(addComponentOp);
                        SpatialOSConnectionSystem.addIdentificationOps.Enqueue(addComponentOp);

                        ResourcesInventorySystem.QueueAddResourceOp(asteroidEntityId, resourceInfo.databaseId, new Resource(resourceInfo.type, resourceInfo.quantity));

                        var asteroidRef = CloudFirestoreInfo.Database.Collection(CloudFirestoreInfo.AsteroidsCollection).Document(asteroidDBId);
                        asteroidRef.CreateAsync(new Dictionary <string, object> {
                            { CloudFirestoreInfo.CoordinatesField, new double[3] {
                                  position.x, position.y, position.z
                              } }
                        });
                    }
                }

                SpatialOSConnectionSystem.responseGenerateResourceOps.Enqueue(
                    new CommandResponseOp <Harvestable.Commands.GenerateResource, ResourceGenerationReponse>//just using CommandResponseOp as container for request raw id and response
                {
                    EntityId  = new EntityId(),
                    RequestId = new RequestId <OutgoingCommandRequest <Harvestable.Commands.GenerateResource> >(op.RequestId.Id),
                    Response  = response,
                });
            }
        }
Пример #6
0
    public static Enemy Add(int id, float x, float y, float z, int stageID, GameMgr gm, ProbabilityMap pm)
    {
        // Enemyインスタンスの取得
        Enemy e = parent.Add(x, y, z);

        e.SetGmaeMgr(gm);

        e.SetProbabilityMap(pm);

        e.SetStageID(stageID);

        // IDを設定したり固有の処理をする
        e.SetParam(id);

        e.SetTankTower();

        e.SetCanonPos();

        return(e);
    }
Пример #7
0
 private void SetProbabilityMap(ProbabilityMap pm)
 {
     this.pm = pm;
 }
Пример #8
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");
    }