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) { string id = stCall.GetId(); string param = stCall.GetParamId(0); if (id == "speed") { m_Speed = float.Parse(param); if (stCall.GetParamNum() >= 2) { m_IsEffectSkillTime = bool.Parse(stCall.GetParamId(1)); } } else if (id == "weight") { m_Weight = float.Parse(param); } else if (id == "layer") { m_Layer = int.Parse(param); } else if (id == "playmode") { m_PlayMode = int.Parse(param); if (stCall.GetParamNum() >= 2) { m_CrossFadeTime = long.Parse(stCall.GetParamId(1)); } } else if (id == "blendmode") { m_BlendMode = int.Parse(param); } else if (id == "mixingnode") { m_MixingNode = param; } else if (id == "wrapmode") { m_WrapMode = int.Parse(param); } } } } }
public static void writeSyntaxComponent(StringBuilder stream, ISyntaxComponent data, int indent, bool isLastOfStatement) { #if FULL_VERSION ValueData val = data as ValueData; if (null != val) { if (isLastOfStatement) { writeLine(stream, val.ToScriptString() + ";", indent); } else { writeLine(stream, val.ToScriptString(), indent); } } else { CallData call = data as CallData; if (null != call) { if (isLastOfStatement) { writeLine(stream, call.ToScriptString() + ";", indent); } else { writeLine(stream, call.ToScriptString(), indent); } } else { FunctionData function = data as FunctionData; if (null != function) { writeFunctionData(stream, function, indent, isLastOfStatement); } else { StatementData statement = data as StatementData; writeStatementData(stream, statement, indent); } } } #endif }
public override string ToScriptString() { #if FULL_VERSION //与write方法不同,这里输出无缩进单行表示 FunctionData tempData = First; CallData callData = null; callData = tempData.Call; if (null != callData && callData.GetParamClass() == (int)CallData.ParamClassEnum.PARAM_CLASS_TERNARY_OPERATOR) { if (callData.HaveId() && callData.HaveParam() && tempData.HaveStatement()) { string line = string.Format("{0} {1} {2}", callData.GetParam(0).ToScriptString(), callData.GetId(), tempData.GetStatement(0).ToScriptString()); if (Functions.Count == 2) { FunctionData funcData = Functions[1]; if (funcData.HaveId() && funcData.HaveStatement()) { line = string.Format("{0} {1} {2}", line, funcData.GetId(), funcData.GetStatement(0).ToScriptString()); } } return(line); } else { return(""); } } else { StringBuilder stream = new StringBuilder(); int ct = Functions.Count; for (int i = 0; i < ct; ++i) { FunctionData funcData = Functions[i]; stream.Append(funcData.ToScriptString()); } return(stream.ToString()); } #else return(ToString()); #endif }
public static void writeStatementData(StringBuilder stream, StatementData data, int indent) { #if FULL_VERSION FunctionData tempData = data.First; CallData callData = tempData.Call; if (null != callData && callData.GetParamClass() == (int)CallData.ParamClassEnum.PARAM_CLASS_TERNARY_OPERATOR) { if (callData.HaveId() && callData.HaveParam() && tempData.HaveStatement()) { string line = string.Format("{0} {1} {2}", callData.GetParam(0).ToScriptString(), callData.GetId(), tempData.GetStatement(0).ToScriptString()); if (data.Functions.Count == 2) { FunctionData funcData = data.Functions[1]; if (funcData.HaveId() && funcData.HaveStatement()) { line = string.Format("{0} {1} {2}", line, funcData.GetId(), funcData.GetStatement(0).ToScriptString()); } } writeLine(stream, line + ";", indent); } } else { int ct = data.Functions.Count; bool isLastOfStatement = false; if (ct == 0) { isLastOfStatement = true; } for (int i = 0; i < ct; ++i) { if (i == ct - 1) { isLastOfStatement = true; } FunctionData func = data.Functions[i]; writeFunctionData(stream, func, indent, isLastOfStatement); } } #endif }
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) { if (funcData.Statements[i] is ScriptableData.CallData stCall) { string id = stCall.GetId(); if (id == "transform") { if (stCall.GetParamNum() > 0) { if (stCall.GetParam(0) is ScriptableData.CallData param0) { m_Pos = ScriptableDataUtility.CalcVector3(param0); } } if (stCall.GetParamNum() > 1) { if (stCall.GetParam(1) is ScriptableData.CallData param1) { m_Euler = ScriptableDataUtility.CalcEularRotation(param1); } } if (stCall.GetParamNum() > 2) { if (stCall.GetParam(2) is ScriptableData.CallData param2) { m_Scale = ScriptableDataUtility.CalcVector3(param2); } } } } } } }
public void CopyFrom(FunctionData other) { m_Call = other.m_Call; m_Statements = other.m_Statements; m_ExtentClass = other.m_ExtentClass; }
public static void writeFunctionData(StringBuilder stream, FunctionData data, int indent, bool isLastOfStatement) { #if FULL_VERSION string line = ""; if (null != data.Call) { line = data.Call.ToScriptString(); } if (data.HaveStatement()) { if (line.Length > 0) { writeLine(stream, line, indent); } writeLine(stream, "{", indent); ++indent; int ct = data.GetStatementNum(); for (int i = 0; i < ct; ++i) { ISyntaxComponent tempData = data.GetStatement(i); writeSyntaxComponent(stream, tempData, indent, true); } --indent; if (isLastOfStatement) { writeLine(stream, "};", indent); } else { writeLine(stream, "}", indent); } } else if (data.HaveExternScript()) { if (line.Length > 0) { writeLine(stream, line, indent); } writeContent(stream, "{:", indent); stream.Append(data.GetExternScript()); if (isLastOfStatement) { stream.AppendLine(":};"); } else { stream.AppendLine(":}"); } } else { if (isLastOfStatement) { writeLine(stream, line + ";", indent); } else { writeLine(stream, line, indent); } } #endif }
protected virtual void Load(ScriptableData.FunctionData funcData) { }
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); }