internal Context() { mImplementPtr = ConversationAPI.CreateContext(); IntPtr global = ConversationAPI.GetContextGlobalSave(ImplementPtr); if (global != IntPtr.Zero) { mGlobalSave = new Save(global); } IntPtr player = ConversationAPI.GetContextPlayerSave(ImplementPtr); if (player != IntPtr.Zero) { mPlayerSave = new Save(player); } // 长期持有自己的delegate防止被gc mFunctionHandler = new FunctionHandler(OnFunctoinCall); mProcessHandler = new FunctionHandler(OnProcessCall); mFunctionQuery = new FunctionQuery(OnFunctoinQuery); mProcessQuery = new FunctionQuery(OnProcessQuery); ConversationAPI.SetFunctionHandler(ImplementPtr, mFunctionHandler); ConversationAPI.SetProcessHandler(ImplementPtr, mProcessHandler); ConversationAPI.SetFunctionQuery(ImplementPtr, mFunctionQuery); ConversationAPI.SetProcessQuery(ImplementPtr, mProcessQuery); }
public float GetParamAsFloat(int index) { if (index >= 0 && index < ParamCount) { return(ConversationAPI.GetFunctionStackParamAsFloat(ImplementPtr, index)); } else { return(0.0f); } }
public bool GetParamAsBool(int index) { if (index >= 0 && index < ParamCount) { return(ConversationAPI.GetFunctionStackParamAsBool(ImplementPtr, index)); } else { return(false); } }
internal FunctionStack(IntPtr implPtr) { mImplementPtr = implPtr; mReturnType = ConversationAPI.GetFunctionStackPreferReturnType(ImplementPtr); mMaxParamType = ConversationAPI.GetFunctionStackMaxParamType(ImplementPtr); mParamCount = ConversationAPI.GetFunctionStackParamCount(ImplementPtr); for (int i = 0; i < ParamCount; i++) { mParamTypes.Add(ConversationAPI.GetFunctionStackParamTypeByIndex(ImplementPtr, i)); } }
bool HasValue(string name) { if (name == null || name == "") { return(false); } if (mValueTable.ContainsKey(name)) { return(true); } return(ConversationAPI.SaveHasValue(ImplementPtr, name)); }
private bool disposedValue = false; // 要检测冗余调用 protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: 释放托管状态(托管对象)。 } if (mImplementPtr != IntPtr.Zero) { ConversationAPI.ReleaseCustomSave(mImplementPtr); mImplementPtr = IntPtr.Zero; } disposedValue = true; } }
void CopyFrom(SaveBinary binary) { foreach (ValueBinary vb in binary.Values) { if (vb.Type == TValue.Boolean) { ConversationAPI.SetSaveValue(ImplementPtr, vb.Name, vb.bValue); } else if (vb.Type == TValue.Int) { ConversationAPI.SetSaveValue(ImplementPtr, vb.Name, vb.iValue); } else if (vb.Type == TValue.Float) { ConversationAPI.SetSaveValue(ImplementPtr, vb.Name, vb.fValue); } } }
private bool disposedValue = false; // 要检测冗余调用 protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: 释放托管状态(托管对象)。 } // TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。 // TODO: 将大型字段设置为 null。 if (mImplementPtr != IntPtr.Zero) { ConversationAPI.ReleaseConversation(mImplementPtr); mImplementPtr = IntPtr.Zero; questions.Clear(); } disposedValue = true; } }
internal Question(IntPtr implPtr) { mImplementPtr = implPtr; mName = ConversationAPI.GetQuestionName(Implement); mText = ConversationAPI.GetQuestionText(Implement); int answerCount = ConversationAPI.GetQuestionAnswerCount(Implement); mAnswerList = new Answer[answerCount]; for (int i = 0; i < answerCount; i++) { IntPtr answerPtr = ConversationAPI.GetQuestionAnswerByIndex(mImplementPtr, i); if (answerPtr != IntPtr.Zero) { mAnswerList[i] = new Answer(answerPtr); } else { mAnswerList[i] = null; } } }
public Question SelectNextConversationBranch(Answer selectedAnswer) { IntPtr questionPtr = ConversationAPI.SelectNextConversationBranch(mImplementPtr, selectedAnswer.ImplementPtr); return(GetQuestion(questionPtr)); }
public Question StartConversation(Context context) { IntPtr questionPtr = ConversationAPI.StartConversation(context.ImplementPtr, ImplementPtr); return(GetQuestion(questionPtr)); }
static public Conversation CreateFromXML(string filePath) { IntPtr convPtr = ConversationAPI.CreateConversationFromXML(filePath); return((convPtr != IntPtr.Zero) ? (new Conversation(convPtr)) : null); }
internal Conversation(IntPtr implPtr) { mImplementPtr = implPtr; save = new Save(ConversationAPI.GetConversationSave(ImplementPtr)); }
internal Answer(IntPtr implPtr) { mImplementPtr = implPtr; mID = ConversationAPI.GetAnswerID(mImplementPtr); mText = ConversationAPI.GetAnswerText(mImplementPtr); }
public string GetValueNameByIndex(int index) { string name = ConversationAPI.GetSaveValueNameByIndex(ImplementPtr, index); return(name); }
public Save() { mImplementPtr = ConversationAPI.CreateCustomSave(); }