/// <summary> /// Sets the instances /// </summary> private GMInstance[] SetInstances() { // Get regular and block instances List <GMareInstance> gmareInstances = new List <GMareInstance>(); gmareInstances.AddRange(App.Room.Instances.ToArray()); // Create a game maker instance array GMInstance[] instances = new GMInstance[gmareInstances.Count]; // Set room instances for (int i = 0; i < gmareInstances.Count; i++) { bool studio = _project.GameMakerVersion == GMVersionType.GameMakerStudio; GMObject obj = studio ? _project.Objects.Find(o => o.Name == gmareInstances[i].ObjectName) : _project.Objects.Find(o => o.Id == gmareInstances[i].ObjectId); // If the object does not exist in the target project, abort if (obj == null) { string objMessage = studio ? gmareInstances[i].ObjectName : gmareInstances[i].Name + "(Id: " + gmareInstances[i].ObjectId + ")"; MessageBox.Show("Could not find the object: " + objMessage + " within the target export project.", "GMare", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); return(null); } // Get the sprite for the instance offsets GMSprite sprite = studio ? _project.Sprites.Find(s => s.Name == obj.SpriteName) : _project.Sprites.Find(s => obj.SpriteId == obj.SpriteId); // If the sprite does not exist in the target project, abort if (sprite == null) { string spriteMessage = studio ? obj.SpriteName : obj.SpriteId.ToString(); MessageBox.Show("Could not find the sprite: " + spriteMessage + " within the target export project.", "GMare", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); return(null); } // Increment project last instance id _project.LastInstanceId++; // Create a new instance instances[i] = new GMInstance(); instances[i].Name = GetUniqueName(false); instances[i].CreationCode = (string)gmareInstances[i].CreationCode.Clone(); instances[i].Id = _project.LastInstanceId; instances[i].ObjectName = gmareInstances[i].ObjectName; instances[i].ObjectId = gmareInstances[i].ObjectId; instances[i].X = gmareInstances[i].X + sprite.OriginX; instances[i].Y = gmareInstances[i].Y + sprite.OriginY; instances[i].ScaleX = gmareInstances[i].ScaleX == 0 ? 1 : gmareInstances[i].ScaleX; instances[i].ScaleY = gmareInstances[i].ScaleY == 0 ? 1 : gmareInstances[i].ScaleY; instances[i].Rotation = gmareInstances[i].Rotation; } // Return an array of instances return(instances); }
//进入状态机 public override void Enter() { GMInstance.UIController.updateTeamScore(GMInstance.currentScoreOfAttackerTeam, GMInstance.currentScoreOfDefenderTeam); GMInstance.UIController.setTargetScore(GMInstance.targetScore); AudioSource.PlayClipAtPoint(GMInstance.gameStartAudio, GMInstance.localPlayer.transform.position); //播放游戏开始音效 if (PhotonNetwork.isMasterClient) { GMInstance.InitCountDown(PhotonNetwork.time + competeDuration); } }
//进入状态机 public override void Enter() { //显示夺宝状态的相关UI GMInstance.UIController.enableGuardHPUI(true); GMInstance.UIController.enableTimeAndProcessPanel(true); GMInstance.UIController.enableRemainDistance(false); AudioSource.PlayClipAtPoint(GMInstance.gameStartAudio, GMInstance.localPlayer.transform.position); //播放游戏开始音效 if (PhotonNetwork.isMasterClient) { GMInstance.InitCountDown(PhotonNetwork.time + getTreasureDuration); } GuardZombie = GameObject.FindWithTag("Guard"); //僵尸生成池开始工作 GMInstance.zombieGenerator.generatorStartWorking(); /* * 添加骷髅兵 完成并完成生成池对骷髅兵调度(模仿僵尸生成池) */ //骷髅生成池开始工作 GMInstance.skeletonGenerator.generatorStartWorking(); GuardZombie.GetComponent <GuardAI>().Born(); //守护者开始工作 var maxHp = GuardZombie.GetComponent <ZombieHealth>().maxHP; GMInstance.UIController.setGuardMaxHp(maxHp); var team = PhotonNetwork.player.customProperties["Team"].ToString(); if (team == "AttackerTeam") { GMInstance.UIController.updateProcessText("击败守护者,夺得宝物车!"); } else { GMInstance.UIController.updateProcessText("保护守护者,阻止盗墓者入侵!"); } }
//状态机初始化 public override void Init() { GMInstance.initMonsterGenerator(); }
//退出状态机 public override void Exit() { GMInstance.LeaveRoom(); //退出房间 }
//状态机退出 public override void Exit() { GMInstance.InstantiatePlayer(); //准备结束时初始化玩家实例 }