예제 #1
0
 protected override void Load(ScriptableData.FunctionData funcData)
 {
     ScriptableData.CallData callData = funcData.Call;
     if (null != callData)
     {
         foreach (ScriptableData.ISyntaxComponent statement in funcData.Statements)
         {
             ScriptableData.CallData stCall = statement as ScriptableData.CallData;
             if (null != stCall)
             {
                 string id = stCall.GetId();
                 if (id == "stateimpact")
                 {
                     if (stCall.GetParamNum() > 1)
                     {
                         m_Impacts.Add(int.Parse(stCall.GetParamId(1)));
                     }
                 }
             }
         }
     }
 }
예제 #2
0
        protected override void Load(ScriptableData.FunctionData funcData)
        {
            ScriptableData.CallData callData = funcData.Call;
            if (null != callData)
            {
                Load(callData);

                foreach (ScriptableData.ISyntaxComponent statement in funcData.Statements)
                {
                    ScriptableData.CallData stCall = statement as ScriptableData.CallData;
                    if (null == stCall || stCall.GetParamNum() <= 0)
                    {
                        continue;
                    }
                    string id = stCall.GetId();
                    if (id == "stateimpact")
                    {
                        LoadStateImpactConfig(stCall);
                    }
                }
            }
        }
예제 #3
0
        private void RefreshTrigers(ScriptableData.FunctionData sectionData, int skillId)
        {
            m_LoadedTrigers.Clear();
            for (int i = 0; i < sectionData.Statements.Count; i++)
            {
                ISkillTriger triger = SkillTrigerManager.Instance.CreateTriger(sectionData.Statements[i]);
                if (null != triger)
                {
                    m_LoadedTrigers.Add(triger);
                }
            }

            /*
             * foreach (ScriptableData.ISyntaxComponent data in sectionData.Statements) {
             * ISkillTriger triger = SkillTrigerManager.Instance.CreateTriger(data);
             * if (null != triger) {
             *  m_LoadedTrigers.Add(triger);
             *
             *  //LogSystem.Debug("AddTriger:{0}", triger.GetType().Name);
             * }
             * }*/
        }
예제 #4
0
        protected override void Load(ScriptableData.FunctionData funcData)
        {
            ScriptableData.CallData callData = funcData.Call;
            if (null == callData)
            {
                return;
            }
            int num = callData.GetParamNum();

            if (num >= 6)
            {
                m_StartTime           = long.Parse(callData.GetParamId(0));
                m_RemainTime          = long.Parse(callData.GetParamId(1));
                m_IsClearWhenFinish   = bool.Parse(callData.GetParamId(2));
                m_IsAlwaysEnterDamage = bool.Parse(callData.GetParamId(3));
                m_DamageInterval      = long.Parse(callData.GetParamId(4));
                m_MaxDamageTimes      = int.Parse(callData.GetParamId(5));
            }
            //碰撞体数据
            m_ColliderInfo = new ColliderTriggerInfo();
            m_ColliderInfo.Load(funcData.Statements);
        }
예제 #5
0
        protected override void Load(ScriptableData.StatementData statementData)
        {
            Load(statementData.First);
            ScriptableData.FunctionData functionData = statementData.Second;
            if (null != functionData && functionData.GetId() == "else")
            {
                for (int i = 0; i < functionData.Statements.Count; i++)
                {
                    ICommand cmd = CommandManager.Instance.CreateCommand(functionData.Statements[i]);
                    if (null != cmd)
                    {
                        m_LoadedElseCommands.Add(cmd);
                    }
                }

                /*
                 * foreach (ScriptableData.ISyntaxComponent statement in functionData.Statements) {
                 * ICommand cmd = StoryCommandManager.Instance.CreateCommand(statement);
                 * if (null != cmd)
                 *  m_LoadedElseCommands.Add(cmd);
                 * }*/
            }
        }
        protected override void Load(ScriptableData.FunctionData funcData)
        {
            ScriptableData.CallData callData = funcData.Call;
            if (callData != null)
            {
                Load(callData);
                for (int i = 0; i < funcData.Statements.Count; i++)
                {
                    ScriptableData.CallData stCall = funcData.Statements[i] as ScriptableData.CallData;
                    if (stCall == null)
                    {
                        continue;
                    }
                    if (stCall.GetId() == "ownerlasttouchpos")
                    {
                        LoadOwnerLastTouchPosConfig(stCall);
                    }
                    else if (stCall.GetId() == "ownerrandompos")
                    {
                        LoadOwnerRandomPosConfig(stCall);
                    }
                }

                /*
                 * foreach (ScriptableData.ISyntaxComponent statement in funcData.Statements) {
                 * ScriptableData.CallData stCall = statement as ScriptableData.CallData;
                 * if (stCall == null) {
                 *  continue;
                 * }
                 * if (stCall.GetId() == "ownerlasttouchpos") {
                 *  LoadOwnerLastTouchPosConfig(stCall);
                 * } else if (stCall.GetId() == "ownerrandompos") {
                 *  LoadOwnerRandomPosConfig(stCall);
                 * }
                 * }*/
            }
        }
