//修改全局开关和变量
        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;
        }
Example #2
0
    /// <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);
        }
Example #6
0
 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);
            }
        }
Example #9
0
 //返回是否结束
 public DramaSection getNext()
 {
     //用新的判断,因为数组没法删啊
     if (section_list.Count <= 0)
     {
         return(null);
     }
     else
     {
         DramaSection res = section_list[0];
         section_list.RemoveAt(0);
         //返回的剧本在PlotShowPhase中分析执行,请务必添加演员等待
         return(res);
     }
 }
Example #10
0
    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);
    }
Example #11
0
    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);
        }
Example #20
0
 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;
            }
        }