Spaces:
Runtime error
Runtime error
| using Photon.Deterministic; | |
| using System; | |
| using Quantum.Collections; | |
| namespace Quantum | |
| { | |
| public unsafe partial struct AIBlackboardComponent | |
| { | |
| public void InitializeBlackboardComponent(Frame frame, AIBlackboard blackboardAsset) | |
| { | |
| Board = blackboardAsset; | |
| var assetEntries = blackboardAsset.Entries; | |
| if (Entries.Ptr != default) | |
| { | |
| FreeBlackboardComponent(frame); | |
| } | |
| QList<BlackboardEntry> entriesList = frame.AllocateList<BlackboardEntry>(blackboardAsset.Entries.Length); | |
| for (int i = 0; i < assetEntries.Length; i++) | |
| { | |
| BlackboardValue newValue = CreateValueFromEntry(assetEntries[i]); | |
| entriesList.Add(new BlackboardEntry { Value = newValue }); | |
| //entriesList.Add(newValue); | |
| } | |
| Entries = entriesList; | |
| } | |
| public void FreeBlackboardComponent(Frame frame) | |
| { | |
| if (Entries.Ptr != default) | |
| { | |
| frame.FreeList(Entries); | |
| Entries = default; | |
| } | |
| } | |
| private BlackboardValue CreateValueFromEntry(AIBlackboardEntry entry) | |
| { | |
| BlackboardValue newValue = new BlackboardValue(); | |
| if (entry.Type == AIBlackboardValueType.Boolean) | |
| { | |
| *newValue.BooleanValue = default; | |
| } | |
| if (entry.Type == AIBlackboardValueType.Byte) | |
| { | |
| *newValue.ByteValue = default; | |
| } | |
| if (entry.Type == AIBlackboardValueType.Integer) | |
| { | |
| *newValue.IntegerValue = default; | |
| } | |
| if (entry.Type == AIBlackboardValueType.FP) | |
| { | |
| *newValue.FPValue = default; | |
| } | |
| if (entry.Type == AIBlackboardValueType.Vector2) | |
| { | |
| *newValue.FPVector2Value = default; | |
| } | |
| if (entry.Type == AIBlackboardValueType.Vector3) | |
| { | |
| *newValue.FPVector3Value = default; | |
| } | |
| if (entry.Type == AIBlackboardValueType.EntityRef) | |
| { | |
| *newValue.EntityRefValue = default; | |
| } | |
| return newValue; | |
| } | |
| public QBoolean GetBoolean(Frame frame, string key) | |
| { | |
| var bbValue = GetBlackboardValue(frame, key); | |
| return *bbValue.BooleanValue; | |
| } | |
| public byte GetByte(Frame frame, string key) | |
| { | |
| var bbValue = GetBlackboardValue(frame, key); | |
| return *bbValue.ByteValue; | |
| } | |
| public Int32 GetInteger(Frame frame, string key) | |
| { | |
| var bbValue = GetBlackboardValue(frame, key); | |
| return *bbValue.IntegerValue; | |
| } | |
| public FP GetFP(Frame frame, string key) | |
| { | |
| var bbValue = GetBlackboardValue(frame, key); | |
| return *bbValue.FPValue; | |
| } | |
| public FPVector2 GetVector2(Frame frame, string key) | |
| { | |
| var bbValue = GetBlackboardValue(frame, key); | |
| return *bbValue.FPVector2Value; | |
| } | |
| public FPVector3 GetVector3(Frame frame, string key) | |
| { | |
| var bbValue = GetBlackboardValue(frame, key); | |
| return *bbValue.FPVector3Value; | |
| } | |
| public EntityRef GetEntityRef(Frame frame, string key) | |
| { | |
| var bbValue = GetBlackboardValue(frame, key); | |
| return *bbValue.EntityRefValue; | |
| } | |
| public BlackboardEntry* Set(Frame frame, string key, QBoolean value) | |
| { | |
| QList<BlackboardEntry> valueList = frame.ResolveList(Entries); | |
| var ID = GetID(frame, key); | |
| *valueList.GetPointer(ID)->Value.BooleanValue = value; | |
| return valueList.GetPointer(ID); | |
| } | |
| public BlackboardEntry* Set(Frame frame, string key, byte value) | |
| { | |
| QList<BlackboardEntry> valueList = frame.ResolveList(Entries); | |
| var ID = GetID(frame, key); | |
| *valueList.GetPointer(ID)->Value.ByteValue = value; | |
| return valueList.GetPointer(ID); | |
| } | |
| public BlackboardEntry* Set(Frame frame, string key, Int32 value) | |
| { | |
| QList<BlackboardEntry> valueList = frame.ResolveList(Entries); | |
| var ID = GetID(frame, key); | |
| *valueList.GetPointer(ID)->Value.IntegerValue = value; | |
| return valueList.GetPointer(ID); | |
| } | |
| public BlackboardEntry* Set(Frame frame, string key, FP value) | |
| { | |
| QList<BlackboardEntry> valueList = frame.ResolveList(Entries); | |
| var ID = GetID(frame, key); | |
| *valueList.GetPointer(ID)->Value.FPValue = value; | |
| return valueList.GetPointer(ID); | |
| } | |
| public BlackboardEntry* Set(Frame frame, string key, FPVector2 value) | |
| { | |
| QList<BlackboardEntry> valueList = frame.ResolveList(Entries); | |
| var ID = GetID(frame, key); | |
| *valueList.GetPointer(ID)->Value.FPVector2Value = value; | |
| return valueList.GetPointer(ID); | |
| } | |
| public BlackboardEntry* Set(Frame frame, string key, FPVector3 value) | |
| { | |
| QList<BlackboardEntry> valueList = frame.ResolveList(Entries); | |
| var ID = GetID(frame, key); | |
| *valueList.GetPointer(ID)->Value.FPVector3Value = value; | |
| return valueList.GetPointer(ID); | |
| } | |
| public BlackboardEntry* Set(Frame frame, string key, EntityRef value) | |
| { | |
| QList<BlackboardEntry> valueList = frame.ResolveList(Entries); | |
| var ID = GetID(frame, key); | |
| *valueList.GetPointer(ID)->Value.EntityRefValue = value; | |
| return valueList.GetPointer(ID); | |
| } | |
| public BlackboardEntry* GetBlackboardEntry(Frame frame, string key) | |
| { | |
| var bbAsset = frame.FindAsset<AIBlackboard>(Board.Id); | |
| var ID = bbAsset.GetEntryID(key); | |
| var values = frame.ResolveList(Entries); | |
| return values.GetPointer(ID); | |
| } | |
| public BlackboardValue GetBlackboardValue(Frame frame, string key) | |
| { | |
| Assert.Check(string.IsNullOrEmpty(key) == false, "The Key cannot be empty or null."); | |
| var bbAsset = frame.FindAsset<AIBlackboard>(Board.Id); | |
| var ID = bbAsset.GetEntryID(key); | |
| var values = frame.ResolveList(Entries); | |
| return values[ID].Value; | |
| } | |
| public Int32 GetID(Frame frame, string key) | |
| { | |
| Assert.Check(string.IsNullOrEmpty(key) == false, "The Key cannot be empty or null."); | |
| var bbAsset = frame.FindAsset<AIBlackboard>(Board.Id); | |
| var ID = bbAsset.GetEntryID(key); | |
| return ID; | |
| } | |
| public bool HasEntry(Frame frame, string key) | |
| { | |
| var boardAsset = frame.FindAsset<AIBlackboard>(Board.Id); | |
| return boardAsset.HasEntry(key); | |
| } | |
| public void RegisterReactiveDecorator(Frame frame, string key, BTDecorator decorator) | |
| { | |
| var blackboardEntry = GetBlackboardEntry(frame, key); | |
| QList<AssetRefBTDecorator> reactiveDecorators; | |
| if (blackboardEntry->ReactiveDecorators.Ptr == default) | |
| { | |
| reactiveDecorators = frame.AllocateList<AssetRefBTDecorator>(); | |
| } | |
| else | |
| { | |
| reactiveDecorators = frame.ResolveList<AssetRefBTDecorator>(blackboardEntry->ReactiveDecorators); | |
| } | |
| reactiveDecorators.Add(decorator); | |
| blackboardEntry->ReactiveDecorators = reactiveDecorators; | |
| } | |
| public void UnregisterReactiveDecorator(Frame frame, string key, BTDecorator decorator) | |
| { | |
| var blackboardEntry = GetBlackboardEntry(frame, key); | |
| if (blackboardEntry->ReactiveDecorators.Ptr != default) | |
| { | |
| QList<AssetRefBTDecorator> reactiveDecorators = frame.ResolveList<AssetRefBTDecorator>(blackboardEntry->ReactiveDecorators); | |
| reactiveDecorators.Remove(decorator); | |
| blackboardEntry->ReactiveDecorators = reactiveDecorators; | |
| } | |
| } | |
| public void Dump(Frame frame) | |
| { | |
| string dumpText = ""; | |
| var bbAsset = frame.FindAsset<AIBlackboard>(Board.Id); | |
| dumpText += "Blackboard Path and ID: " + bbAsset.Path + " | " + Board.Id.Value; | |
| var valuesList = frame.ResolveList(Entries); | |
| for (int i = 0; i < valuesList.Count; i++) | |
| { | |
| string value = "NONE"; | |
| if (valuesList[i].Value.Field == BlackboardValue.BOOLEANVALUE) value = valuesList[i].Value.BooleanValue->Value.ToString(); | |
| if (valuesList[i].Value.Field == BlackboardValue.BYTEVALUE) value = valuesList[i].Value.ByteValue->ToString(); | |
| if (valuesList[i].Value.Field == BlackboardValue.INTEGERVALUE) value = valuesList[i].Value.IntegerValue->ToString(); | |
| if (valuesList[i].Value.Field == BlackboardValue.FPVALUE) value = valuesList[i].Value.FPValue->ToString(); | |
| if (valuesList[i].Value.Field == BlackboardValue.FPVECTOR2VALUE) value = valuesList[i].Value.FPVector2Value->ToString(); | |
| if (valuesList[i].Value.Field == BlackboardValue.FPVECTOR3VALUE) value = valuesList[i].Value.FPVector3Value->ToString(); | |
| if (valuesList[i].Value.Field == BlackboardValue.ENTITYREFVALUE) value = valuesList[i].Value.EntityRefValue->ToString(); | |
| dumpText += "\nName: " + bbAsset.GetEntryName(i) + ", Value: " + value; | |
| } | |
| Log.Info(dumpText); | |
| } | |
| } | |
| } | |