예제 #7
0
 protected override void Load(ScriptableData.FunctionData funcData)
 {
     ScriptableData.CallData callData = funcData.Call;
     if (null == callData)
     {
         return;
     }
     Load(callData);
     for (int i = 0; i < funcData.Statements.Count; i++)
     {
         ScriptableData.CallData stCall = funcData.Statements[i] as ScriptableData.CallData;
         if (null == stCall)
         {
             continue;
         }
         if (stCall.GetId() == "sendmessage")
         {
             if (stCall.GetParamNum() >= 1)
             {
                 m_SkillGoOnMessage = stCall.GetParamId(0);
             }
         }
     }
 }
 public bool Init(ScriptableData.ScriptableDataInfo config)
 {
     bool ret = false;
     ScriptableData.FunctionData story = config.First;
     if (story != null && (story.GetId() == "story" || story.GetId() == "script"))
     {
         ret = true;
         //参数
         ScriptableData.CallData callData = story.Call;
         if (callData != null && callData.HaveParam())
         {
             //第一个参数是剧情的id
             m_iStoryId = int.Parse(callData.GetParamId(0));
         }
         foreach (var info in story.Statements)
         {
             if (info.GetId() == "local")
             {
                 ScriptableData.FunctionData sectionData = info as ScriptableData.FunctionData;
                 if (null != sectionData)
                 {
                     foreach (ScriptableData.ISyntaxComponent def in sectionData.Statements)
                     {
                         ScriptableData.CallData defData = def as ScriptableData.CallData;
                         if (null != defData && defData.HaveId() && defData.HaveParam())
                         {
                             string id = defData.GetId();
                             if (id.StartsWith("@") && !id.StartsWith("@@"))
                             {
                                 StoryValue val = new StoryValue();
                                 val.InitFromDsl(defData.GetParam(0));
                                 if (!m_dicLocalVariables.ContainsKey(id))
                                 {
                                     m_dicLocalVariables.Add(id, val.Value);
                                 }
                                 else
                                 {
                                     m_dicLocalVariables[id] = val.Value;
                                 }
                             }
                         }
                     }
                 }
                 else
                 {
                     Debug.LogError("剧情" + m_iStoryId + "DSL语法,必须是个函数");
                 }
             }
             else if (info.GetId() == "onmessage")
             {
                 ScriptableData.FunctionData sectionData = info as ScriptableData.FunctionData;
                 if (null != sectionData)
                 {
                     StoryMessageHandler handler = new StoryMessageHandler();
                     handler.Load(sectionData);
                     m_listMessageHandlers.Add(handler);
                 }
                 else
                 {
                     Debug.LogError("剧情" + m_iStoryId + "DSL语法,必须是个函数");
                 }
             }
             else
             {
                 Debug.LogError("StoryInstance::Init,不知道DSL语法部分:" + info.GetId());
             }
         }
     }
     else
     {
         Debug.LogError("StoryInstance::Init,不是一个DSL语法");
     }
     return ret;
 }
        private void Load(ScriptableData.ScriptableDataFile dataFile, int sceneId)
        {
            lock (m_Lock)
            {
#if false
                for (int i = 0; i < dataFile.ScriptableDatas.Count; i++)
                {
                    if (dataFile.ScriptableDatas[i].GetId() == "story" || dataFile.ScriptableDatas[i].GetId() == "script")
                    {
                        ScriptableData.FunctionData funcData = dataFile.ScriptableDatas[i].First;
                        if (null != funcData)
                        {
                            ScriptableData.CallData callData = funcData.Call;
                            if (null != callData && callData.HaveParam())
                            {
                                int storyId = int.Parse(callData.GetParamId(0));
                                int id      = GenId(storyId, sceneId);
                                if (!m_StoryInstances.ContainsKey(id))
                                {
                                    StoryInstance instance = new StoryInstance();
                                    instance.Init(dataFile.ScriptableDatas[i]);
                                    m_StoryInstances.Add(id, instance);

                                    LogSystem.Debug("ParseStory {0}", id);
                                }
                                else
                                {
                                    //repeated story config.
                                }
                            }
                        }
                    }
                }
#else
                int id = GenId(1, sceneId);
                if (!m_StoryInstances.ContainsKey(id))
                {
                    StoryInstance instance = new StoryInstance();
                    instance.Init(dataFile);
                    m_StoryInstances.Add(id, instance);
                }
#endif

                /*
                 * foreach (ScriptableData.ScriptableDataInfo info in dataFile.ScriptableDatas) {
                 * if (info.GetId() == "story" || info.GetId() == "script") {
                 *  ScriptableData.FunctionData funcData = info.First;
                 *  if (null != funcData) {
                 *    ScriptableData.CallData callData = funcData.Call;
                 *    if (null != callData && callData.HaveParam()) {
                 *      int storyId = int.Parse(callData.GetParamId(0));
                 *      int id = GenId(storyId, sceneId);
                 *      if (!m_StoryInstances.ContainsKey(id)) {
                 *        StoryInstance instance = new StoryInstance();
                 *        instance.Init(info);
                 *        m_StoryInstances.Add(id, instance);
                 *
                 *        LogSystem.Debug("ParseStory {0}", id);
                 *      } else {
                 *        //repeated story config.
                 *      }
                 *    }
                 *  }
                 * }
                 * }*/
            }
        }
