//修改全局开关和变量 void LogicModifyVariable(DramaSection section) { switch (section.op_int) { case eDOType_int.乘: Main.Inst.lv_ctrl.global_variable[section.variable_index] *= section.v_int; break; case eDOType_int.减: Main.Inst.lv_ctrl.global_variable[section.variable_index] -= section.v_int; break; case eDOType_int.加: Main.Inst.lv_ctrl.global_variable[section.variable_index] += section.v_int; break; case eDOType_int.赋值: Main.Inst.lv_ctrl.global_variable[section.variable_index] = section.v_int; break; case eDOType_int.除: Main.Inst.lv_ctrl.global_variable[section.variable_index] /= section.v_int; break; case eDOType_int.平方: Main.Inst.lv_ctrl.global_variable[section.variable_index] = (int)Mathf.Pow(Main.Inst.lv_ctrl.global_variable[section.variable_index], section.v_int); break; } analya_finish = true; }
/// <summary> /// 创建每个事件点的剧本 /// 包含召唤 /// </summary> /// <returns>The generate.</returns> /// <param name="level_info">Level info.用于访问地图、单位、事件数据</param> /// <param name="event_order">Event order.当前触发的事件序号</param> public static DramaScript Generate(LevelController level_info, int event_order) { DramaScript new_script = new DramaScript(); // 后期会有多种事件,目前只制作召唤 int grid_id = -1; foreach (var unit in level_info.map_data.list_unit_data) { grid_id = unit.m_start_grid; if (unit.m_launch_event_order == event_order) { DramaSection section = new DramaSection(); section.from_event = event_order; section.my_type = eDramaOperationType.ShouKan; section.chess_id = unit.m_unit_id; section.belong = unit.m_belong; section.to_grid_id = grid_id; section.my_argu_AI_ID = unit.AI_ID; new_script.section_list.Add(section); } } // 说好的其他事件 2017年11月11日14:34:24 EventInfo info = level_info.map_data.list_event_data[event_order]; foreach (var item in info.drama_script.section_list) { new_script.section_list.Add(item); } return(new_script); }
///显示编辑器 保留代码,其实作为数据传输用 // [MenuItem ("Window/MapEditor %e")] public static void ShowWindow(int _index, DramaSection _section) { // var window = DramaSectionWindows.GetWindow<DramaSectionWindows>(); index = _index; section = _section; // ((MapEdtior)window).init (); }
IEnumerator corFogLift(DramaSection script) { BKTools.FogLift(script.to_grid_id, script.v_int + GameRule.Default_PvE_Fog_Lift_Range, GameRule.Default_PvE_Fog_Lift_Range, GameRule.ePlayerIndex); yield return(new WaitForSeconds(1f)); analya_finish = true; yield return(null); }
//TODO 迷雾目标一般是玩家,这个设定未能在编辑器中设置 IEnumerator corFogCover(DramaSection script) { BKTools.FogCover(script.to_grid_id, script.v_int, GameRule.ePlayerIndex); yield return(new WaitForSeconds(1f)); analya_finish = true; yield return(null); }
public string json;//2017年11月03日21:14:31 没发现什么用,暂时放弃 public void Add(DramaSection section) { if (section == null) { Debug.Log("出现无效数据 根源显示属于TODO项"); return; } section_list.Add(section); }
IEnumerator corShowArea(DramaSection section) { //开放活动区域 foreach (var item in Main.Inst.lv_ctrl.map_data.list_area_grid[section.area_id].list) { //驱散迷雾 BKTools.FogLift(item, 1, GameRule.Default_PvE_Fog_Lift_Range, GameRule.ePlayerIndex); //记录已探索 Main.Inst.lv_ctrl.AreaExplored.Add(item); } analya_finish = true; yield return(null); }
public void RunDrama() { DramaSection section = drama_script.getNext(); if (section == null) { GoNext(); } else { AnalysisSection(section); } }
//返回是否结束 public DramaSection getNext() { //用新的判断,因为数组没法删啊 if (section_list.Count <= 0) { return(null); } else { DramaSection res = section_list[0]; section_list.RemoveAt(0); //返回的剧本在PlotShowPhase中分析执行,请务必添加演员等待 return(res); } }
public bool MoveUp(int _index) { if (_index == 0) { return(false); } DramaSection _moved = section_list [_index - 1]; // DramaSection _moving = section_list [_index]; section_list.Remove(_moved); // section_list.Remove (_moving); // section_list.Insert (_index - 1, _moving); section_list.Insert(_index, _moved); // section_list[_index - 1] = section_list return(true); }
public bool MoveDown(int _index) { if (_index == section_list.Count - 1) { return(false); } // DramaSection _moved = section_list [_index + 1]; DramaSection _moving = section_list [_index]; // section_list.Remove (_moved); section_list.Remove(_moving); section_list.Insert(_index + 1, _moving); // section_list.Insert (_index, _moved); // section_list[_index - 1] = section_list return(true); }
IEnumerator corHideArea(DramaSection section) { //开放活动区域 foreach (var item in Main.Inst.lv_ctrl.map_data.list_area_grid[section.area_id].list) { //驱散迷雾 BKTools.FogCover(item, 0, GameRule.ePlayerIndex); //记录已探索 if (Main.Inst.lv_ctrl.AreaExplored.Contains(item)) { Main.Inst.lv_ctrl.AreaExplored.Remove(item); } } analya_finish = true; yield return(null); }
IEnumerator corMove(DramaSection section) { //移动者 TODO 解析要改成后面多4位的形式 暂不修改 int id = section.chess_id; Chess ch = Main.Inst.dic_chess[id]; StartMoveChess(ch); Main.Inst.addDancer("move-" + id); yield return(new WaitForSeconds(GameRule.Moveing_Duration)); Main.Inst.redDancer("move-" + id); //移动方式 eDOType_Move movetype = section.move_type; bool is_force_move = false; ChessContainer grid = null; Point3 locater = section.move_argu; switch (movetype) { case eDOType_Move.Force_Move_ABS: is_force_move = true; grid = Main.Inst.chess_grids[locater.x]; break; case eDOType_Move.Force_Move_REL: is_force_move = true; grid = BKTools.LocateChessGrid(ch.container, locater); break; case eDOType_Move.Normal_Move_ABS: grid = Main.Inst.chess_grids[locater.x]; break; case eDOType_Move.Norma_lMove_REL: grid = BKTools.LocateChessGrid(ch.container, locater); break; default: Debug.LogError("剧情移动方式错误"); break; } moveChess(ch, grid, false); yield return(null); }
IEnumerator corShoukan(DramaSection section) { // int id = int.Parse (script.my_argu [0]); // ePlayer belong = (ePlayer)int.Parse (script.my_argu [1]); // ChessContainer grid = Main.Instance.chess_grids [int.Parse (script.my_argu [2])]; int id = section.chess_id; ePlayer belong = section.belong; ChessContainer grid = Main.Inst.chess_grids[section.to_grid_id]; //创建棋子 Main.Inst.addDancer("shoukan-" + id);//召唤操作会直接开始清理流程,我还没加标记呢,草拟吗的 int shoukan_sequence = Chess.GetSequenceInEvent(section.from_event); Main.Inst.now_turnphase.setChess(id, belong, grid, section.my_argu_AI_ID, true, section.from_event, shoukan_sequence); yield return(new WaitForSeconds(GameRule.Shoukan_Duration)); Main.Inst.redDancer("shoukan-" + id); analya_finish = true; }
IEnumerator corExploreContinue(DramaSection section) { Main.Inst.addDancer(KEYExCont); // 展示战斗成果 Main.Inst.panBattleSummary.Show(); yield return(new WaitUntil(BKTools.ISCWithArgu(KEYExCont))); //开放活动区域 TODO 关闭战斗区域特效 foreach (var item in Main.Inst.lv_ctrl.AreaBattle) { //驱散迷雾 BKTools.FogCover(item, 1, GameRule.ePlayerIndex); } //恢复探索区域 yield return(new WaitUntil(BKTools.ISCWithArgu(KEYExCont))); //清理战斗人员 foreach (var chess in Main.Inst.dic_chess) { chess.Value.container.removeChess(); chess.Value.gameObject.SetActive(false); } // 召回探索骑士 Main.Inst.moving_chess = Main.Inst.now_turnphase.setChess(1001, ePlayer.Player1, Main.Inst.chess_grids[Main.Inst.lv_ctrl.ExplorePos], section.my_argu_AI_ID, false, GameRule.PlayerChessEventID, 0); Main.Inst.b_moving_chess = true; //开放活动区域 foreach (var item in Main.Inst.lv_ctrl.AreaExplored) { //驱散迷雾 BKTools.FogLift(item, 1, GameRule.Default_PvE_Fog_Lift_Range, GameRule.ePlayerIndex); } yield return(new WaitUntil(BKTools.ISCWithArgu(KEYExCont))); // 切换阶段 —— 被清理后自动接上探索 if (Main.Inst.now_turnphase.nextPhaseDefault.gameObject.scene.name != null) { Destroy(Main.Inst.now_turnphase.nextPhaseDefault.gameObject); } Main.Inst.now_turnphase.nextPhaseDefault = Main.Inst.explore_phase; analya_finish = true; Main.Inst.redDancer(KEYExCont); }
//修改全局开关和变量 void LogicModifySwitch(DramaSection section) { switch (section.op_boolean) { case eDOType_boolean.与: Main.Inst.lv_ctrl.global_switch[section.variable_index] = Main.Inst.lv_ctrl.global_switch[section.variable_index] && section.v_boolean; break; case eDOType_boolean.或: Main.Inst.lv_ctrl.global_switch[section.variable_index] = Main.Inst.lv_ctrl.global_switch[section.variable_index] || section.v_boolean; break; case eDOType_boolean.赋值: Main.Inst.lv_ctrl.global_switch[section.variable_index] = section.v_boolean; break; default: break; } analya_finish = true; }
//探索开始 IEnumerator corExploreStart(DramaSection section) { //开房活动区域 foreach (var item in Main.Inst.lv_ctrl.map_data.list_area_grid[section.area_id].list) { //驱散迷雾 BKTools.FogLift(item, 1, GameRule.Default_PvE_Fog_Lift_Range, GameRule.ePlayerIndex); //记录已探索 Main.Inst.lv_ctrl.AreaExplored.Add(item); } //召唤王 int temp_lord_id = 1001; ePlayer belong = section.belong; ChessContainer grid = Main.Inst.chess_grids[section.to_grid_id]; //创建棋子 Main.Inst.moving_chess = Main.Inst.now_turnphase.setChess(temp_lord_id, ePlayer.Player1, grid, section.my_argu_AI_ID, false, GameRule.PlayerChessEventID, 0); //设置镜头跟踪方式 Camera.main.GetComponent <ExBaCamera>().SetFollowTarget(Main.Inst.moving_chess); analya_finish = true; yield return(null); }
IEnumerator corBattleStart(DramaSection section) { Main.Inst.addDancer(KEY_corBattleStart); Main.Inst.lv_ctrl.now_turn = 0; // 重新计算回合数 //存储探索进度 Main.Inst.lv_ctrl.ExplorePos = Main.Inst.moving_chess.container.number; // 遮盖已开放区域 foreach (var item in Main.Inst.lv_ctrl.AreaExplored) { BKTools.FogCover(item, 1, GameRule.ePlayerIndex); } yield return(new WaitUntil(BKTools.ISCWithArgu(KEY_corBattleStart))); //隐藏探索骑士 //Main.Inst.moving_chess.container.removeChess(); //Main.Inst.moving_chess.gameObject.SetActive(false); // 开放战斗区域 foreach (var item in Main.Inst.lv_ctrl.map_data.list_area_grid[section.area_id].list) { Main.Inst.lv_ctrl.AreaBattle.Add(item); BKTools.FogLift(item, 1, GameRule.Default_PvE_Fog_Lift_Range, GameRule.ePlayerIndex); } // 召唤玩家默认阵容 //TODO 从牌组设置读取 Main.Inst.moving_chess.container.removeChess(); Main.Inst.chess_grids[section.to_grid_id].appendChess(Main.Inst.moving_chess); //setChessPlayer(1001, ePlayer.Player1, Main.Inst.chess_grids[section.to_grid_id]); Debug.Log("草拟吗,到底能不能玩断点啦!"); // 切换阶段 (不能使用插入,不然会使得当前不止一个阶段对象响应事件——已经造成过召唤剧情成功生成未执行时被认为已经被杀光的错误 AppendPhase(Instantiate(BKTools.LoadAsset <GameObject>(eResBundle.Prefabs, PrefabPath.PlayerDrawPhase), Main.Inst.NodePhaseControler.transform).GetComponent <TurnPhase>()); Main.Inst.redDancer(KEY_corBattleStart); //召唤怪物阵容 - 由原来的事件机制完成 //设置镜头跟踪方式 Camera.main.GetComponent <ExBaCamera>().SetFollowTarget(section.area_id); analya_finish = true; }
// void OnEnable() // { // init (true); // } // public void init(){ // init (false); // } // public void init(bool force_init){ // if (isInit && !force_init) // return; // instance = this; // } //剧情项 简介 public static string Drama2String(DramaSection section) { string res = ""; string chess_name = "未选定"; string skill_name = "未选定"; string variable_name = "未选定"; if (Data.Inst.card_data.ContainsKey(section.chess_id)) { chess_name = Data.Inst.card_data [section.chess_id].name; } if (Data.Inst.skill_data.ContainsKey(section.skill_id)) { skill_name = Data.Inst.skill_data [section.skill_id].name; } switch (section.my_type) { case eDramaOperationType.ShouKan: res += "召唤 “" + section.chess_id + ":" + chess_name + "” 于 " + section.to_grid_id + " 格子"; break; case eDramaOperationType.Move: res += "移动 “" + section.chess_id + ":" + chess_name + "” 至 " + section.to_grid_id + " 格子"; break; case eDramaOperationType.Skill: res += "由 “" + section.chess_id + ":" + chess_name + "” 使用 “" + section.skill_id + "号技能" + skill_name + " ”"; break; case eDramaOperationType.Speak: res += "由 “" + section.chess_id + ":" + chess_name + "” 说 “" + section.manfenzuowen + " ”"; break; case eDramaOperationType.Variable: variable_name = section.variable_index + " - " + MapEditor.my_map_data.global_variable[section.variable_index]; switch (section.op_int) { case eDOType_int.赋值: res = variable_name + " = " + section.v_int; break; case eDOType_int.加: res = variable_name + " + " + section.v_int; break; case eDOType_int.减: res = variable_name + " - " + section.v_int; break; case eDOType_int.乘: res = variable_name + " * " + section.v_int; break; case eDOType_int.除: res = variable_name + " / " + section.v_int; break; case eDOType_int.平方: res = variable_name + " ^ " + section.v_int; break; default: break; } break; case eDramaOperationType.Switch: variable_name = MapEditor.my_map_data.global_switch[section.variable_index]; switch (section.op_boolean) { case eDOType_boolean.赋值: res = variable_name + " = " + section.v_boolean; break; case eDOType_boolean.与: res = variable_name + " && " + section.v_boolean; break; case eDOType_boolean.或: res = variable_name + " || " + section.v_boolean; break; } break; case eDramaOperationType.FogOn: res = section.to_grid_id + "号格子,产生迷雾 " + section.v_int + "格"; break; case eDramaOperationType.FogOff: res = section.to_grid_id + "号格子,驱散迷雾 " + section.v_int + "格"; break; case eDramaOperationType.Win: res = "玩家获得胜利"; break; case eDramaOperationType.Lose: res = "过关失败"; break; case eDramaOperationType.ExploreStart: res = "游戏开始,解锁 " + section.area_id + " 号区域,在" + section.to_grid_id + "召唤默认骑士"; break; case eDramaOperationType.ShowArea: res = "开放区域 " + section.area_id + " 号区域"; break; case eDramaOperationType.HideArea: res = "封锁区域 " + section.area_id + " 号区域"; break; case eDramaOperationType.BattleStart: res = "在区域" + section.area_id + "中展开战斗,起点为" + section.to_grid_id; break; case eDramaOperationType.ExplorContinue: res = "恢复探索模式"; break; default: break; } return(res); }
public void Remove(DramaSection _section) { section_list.Remove(_section); }
void PerformSpeak(DramaSection section) { UILevelMain.Inst.ShowDialoge(section.manfenzuowen, DialogeContinueCallback); }
IEnumerator corSkill(DramaSection script) { yield return(null); }
void AnalysisSection(DramaSection section) { analya_finish = false; switch (section.my_type) { case eDramaOperationType.Move: break; case eDramaOperationType.ShouKan: StartCoroutine(corShoukan(section)); break; case eDramaOperationType.Speak: PerformSpeak(section); break; case eDramaOperationType.Skill: break; case eDramaOperationType.Switch: LogicModifySwitch(section); break; case eDramaOperationType.Variable: LogicModifyVariable(section); break; case eDramaOperationType.FogOn: StartCoroutine(corFogCover(section)); break; case eDramaOperationType.FogOff: StartCoroutine(corFogLift(section)); break; case eDramaOperationType.Win: Main.Inst.GameOver(ePlayer.Player2); break; case eDramaOperationType.Lose: break; case eDramaOperationType.ExploreStart: StartCoroutine(corExploreStart(section)); break; case eDramaOperationType.BattleStart: StartCoroutine(corBattleStart(section)); break; case eDramaOperationType.ShowArea: StartCoroutine(corShowArea(section)); break; case eDramaOperationType.HideArea: StartCoroutine(corHideArea(section)); break; case eDramaOperationType.ExplorContinue: StartCoroutine(corExploreContinue(section)); break; default: Debug.LogError("剧本数据出错"); break; } }
//编辑窗 public static void OnSectionGUI(DramaSection section) { // section.my_type = (eDramaOperationType)EditorGUILayout.EnumPopup ("类型",section.my_type); // string res = ""; // string chess_name = "未选定"; // string skill_name = "未选定"; switch (section.my_type) { case eDramaOperationType.ShouKan: // if(Data.Inst.card_data.ContainsKey(section.chess_id)) // chess_name = Data.Inst.card_data [section.chess_id].name; //这个 // my_argu_AI_ID = (eAI_Type)EditorGUILayout.EnumPopup ("AI",my_argu_AI_ID); EditorGUILayout.LabelField("召唤信息在单位中编辑"); break; case eDramaOperationType.Move: // if (!Data.Inst.card_data.ContainsKey (section.chess_id)) { // section.chess_id = Data.Inst.card_data.First().Key; //TODO 很神奇的,加了Linq后能够是用first,理论上应该从数据源避免,但 // } // // chess_name = Data.Inst.card_data [section.chess_id].name; // section.chess_id = EditorGUILayout.IntPopup( // section.chess_id, // (from card in Data.Inst.card_data select card.Value.name).ToArray(), // (from card in Data.Inst.card_data select card.Key).ToArray() // ); // res += "移动 “" + section.chess_id + ":" + chess_name + "” 至 " + section.to_grid_id + " 格子"; //全骑士名字选单(因为存在前一个事件召唤的骑士,加条件判断) EditorGUILayout.BeginHorizontal(); gui_chess_id("将"); gui_grid_select("移动至"); EditorGUILayout.EndHorizontal(); //目标格子 break; case eDramaOperationType.Skill: gui_chess_id("使用者"); gui_skill_id("使用技能"); break; case eDramaOperationType.Speak: gui_chess_id("发言者"); gui_speak("说"); break; case eDramaOperationType.Variable: EditorGUILayout.BeginHorizontal(); section.variable_index = EditorGUILayout.Popup(section.variable_index, MapEditor.my_map_data.global_variable); section.op_int = (eDOType_int)EditorGUILayout.EnumPopup(section.op_int); section.v_int = EditorGUILayout.IntField(section.v_int); EditorGUILayout.EndHorizontal(); break; case eDramaOperationType.FogOn: gui_grid_select("笼罩格子"); section.v_int = EditorGUILayout.IntField(section.v_int); EditorGUILayout.LabelField("圈迷雾"); break; case eDramaOperationType.FogOff: gui_grid_select("驱散格子"); section.v_int = EditorGUILayout.IntField(section.v_int); EditorGUILayout.LabelField("圈迷雾"); break; case eDramaOperationType.Switch: EditorGUILayout.BeginHorizontal(); section.variable_index = EditorGUILayout.Popup(section.variable_index, MapEditor.my_map_data.global_switch); section.op_boolean = (eDOType_boolean)EditorGUILayout.EnumPopup(section.op_boolean); section.v_boolean = EditorGUILayout.Toggle(section.v_boolean); EditorGUILayout.EndHorizontal(); break; case eDramaOperationType.ExploreStart: gui_grid_select("起点格子"); section.area_id = EditorGUILayout.Popup("解锁区域", section.area_id, AreaList.arr_string_id); GUILayout.Label("//TODO要转用卡组配置中的信息"); section.chess_id = EditorGUILayout.IntPopup("默认骑士", section.chess_id, Data.arr_Chess_name, Data.arr_Chess_key); break; case eDramaOperationType.ShowArea: section.area_id = EditorGUILayout.Popup("开放区域", section.area_id, AreaList.arr_string_id); break; case eDramaOperationType.HideArea: section.area_id = EditorGUILayout.Popup("封锁区域", section.area_id, AreaList.arr_string_id); break; case eDramaOperationType.BattleStart: section.area_id = EditorGUILayout.Popup("战斗区域", section.area_id, AreaList.arr_string_id); gui_grid_select("战斗起点"); break; case eDramaOperationType.ExplorContinue: GUILayout.Label("你有病啊,继续探索不需要修改。"); break; default: break; } }