An Example of How to Use Frame.User.cs
Article was written against Quantum version 1.2.3RC3
InitUser() and FreeUser() allows you to save your own custom data into the frame.
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Quantum {
unsafe partial class Frame {
BehaviourTreeFrameData _behaviourTreeFrameData;
public FrameUserContext FrameUserContext {
get {
return Context as FrameUserContext;
}
}
public BehaviourTreeFrameData BehaviourTreeFrameData {
get {
return _behaviourTreeFrameData;
}
}
partial void InitUser() {
var allEntities = GetAllEntitiesUnsafe();
for (Int32 i = 0; i < allEntities.Length; ++i) {
var e = allEntities[i];
var bt = Entity.GetBehaviourTree(e.Entity);
if (bt != null) {
// Reserve memory for any blackboard
bt->BlackboardDataOffsets = _behaviourTreeFrameData.Sizes;
_behaviourTreeFrameData.Sizes.Add(BTBlackboard.MaxDataSize);
// Reserve memory for any tree and it's node that save data on the state
bt->NodeDataOffsets = _behaviourTreeFrameData.Sizes;
_behaviourTreeFrameData.Sizes.Add(BTRoot.MaxDataSize);
}
}
if (_behaviourTreeFrameData.Sizes.GenericData > 0)
_behaviourTreeFrameData.Data = (Byte*)Native.Alloc(_behaviourTreeFrameData.Sizes.GenericData);
if (_behaviourTreeFrameData.Sizes.Bytes > 0)
_behaviourTreeFrameData.Bytes = (Byte*)Native.Alloc(_behaviourTreeFrameData.Sizes.Bytes);
}
partial void FreeUser() {
if (_behaviourTreeFrameData.Bytes != null)
Native.Free(new IntPtr(_behaviourTreeFrameData.Bytes));
if (_behaviourTreeFrameData.Data != null)
Native.Free(new IntPtr(_behaviourTreeFrameData.Data));
}
partial void AllocUser() {
_behaviourTreeFrameData = new BehaviourTreeFrameData();
}
partial void CopyFromUser(Frame frame) {
_behaviourTreeFrameData.Sizes = frame._behaviourTreeFrameData.Sizes;
if (frame._behaviourTreeFrameData.Bytes != null)
Native.Copy(_behaviourTreeFrameData.Bytes, frame._behaviourTreeFrameData.Bytes, (ulong)frame._behaviourTreeFrameData.Sizes.Bytes);
if (frame._behaviourTreeFrameData.Data != null)
Native.Copy(_behaviourTreeFrameData.Data, frame._behaviourTreeFrameData.Data, (ulong)frame._behaviourTreeFrameData.Sizes.GenericData);
}
}
}
Back to top