예제 #10
0
 public bool Init(ScriptableData.ScriptableDataInfo config)
 {
     bool ret = false;
     ScriptableData.FunctionData skill = config.First;
     if (null != skill && (skill.GetId() == "skill" || skill.GetId() == "script"))
     {
         ret = true;
         ScriptableData.CallData callData = skill.Call;
         if (null != callData && callData.HaveParam())
         {
             m_Id = int.Parse(callData.GetParamId(0));
         }
         for (int i = 0; i < skill.Statements.Count; i++)
         {
             if (skill.Statements[i].GetId() == "local")
             {
                 ScriptableData.FunctionData sectionData = skill.Statements[i] as ScriptableData.FunctionData;
                 if (null != sectionData)
                 {
                     for (int j = 0; j < sectionData.Statements.Count; j++)
                     {
                         ScriptableData.CallData defData = sectionData.Statements[j] as ScriptableData.CallData;
                         if (null != defData && defData.HaveId() && defData.HaveParam())
                         {
                             string id = defData.GetId();
                             if (id.StartsWith("@") && !id.StartsWith("@@"))
                             {
                                 SkillValue val = new SkillValue();
                                 val.InitFromDsl(defData.GetParam(0));
                                 if (!m_PreInitedLocalVariables.ContainsKey(id))
                                 {
                                     m_PreInitedLocalVariables.Add(id, val.Value);
                                 }
                                 else
                                 {
                                     m_PreInitedLocalVariables[id] = val.Value;
                                 }
                             }
                         }
                     }
                 }
                 else
                 {
                     LogUtil.Error("Story {0} DSL, local must be a function !", m_Id);
                 }
             }
             else if (skill.Statements[i].GetId() == "onmessage")
             {
                 ScriptableData.FunctionData sectionData = skill.Statements[i] as ScriptableData.FunctionData;
                 if (null != sectionData)
                 {
                     MessageHandler handler = new MessageHandler();
                     handler.Load(sectionData);
                     string msgId = handler.MessageId;
                     if (!m_MessageQueues.ContainsKey(msgId))
                     {
                         m_MessageHandlers.Add(handler);
                         m_MessageQueues.Add(msgId, new Queue<MessageInfo>());
                     }
                     else
                     {
                         LogUtil.Error("Story {0} DSL, onmessage {1} duplicate, discard it !", m_Id, msgId);
                     }
                 }
                 else
                 {
                     LogUtil.Error("Story {0} DSL, onmessage must be a function !", m_Id);
                 }
             }
             else
             {
                 LogUtil.Error("Instance::Init, unknown part {0}", skill.Statements[i].GetId());
             }
         }
     }
     else
     {
         LogUtil.Error("Instance::Init, isn't story DSL");
     }
     //LogSystem.Debug("Instance.Init message handler num:{0} {1}", m_MessageHandlers.Count, ret);
     return ret;
 }
