public void GetEntranceDirection(SubStage subStage) { entranceDirection = subStage.GetForegroundDirection(playerModelObject.transform.position); subStageObject = subStage; initModelAngle = playerModelObject.transform.eulerAngles; curveTimer.Initialize(); }
/// <summary> /// 次のサブステージを生成する /// </summary> private void SpawnNextSubStage() { //直前のステージに合致するステージを生成する SubStage prevStage = subStages.Last(); GameObject next = GetNextSubStagePrefab(GatewayTypeExtend.ChainableType(prevStage.ExitType)); Vector3 spawnPosition = prevStage.transform.position + SubStageOffset(prevStage.ExitType); GameObject newObject = Instantiate(next, spawnPosition, Quaternion.identity); SubStage newSubStage = newObject.GetComponent <SubStage>(); subStages.Add(newSubStage); if (reserveNextStageType.HasValue) { if (reserveNextStageType.Value == SubStageShapeType.Goal) { goalGenerated = true; } reserveNextStageType = null; } else { spawnedSubStageNum++; } if (!goalGenerated) { newSubStage.SpawnObjects(stageParameter.GetSpawnObjectsParameterByPhase(currentWavePhase), 5); } }
public VMRandomComannds() { TeamGroupHandler handler = new TeamGroupHandler(); //IDataResult<List<ISubStage>> result = handler.GenerateTeamGroups(1); //groups = new List<List<string>>(); //if (result.Success) //{ // List<ISubStage> substages = result.Data; // foreach (ISubStage teams in substages) // { // List<IGroupTeam> groupsTeam= teams.TeamInformation.TeamsInGroup; // List<string> names = new List<string>(); // foreach(var s in groupsTeam) // { // names.Add(s.Name); // } // groups.Add(names); // } //} SubStage stage = new SubStage(); }
public IResult SubStageFile(string pathArchiv) { List <string> stagesArchiv = Directory.GetDirectories (pathArchiv).ToList(); IDataResult <MemoryStream> result = new DataResult <MemoryStream>() { Success = false }; List <IStage> listStages = new List <IStage>(); foreach (var stage in configSection.StageItems) { IStage currentStage = new Stage(); List <string> substatages = new List <string>(); if (stagesArchiv.Count >= stage.StageNumber) { substatages = Directory.GetDirectories (stagesArchiv[stage.StageNumber - 1]).ToList(); } currentStage.Name = stage.StageNumber.ToString(); currentStage.StageNumber = stage.StageNumber; int i = 0; List <ISubStage> listSubStages = new List <ISubStage>(); foreach (var subStage in stage.SubStageItems) { List <string> topicThems = new List <string>(); if (substatages.Count - 1 >= i) { topicThems = Directory.GetFiles (substatages[i]).ToList(); } string pathImage = topicThems[0]; ISubStage sub = new SubStage(); sub.ArchivePath = pathArchiv; sub.Image = SaveImageFile(pathImage); listSubStages.Add(sub); i++; } currentStage.ChildItemss = listSubStages; listStages.Add(currentStage); } Game game = new Game(); game.ChildItemss = listStages; GameEntityHolder.Game = game; GameEntityHolder.PathToArchive = pathArchiv; // GameEntityHolder.Game.ChildItemss[0].ChildItemss[0].ChildItemss[0]. return(result); }
public void Initialize() { LanePositionList = new List <Transform>(); for (int i = 0; i < transform.childCount; i++) { LanePositionList.Add(transform.GetChild(i)); } entranceDirection = Vector3.zero; subStageObject = null; curveTimer = new Timer(); }
/// <summary> /// 次のステージプレハブを取得する /// </summary> /// <param name="type">次のステージの入口の種類</param> /// <returns>入口の種類が一致するステージのプレハブを返す</returns> private GameObject GetNextSubStagePrefab(GatewayType type) { List <SubStagePrefabInfo> sameTypePrefabs; //次ステージの種類の予約があればそれを採用する if (reserveNextStageType.HasValue) { sameTypePrefabs = subStagePrefabs.FindAll(obj => obj.type == reserveNextStageType.Value && obj.prefab.GetComponent <SubStage>().EntranceType == type); } else { sameTypePrefabs = subStagePrefabs.FindAll(obj => obj.type == SubStageShapeType.Straight && obj.prefab.GetComponent <SubStage>().EntranceType == type); } //その中から適当なプレハブを選ぶ int prefabIndex = Random.Range(0, sameTypePrefabs.Count()); GameObject prefab = sameTypePrefabs.ElementAt(prefabIndex).prefab; SubStage prefabSubStage = prefab.GetComponent <SubStage>(); return(prefab); }
void Update() { if (Input.GetKeyDown(KeyCode.Q)) { Debug.Log(player.transform.position); } //スタートイベント中だったら if (eventManager.StartEventFlag == false) { return; } Vector3 scrollDirection = GetForegroundDirection(player.transform.position); if (prevScrolledDirection != scrollDirection) { int index = -1; for (int i = 0; i < subStages.Count; i++) { if (subStages[i].IsInArea(player.transform.position)) { index = i; } } if (index == -1) { Debug.LogError("Playerのいるサブステージが取得できませんでした。"); } subStages[index].transform.position = Vector3.zero; for (int i = index + 1; i < subStages.Count; i++) { subStages[i].transform.position = subStages[i - 1].transform.position + SubStageOffset(subStages[i - 1].ExitType); } for (int i = index - 1; i >= 0; i--) { subStages[i].transform.position = subStages[i + 1].transform.position + SubStageOffset(subStages[i + 1].EntranceType); } } prevScrolledDirection = scrollDirection; scrollDirection = scrollDirection.normalized; float speed = gameSpeed.Speed * Time.deltaTime; foreach (var st in subStages) { st.Move(scrollDirection, speed); } CalcToNeedNextStageReserve(); SubStage frontStage = subStages.First(); if (!frontStage.IsInsideCamera && stageDeletable) { //プレイヤーより前にいったので範囲外になったため、削除する Destroy(frontStage.gameObject); subStages.RemoveAt(0); //新しく追加する SpawnNextSubStage(); //ゴールの生成する条件を満たしているかどうかの判定式 System.Func <bool> IsFlaggedGenerateGoal = () => { //すでに生成済みなら再度生成はしない if (goalGenerated) { return(false); } //プレイモードがエンドレスならゴールは生成されない if (GameDataStore.Instance.PlayedMode == PlayMode.Holiday) { return(false); } //生成済みステージ数がゴール生成に必要なウェーブ数と一致しているときに、次のゴールを生成する return(spawnedSubStageNum == stageParameter.stageGoalWaveNum); }; if (IsFlaggedGenerateGoal()) { ReserveNextSubstageShapeType(SubStageShapeType.Goal); } } }