Spaces:
Runtime error
Runtime error
using Photon.Deterministic; | |
using System; | |
namespace Quantum | |
{ | |
public unsafe partial class AIBlackboardInitializer | |
{ | |
[ | ]|
public struct AIBlackboardInitialValue | |
{ | |
public Boolean AsBoolean; | |
public Byte AsByte; | |
public Int32 AsInteger; | |
public FP AsFP; | |
public FPVector2 AsFPVector2; | |
public FPVector3 AsFPVector3; | |
public EntityRef AsEntityRef; | |
} | |
[ | ]|
public struct AIBlackboardInitialValueEntry | |
{ | |
public string Key; | |
public AIBlackboardInitialValue Value; | |
} | |
public bool ReportMissingEntries = true; | |
public AssetRefAIBlackboard AIBlackboard; | |
public AIBlackboardInitialValueEntry[] InitialValues; | |
public unsafe static void InitializeBlackboard(Frame frame, AIBlackboardComponent* blackboard, AIBlackboardInitializer blackboardInitializer, AIBlackboardInitialValueEntry[] blackboardOverrides = null) | |
{ | |
AIBlackboard board = frame.FindAsset<AIBlackboard>(blackboardInitializer.AIBlackboard.Id); | |
blackboard->InitializeBlackboardComponent(frame, board); | |
ApplyEntries(frame, blackboard, blackboardInitializer, blackboardInitializer.InitialValues); | |
ApplyEntries(frame, blackboard, blackboardInitializer, blackboardOverrides); | |
} | |
public unsafe static void ApplyEntries(Frame frame, AIBlackboardComponent* blackboard, AIBlackboardInitializer blackboardInitializer, AIBlackboardInitialValueEntry[] values) | |
{ | |
if (values == null) return; | |
for (int i = 0; i < values.Length; i++) | |
{ | |
string key = values[i].Key; | |
if (blackboard->HasEntry(frame, key) == false) | |
{ | |
if (blackboardInitializer.ReportMissingEntries) | |
{ | |
Quantum.Log.Warn($"Blackboard {blackboard->Board} does not have an entry with a key called '{key}'"); | |
} | |
continue; | |
} | |
BlackboardValue value = blackboard->GetBlackboardValue(frame, key); | |
switch (value.Field) | |
{ | |
case BlackboardValue.BOOLEANVALUE: | |
blackboard->Set(frame, key, values[i].Value.AsBoolean); | |
break; | |
case BlackboardValue.BYTEVALUE: | |
blackboard->Set(frame, key, values[i].Value.AsByte); | |
break; | |
case BlackboardValue.ENTITYREFVALUE: | |
blackboard->Set(frame, key, values[i].Value.AsEntityRef); | |
break; | |
case BlackboardValue.FPVALUE: | |
blackboard->Set(frame, key, values[i].Value.AsFP); | |
break; | |
case BlackboardValue.INTEGERVALUE: | |
blackboard->Set(frame, key, values[i].Value.AsInteger); | |
break; | |
case BlackboardValue.FPVECTOR2VALUE: | |
blackboard->Set(frame, key, values[i].Value.AsFPVector2); | |
break; | |
case BlackboardValue.FPVECTOR3VALUE: | |
blackboard->Set(frame, key, values[i].Value.AsFPVector3); | |
break; | |
} | |
} | |
} | |
} | |
} | |