예제 #11
0
 protected virtual void Load(ScriptableData.FunctionData funcData)
 {
 }
예제 #12
0
        protected override void Load(ScriptableData.FunctionData funcData)
        {
            ScriptableData.CallData callData = funcData.Call;
            if (null != callData)
            {
                Load(callData);
                for (int i = 0; i < funcData.Statements.Count; i++)
                {
                    ScriptableData.CallData stCall = funcData.Statements[i] as ScriptableData.CallData;
                    if (null == stCall)
                    {
                        continue;
                    }
                    string    id        = stCall.GetId();
                    Condition condition = null;
                    if (id == "targetcondition")
                    {
                        condition = new TargetCondition();
                    }
                    else if (id == "statecondition")
                    {
                        condition = new StateCondition();
                    }
                    else if (id == "flycondition")
                    {
                        condition = new HeightCondition(true);
                    }
                    else if (id == "groundcondition")
                    {
                        condition = new HeightCondition(false);
                    }
                    if (condition != null)
                    {
                        m_IsHaveCondition = true;
                        condition.Load(stCall);
                        m_Conditions.Add(condition);
                    }
                }

                /*
                 * foreach (ScriptableData.ISyntaxComponent statement in funcData.Statements) {
                 * ScriptableData.CallData stCall = statement as ScriptableData.CallData;
                 * if (null == stCall) {
                 *  continue;
                 * }
                 * string id = stCall.GetId();
                 * Condition condition = null;
                 * if (id == "targetcondition") {
                 *  condition = new TargetCondition();
                 * } else if (id == "statecondition") {
                 *  condition = new StateCondition();
                 * } else if (id == "flycondition") {
                 *  condition = new HeightCondition(true);
                 * } else if (id == "groundcondition") {
                 *  condition = new HeightCondition(false);
                 * }
                 * if (condition != null) {
                 *  m_IsHaveCondition = true;
                 *  condition.Load(stCall);
                 *  m_Conditions.Add(condition);
                 * }
                 * }*/
            }
        }
