// 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); }
/// <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); } }
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(); }
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; }
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, }); } }
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); }
private void SetProbabilityMap(ProbabilityMap pm) { this.pm = pm; }
// 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"); }