/// <summary> /// 初始化打手考试 /// </summary> private MiniGameBaseBean InitBeaterGame() { MiniGameBaseBean miniGameData = MiniGameEnumTools.GetMiniGameData(MiniGameEnum.Combat); miniGameData = PreTypeForMiniGameEnumTools.GetMiniGameData(miniGameData, levelData.pre_data_minigame, characterData); return(miniGameData); }
/// <summary> /// 初始化厨师考试 /// </summary> private MiniGameBaseBean InitChefGame() { MiniGameBaseBean miniGameData = MiniGameEnumTools.GetMiniGameData(MiniGameEnum.Cooking); miniGameData = PreTypeForMiniGameEnumTools.GetMiniGameData(miniGameData, levelData.pre_data_minigame); //先清除数据中的指定敌人 miniGameData.listEnemyGameData.Clear(); //随机生成敌人 List <CharacterBean> listEnemyData = new List <CharacterBean>(); CharacterWorkerBaseBean characterWorkerData = characterData.baseInfo.GetWorkerInfoByType(WorkerEnum.Chef); int equipLevel = (characterWorkerData.GetLevel() + 1) / 2; for (int i = 0; i < UnityEngine.Random.Range(1, 16); i++) { CharacterBean randomEnemy = CharacterBean.CreateRandomEnemyData(100, 10, equipLevel); listEnemyData.Add(randomEnemy); } miniGameData.InitData(characterData, listEnemyData); return(miniGameData); }
/// <summary> /// 生成战斗 /// </summary> public void OnClickCombatBuild() { MiniGameCombatBean miniGameCombat = (MiniGameCombatBean)MiniGameEnumTools.GetMiniGameData(MiniGameEnum.Combat); if (CheckUtil.StringIsNull(etCombatPlayerIds.text)) { LogUtil.LogError("没有玩家ID"); return; } if (CheckUtil.StringIsNull(etCombatPlayerIds.text)) { LogUtil.LogError("没有敌人ID"); return; } List <long> playerIds = GetIds(etCombatPlayerIds.text); List <long> EnemyIds = GetIds(etCombatEnemyIds.text); miniGameCombat.winBringDownNumber = EnemyIds.Count; miniGameCombat.winSurvivalNumber = 1; List <CharacterBean> listOurData = new List <CharacterBean>(); foreach (long id in playerIds) { listOurData.Add(NpcInfoHandler.Instance.manager.GetCharacterDataById(id)); } List <CharacterBean> listEnemyData = new List <CharacterBean>(); foreach (long id in EnemyIds) { listEnemyData.Add(NpcInfoHandler.Instance.manager.GetCharacterDataById(id)); } miniGameCombat.InitData(listOurData, listEnemyData); //找到竞技场战斗的地点 miniGameCombat.miniGamePosition = new Vector3(0, 10, 0); //初始化游戏 MiniGameHandler.Instance.handlerForCombat.InitGame(miniGameCombat); }
/// <summary> /// 按钮-生孩子 /// </summary> public void OnClickBirth() { AudioHandler.Instance.PlaySound(AudioSoundEnum.ButtonForNormal); GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); int year = gameData.GetGameTimeForYear(); if (year == 0) { year = 1; } float playSpeed = Mathf.Clamp(10f / year, 2, 10); MiniGameBirthBean gameBirthData = MiniGameEnumTools.GetMiniGameData(MiniGameEnum.Birth) as MiniGameBirthBean; gameBirthData.fireNumber = 10; gameBirthData.enmeySpeed = 3; gameBirthData.enmeyBuildInterval = 0.8f; gameBirthData.playSpeed = playSpeed; gameBirthData.addBirthPro = 0.01f; gameBirthData.gameReason = MiniGameReasonEnum.Other; gameBirthData.InitForMiniGame(); MiniGameHandler.Instance.handlerForBirth.RegisterNotifyForMiniGameStatus(NotifyForMiniGameStatus); MiniGameHandler.Instance.handlerForBirth.InitGame(gameBirthData); }
/// <summary> /// 创建迷你游戏数据 /// </summary> /// <returns></returns> private List<MiniGameBaseBean> CreateMiniGameData(TrophyTypeEnum type) { List<MiniGameBaseBean> listMiniGameData = new List<MiniGameBaseBean>(); int arenaNumber = UnityEngine.Random.Range(5, 15); for (int i = 0; i < arenaNumber; i++) { MiniGameEnum gameType = MiniGameEnumTools.GetRandomMiniGameTypeForArena(); StoreInfoBean storeInfo = null; MiniGameBaseBean miniGameData = MiniGameEnumTools.GetMiniGameData(gameType); miniGameData.gameReason = MiniGameReasonEnum.Fight; switch (gameType) { case MiniGameEnum.Cooking: storeInfo = GetStoreInfoByTypeAndWorker(type, WorkerEnum.Chef); miniGameData = CreateCookingGameData((MiniGameCookingBean)miniGameData, storeInfo, type); break; case MiniGameEnum.Barrage: storeInfo = GetStoreInfoByTypeAndWorker(type, WorkerEnum.Waiter); miniGameData = CreateBarrageGameData((MiniGameBarrageBean)miniGameData, storeInfo, type); break; case MiniGameEnum.Account: storeInfo = GetStoreInfoByTypeAndWorker(type, WorkerEnum.Accountant); miniGameData = CreateAccountGameData((MiniGameAccountBean)miniGameData, storeInfo, type); break; case MiniGameEnum.Debate: storeInfo = GetStoreInfoByTypeAndWorker(type, WorkerEnum.Accost); miniGameData = CreateDebateGameData((MiniGameDebateBean)miniGameData, storeInfo, type); break; case MiniGameEnum.Combat: storeInfo = GetStoreInfoByTypeAndWorker(type, WorkerEnum.Beater); miniGameData = CreateCombatGameData((MiniGameCombatBean)miniGameData, storeInfo, type); break; } PreTypeForMiniGameEnumTools.GetMiniGameData(miniGameData, storeInfo.pre_data_minigame); //奖励添加 miniGameData.listReward = new List<RewardTypeBean>(); List<RewardTypeBean> listReward = RewardTypeEnumTools.GetListRewardData(storeInfo.reward_data); //固定奖励 List<RewardTypeBean> listFixedReward = new List<RewardTypeBean>(); //随机奖励 List<RewardTypeBean> listRandomReward = new List<RewardTypeBean>(); foreach (RewardTypeBean itemReward in listReward) { switch (itemReward.GetRewardType()) { case RewardTypeEnum.AddMoneyL: case RewardTypeEnum.AddMoneyM: case RewardTypeEnum.AddMoneyS: case RewardTypeEnum.AddArenaTrophyElementary: case RewardTypeEnum.AddArenaTrophyIntermediate: case RewardTypeEnum.AddArenaTrophyAdvanced: case RewardTypeEnum.AddArenaTrophyLegendary: if (miniGameData.winBringDownNumber > 0) { //针对多人战 奖励提升 itemReward.data = long.Parse(itemReward.data) * miniGameData.winBringDownNumber + ""; } listFixedReward.Add(itemReward); break; default: listRandomReward.Add(itemReward); break; } } miniGameData.listReward.AddRange(listFixedReward); if (!CheckUtil.ListIsNull(listRandomReward)) { RewardTypeBean randomReward = RandomUtil.GetRandomDataByList(listRandomReward); miniGameData.listReward.Add(randomReward); } //添加对应的奖杯 switch (type) { case TrophyTypeEnum.Elementary: break; case TrophyTypeEnum.Intermediate: break; case TrophyTypeEnum.Advanced: break; case TrophyTypeEnum.Legendary: break; } //设置游戏时间 if (storeInfo.mark != null) miniGameData.preGameTime = int.Parse(storeInfo.mark); //设置前置金钱 miniGameData.preMoneyL = storeInfo.price_l; miniGameData.preMoneyM = storeInfo.price_m; miniGameData.preMoneyS = storeInfo.price_s; //添加游戏数据 listMiniGameData.Add(miniGameData); } return listMiniGameData; }
public MiniGameCombatBean InitCombat(UserInfiniteTowersBean infiniteTowersData) { SceneInfiniteTowersManager infiniteTowersManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInfiniteTowersManager>(); //设置标牌 infiniteTowersManager.SetSignForLayer(infiniteTowersData.layer); //设置战斗数据 MiniGameCombatBean miniGameCombat = (MiniGameCombatBean)MiniGameEnumTools.GetMiniGameData(MiniGameEnum.Combat); //设置战斗地点 miniGameCombat.miniGamePosition = infiniteTowersManager.GetCombatPostionByLayer(infiniteTowersData.layer); //获取战斗成员数据 //获取友方数据 List <CharacterBean> listUserData = new List <CharacterBean>(); int totalLucky = 0; GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); foreach (string memberId in infiniteTowersData.listMembers) { CharacterBean itemCharacterData = gameData.GetCharacterDataById(memberId); if (itemCharacterData != null) { listUserData.Add(itemCharacterData); itemCharacterData.GetAttributes(out CharacterAttributesBean characterAttributes); totalLucky += characterAttributes.lucky; } } //如果没有就启动测试数据 if (listUserData.Count == 0) { CharacterBean itemCharacterData = NpcInfoHandler.Instance.manager.GetCharacterDataById(10001); listUserData.Add(itemCharacterData); listUserData.Add(itemCharacterData); listUserData.Add(itemCharacterData); } //获取敌方数据 List <CharacterBean> listEnemyData = infiniteTowersManager.GetCharacterDataByInfiniteTowersLayer(infiniteTowersData.layer); //设置敌方能力 foreach (CharacterBean itemEnemyData in listEnemyData) { CharacterAttributesBean enemyAttributes = infiniteTowersManager.GetEnemyAttributesByLayer(itemEnemyData, infiniteTowersData.layer); if (enemyAttributes != null) { itemEnemyData.attributes.InitAttributes(enemyAttributes); } } //初始化战斗数据 miniGameCombat.gameReason = MiniGameReasonEnum.Fight; miniGameCombat.winSurvivalNumber = 1; miniGameCombat.winBringDownNumber = listEnemyData.Count; miniGameCombat.InitData(listUserData, listEnemyData); //添加奖励装备 List <RewardTypeBean> listRewardEquip = RewardTypeEnumTools.GetRewardEnemyEquipForInfiniteTowers(listEnemyData, infiniteTowersData.layer, totalLucky); if (!CheckUtil.ListIsNull(listRewardEquip)) { miniGameCombat.listReward.AddRange(listRewardEquip); } //添加奖励物品 List <RewardTypeBean> listRewardItems = RewardTypeEnumTools.GetRewardItemsForInfiniteTowers(listEnemyData, infiniteTowersData.layer, totalLucky, false); if (!CheckUtil.ListIsNull(listRewardItems)) { miniGameCombat.listReward.AddRange(listRewardItems); } return(miniGameCombat); }
/// <summary> /// 游戏结束 /// </summary> /// <param name="isWinGame"></param> /// <param name="isSlow">是否开启慢镜头</param> public virtual void EndGame(MiniGameResultEnum gameResulte, bool isSlow) { if (GetMiniGameStatus() == MiniGameStatusEnum.Gameing) { SetMiniGameStatus(MiniGameStatusEnum.GameEnd); StopAllCoroutines(); //拉近尽头 BaseControl baseControl = GameControlHandler.Instance.manager.GetControl(); if (baseControl) { baseControl.SetCameraOrthographicSize(6); } if (isSlow) { //开启慢镜头 Time.timeScale = 0.1f; } transform.DOScale(new Vector3(1, 1, 1), 0.3f).OnComplete(delegate() { Time.timeScale = 1f; if (baseControl) { baseControl.SetCameraOrthographicSize(); } if (miniGameBuilder) { miniGameBuilder.DestroyAll(); } //设置游戏数据 miniGameData.SetGameResult(gameResulte); GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); //经验加成 List <MiniGameCharacterBean> listUserData = miniGameData.GetListUserGameData(); List <CharacterBean> listWorkerData = gameData.GetAllCharacterData(); foreach (MiniGameCharacterBean itemCharacterData in listUserData) { foreach (CharacterBean itemWorkerData in listWorkerData) { if (itemWorkerData.baseInfo.characterId == null || itemCharacterData.characterData.baseInfo.characterId == null) { continue; } if (itemWorkerData.baseInfo.characterId.Equals(itemCharacterData.characterData.baseInfo.characterId)) { WorkerEnum workerType = MiniGameEnumTools.GetWorkerTypeByMiniGameType(miniGameData.gameType); CharacterWorkerBaseBean characterWorker = itemWorkerData.baseInfo.GetWorkerInfoByType(workerType); if (miniGameData.GetGameResult() == MiniGameResultEnum.Win) { characterWorker.AddExp(10, out bool isLevelUp); } else { characterWorker.AddExp(5, out bool isLevelUp); } } } } //打开游戏结束UI UIMiniGameEnd uiMiniGameEnd = UIHandler.Instance.manager.OpenUIAndCloseOther <UIMiniGameEnd>(UIEnum.MiniGameEnd); uiMiniGameEnd.SetData(miniGameData); uiMiniGameEnd.SetCallBack(this); }); //通知 游戏结束 notifyForMiniGameStatus?.Invoke(MiniGameStatusEnum.GameEnd, new object[] { miniGameData }); AudioHandler.Instance.StopMusic(); } }
public static MiniGameBaseBean GetMiniGameData(MiniGameBaseBean miniGameData, string data, List <CharacterBean> listPickCharacter) { List <PreTypeForMiniGameBean> listPreData = GetListPreData(data); List <CharacterBean> listUserData = new List <CharacterBean>(); List <CharacterBean> listEnemyData = new List <CharacterBean>(); Vector2 minigamePosition = Vector2.zero; //如果没有传入游戏数据则先根据条件生成一个 if (miniGameData == null) { GetMiniGameType(data, out MiniGameEnum miniGameType); miniGameData = MiniGameEnumTools.GetMiniGameData(miniGameType); } foreach (PreTypeForMiniGameBean itemPreData in listPreData) { switch (itemPreData.dataType) { case PreTypeForMiniGameEnum.MiniGameType: MiniGameEnum miniGameType = (MiniGameEnum)int.Parse(itemPreData.data); miniGameData.gameType = miniGameType; break; case PreTypeForMiniGameEnum.GameReason: MiniGameReasonEnum miniGameReason = (MiniGameReasonEnum)int.Parse(itemPreData.data); miniGameData.gameReason = miniGameReason; break; case PreTypeForMiniGameEnum.UserIds: long[] userIds = StringUtil.SplitBySubstringForArrayLong(itemPreData.data, ','); listUserData = NpcInfoHandler.Instance.manager.GetCharacterDataByIds(userIds); break; case PreTypeForMiniGameEnum.EnemyIds: long[] enemyIds = StringUtil.SplitBySubstringForArrayLong(itemPreData.data, ','); listEnemyData = NpcInfoHandler.Instance.manager.GetCharacterDataByIds(enemyIds); break; case PreTypeForMiniGameEnum.MiniGamePosition: float[] arrayPosition = StringUtil.SplitBySubstringForArrayFloat(itemPreData.data, ','); minigamePosition = new Vector2(arrayPosition[0], arrayPosition[1]); break; case PreTypeForMiniGameEnum.TalkMarkIdForWin: miniGameData.gameResultWinTalkMarkId = long.Parse(itemPreData.data); break; case PreTypeForMiniGameEnum.TalkMarkIdForLose: miniGameData.gameResultLoseTalkMarkId = long.Parse(itemPreData.data); break; case PreTypeForMiniGameEnum.WinLife: miniGameData.winLife = long.Parse(itemPreData.data); break; case PreTypeForMiniGameEnum.WinSurvivalTime: miniGameData.winSurvivalTime = float.Parse(itemPreData.data); break; case PreTypeForMiniGameEnum.BarrageForLaunchInterval: case PreTypeForMiniGameEnum.BarrageForLaunchSpeed: case PreTypeForMiniGameEnum.BarrageForLaunchTypes: case PreTypeForMiniGameEnum.BarrageForLaunchNumber: case PreTypeForMiniGameEnum.BarrageForBulletType: GetMiniGameDataForBarrage(itemPreData, miniGameData); break; case PreTypeForMiniGameEnum.AccountForWinMoneyL: case PreTypeForMiniGameEnum.AccountForWinMoneyM: case PreTypeForMiniGameEnum.AccountForWinMoneyS: GetMiniGameDataForAccount(itemPreData, miniGameData); break; case PreTypeForMiniGameEnum.CombatForBringDownNumber: case PreTypeForMiniGameEnum.CombatForSurvivalNumber: GetMiniGameDataForCombat(itemPreData, miniGameData); break; case PreTypeForMiniGameEnum.CookingForScore: case PreTypeForMiniGameEnum.CookingForStoryStartId: case PreTypeForMiniGameEnum.CookingForStoryAuditId: case PreTypeForMiniGameEnum.CookingForAuditCharacter: case PreTypeForMiniGameEnum.CookingForCompereCharacter: case PreTypeForMiniGameEnum.CookingForThemeId: case PreTypeForMiniGameEnum.CookingForThemeLevel: case PreTypeForMiniGameEnum.CookingForButtonNumber: case PreTypeForMiniGameEnum.CookingForWinRank: GetMiniGameDataForCook(itemPreData, miniGameData); break; } } if (miniGameData == null) { return(miniGameData); } //如果有传入角色则把传入角色也加入到用户数据中 if (listPickCharacter != null) { listUserData.AddRange(listPickCharacter); } miniGameData.miniGamePosition = minigamePosition; miniGameData.InitData(listUserData, listEnemyData); return(miniGameData); }