예제 #13
0
        public bool Init(ScriptableData.ScriptableDataInfo config)
        {
            bool ret = false;

            ScriptableData.FunctionData skill = config.First;
            if (null != skill && skill.GetId() == "skill")
            {
                ret = true;
                ScriptableData.CallData callData = skill.Call;
                if (null != callData && callData.HaveParam())
                {
                    m_SkillId = int.Parse(callData.GetParamId(0));
                }

                for (int i = 0; i < skill.Statements.Count; i++)
                {
                    if (skill.Statements[i].GetId() == "section")
                    {
                        ScriptableData.FunctionData sectionData = skill.Statements[i] as ScriptableData.FunctionData;
                        if (null != sectionData)
                        {
                            SkillSection section = new SkillSection();
                            section.Load(sectionData, m_SkillId);
                            m_Sections.Add(section);
                        }
                        else
                        {
                            LogSystem.Error("Skill {0} DSL, section must be a function !", m_SkillId);
                        }
                    }
                    else if (skill.Statements[i].GetId() == "onmessage")
                    {
                        ScriptableData.FunctionData sectionData = skill.Statements[i] as ScriptableData.FunctionData;
                        if (null != sectionData)
                        {
                            SkillMessageHandler handler = new SkillMessageHandler();
                            handler.Load(sectionData, m_SkillId);
                            m_MessageHandlers.Add(handler);
                        }
                        else
                        {
                            LogSystem.Error("Skill {0} DSL, onmessage must be a function !", m_SkillId);
                        }
                    }
                    else if (skill.Statements[i].GetId() == "onstop")
                    {
                        ScriptableData.FunctionData sectionData = skill.Statements[i] as ScriptableData.FunctionData;
                        if (null != sectionData)
                        {
                            m_StopSection = new SkillMessageHandler();
                            m_StopSection.Load(sectionData, m_SkillId);
                        }
                        else
                        {
                            LogSystem.Error("Skill {0} DSL, onstop must be a function !", m_SkillId);
                        }
                    }
                    else if (skill.Statements[i].GetId() == "oninterrupt")
                    {
                        ScriptableData.FunctionData sectionData = skill.Statements[i] as ScriptableData.FunctionData;
                        if (null != sectionData)
                        {
                            m_InterruptSection = new SkillMessageHandler();
                            m_InterruptSection.Load(sectionData, m_SkillId);
                        }
                        else
                        {
                            LogSystem.Error("Skill {0} DSL, oninterrupt must be a function !", m_SkillId);
                        }
                    }
                    else
                    {
                        LogSystem.Error("SkillInstance::Init, unknown part {0}", skill.Statements[i].GetId());
                    }
                }

                /*
                 * foreach (ScriptableData.ISyntaxComponent info in skill.Statements) {
                 * if (info.GetId() == "section") {
                 *  ScriptableData.FunctionData sectionData = info as ScriptableData.FunctionData;
                 *  if (null != sectionData) {
                 *    SkillSection section = new SkillSection();
                 *    section.Load(sectionData, m_SkillId);
                 *    m_Sections.Add(section);
                 *  } else {
                 *    LogSystem.Error("Skill {0} DSL, section must be a function !", m_SkillId);
                 *  }
                 * } else if (info.GetId() == "onmessage") {
                 *  ScriptableData.FunctionData sectionData = info as ScriptableData.FunctionData;
                 *  if (null != sectionData) {
                 *    SkillMessageHandler handler = new SkillMessageHandler();
                 *    handler.Load(sectionData, m_SkillId);
                 *    m_MessageHandlers.Add(handler);
                 *  } else {
                 *    LogSystem.Error("Skill {0} DSL, onmessage must be a function !", m_SkillId);
                 *  }
                 * } else if (info.GetId() == "onstop") {
                 *  ScriptableData.FunctionData sectionData = info as ScriptableData.FunctionData;
                 *  if (null != sectionData) {
                 *    m_StopSection = new SkillMessageHandler();
                 *    m_StopSection.Load(sectionData, m_SkillId);
                 *  } else {
                 *    LogSystem.Error("Skill {0} DSL, onstop must be a function !", m_SkillId);
                 *  }
                 * } else if (info.GetId() == "oninterrupt") {
                 *  ScriptableData.FunctionData sectionData = info as ScriptableData.FunctionData;
                 *  if (null != sectionData) {
                 *    m_InterruptSection = new SkillMessageHandler();
                 *    m_InterruptSection.Load(sectionData, m_SkillId);
                 *  } else {
                 *    LogSystem.Error("Skill {0} DSL, oninterrupt must be a function !", m_SkillId);
                 *  }
                 * } else {
                 *  LogSystem.Error("SkillInstance::Init, unknown part {0}", info.GetId());
                 * }
                 * }*/
            }
            else
            {
                LogSystem.Error("SkillInstance::Init, isn't skill DSL");
            }
            //LogSystem.Debug("SkillInstance.Init section num:{0} {1}", m_Sections.Count, ret);
            return(ret);
        }