18 #ifndef _H_HBhvUtility_H
19 #define _H_HBhvUtility_H
33 class HUtilityTextParser;
36 class HStreamFileToolkit;
41 #define BHV_MAX_NAME_LENGTH 256
42 #define BHV_MAX_VERSION_LENGTH 256
43 #define BHV_MAX_VENDOR_LENGTH 4096
44 #define BHV_MAX_TYPE_LENGTH 4096
90 const HQuat &Normalize();
92 HQuat() { x=0.0f;y=0.0f;z=0.0f; w=0;};
94 HQuat(
float X,
float Y,
float Z,
float W) { x=X;y=Y;z=Z; w=W;};
101 void Set(
float X,
float Y,
float Z,
float W) { x=X;y=Y;z=Z; w=W; };
111 return HQuat(y*q2.
z - z*q2.
y + w*q2.
x + x*q2.
w,
112 z*q2.
x - x*q2.
z + w*q2.
y + y*q2.
w,
113 x*q2.
y - y*q2.
x + w*q2.
z + z*q2.
w,
114 w*q2.
w - x*q2.
x - y*q2.
y - z*q2.
z);
124 return HQuat(x*v, y*v, z*v, w*v);
145 return HQuat(x/v, y/v, z/v, w/v);
154 return HQuat(x-q2.
x, y-q2.
y, z-q2.
z, w-q2.
w);
164 return HQuat(x+q2.
x, y+q2.
y, z+q2.
z, w+q2.
w);
179 void ToMatrix(
float matrix[16]);
212 static HQuat QslerpNoInvert(
const HQuat &q1,
const HQuat &q2,
float fraction);
221 static HQuat QslerpNoInvertExtraSpins(
const HQuat &q1,
const HQuat &q2,
float fraction,
int ExtraSpins);
244 static HQuat MatrixToQuaternion(
float matrix[]);
266 m_bEaseInOut =
false;
285 UNREFERENCED(xmlgen);
293 virtual void SetConstant(
bool constant) { m_bConstant = constant; }
299 virtual void SetEaseInOut(
bool easeinout) { m_bEaseInOut = easeinout; }
301 virtual void SetRelative(
bool relative) { m_bRelative = relative; }
323 m_cp.Set(0.0f,0.0f,0.0f);
349 UNREFERENCED(posarray);
350 UNREFERENCED(keyframe);
351 UNREFERENCED(fraction);
352 UNREFERENCED(length);
403 virtual void Serialize(HUtilityXMLTag *xmlgen);
453 virtual void Serialize(HUtilityXMLTag *xmlgen);
495 void CalculateCurveFactor(
HBhvTimeline *timeline,
int keyframe);
523 void CalculateCurveLength(
HPoint p2);
530 void DrawTangents(
HPoint p2);
545 virtual void Serialize(HUtilityXMLTag *xmlgen);
600 virtual void Serialize(HUtilityXMLTag *xmlgen);
680 virtual void Serialize(HUtilityXMLTag *xmlgen);
753 virtual void Serialize(HUtilityXMLTag *xmlgen);
776 for (
int i=0;i<16;i++)
777 m_matrix[i] = matrix[i];
798 virtual void Serialize(HUtilityXMLTag *xmlgen);
839 virtual void Serialize(HUtilityXMLTag *xmlgen);
846 void SetTarget(
const char *target);
852 char m_target[MVO_BUFFER_SIZE];
888 virtual void Serialize(HUtilityXMLTag *xmlgen);
895 void SetTarget(
const char *t1,
const char *t2,
const char *t3);
900 char * GetTarget2() {
return m_t2; }
901 char * GetTarget3() {
return m_t3; }
951 TK_Status Interpret(BStreamFileToolkit &tk, ID_Key key,
int variant);
953 TK_Status Execute (BStreamFileToolkit & tk);
972 static void GetQuatPoint(HUtilityTextParser *tp,
HQuat &quat);
973 static void GetMatrix(HUtilityTextParser *tp,
float matrix[]);
981 static void GetQuatPoint(
const char *text,
HQuat &quat);
983 static void GetMatrix(
const char *text,
float matrix[]);
991 static void ConvertHSFtoMorph(
const char *filename,
HBaseModel *model);
998 static void ConvertHSFtoSegSwitch(
const char *filename,
HBaseModel *model);
1005 static void SetupAnimationReadFromHSF(HStreamFileToolkit *mytool,
HBaseModel *model);
1012 static void SetupAnimationWriteFromHSF(HStreamFileToolkit *mytool,
HBaseModel *model);
1018 static void ShowModellingMatrix(
float *segment_modelling_matrix);
1020 static void MakeCameraKeyframe(
HBaseView *view,
float timediff,
bool targetmode =
false);
1023 static void AddPosKeyframe(
HBaseModel *model,
char *animname,
int tick,
HPoint pos,
bool linear);
1024 static void AddRotKeyframe(
HBaseModel *model,
char *animname,
int tick,
HQuat pos,
bool linear);
1025 static void AddPosRotKeyframe(
HBaseModel *model,
const char *animname,
int tick,
HPoint pivot,
float matrix[]);
1028 static void AddPosRotKeyframe(
HBaseModel *model,
char *animname,
int tick,
HPoint pos,
bool linear,
HQuat quat,
bool linear2);
1029 static void AddInstanceCreateKeyframe(
HBaseModel *model,
char *animname,
int tick,
char *path,
char *include_path,
char *color);
1037 static void Move_Segments_To_Segment(
HC_KEY target,
HC_KEY destination);
1038 static void AddShellToMorphList(
HC_KEY key,
struct vlist_s *morph_data_list);
1039 static bool KeyExists(
HC_KEY key,
struct vlist_s *morp_data_list);
1040 static void ResetMorphData(
struct vlist_s *morp_data_list);
1041 static void CollectShellMorphData(
HC_KEY key,
struct vlist_s *morp_data_list);
1042 static void ClearAllAttributes(
HC_KEY key);
1043 static int searchcounter;
1062 void MakeTreeSnapshotRecursive(
HC_KEY segkey,
HC_KEY newsegkey, MVO_POINTER_SIZED_INT &uid);
1063 void MakeTreeSnapshot();
1067 struct vhash_s * m_NewIncludesHash;
1078 bool CompareMatrices(
float *m1,
float *m2);
1082 struct vlist_s * m_Anims;
1083 struct vhash_s * m_Segments;
HKeyframeChannel()
Definition: HBhvUtility.h:321
The HBhvTimeline class encpasulates an animation timeline.
Definition: HBhvTimeline.h:38
The HKeyframe class is the base class for all keyframe types.
Definition: HBhvUtility.h:257
The HKeyframeAxisRotation class is used for rotations around an arbitrary axis.
Definition: HBhvUtility.h:647
bool m_bConstant
Definition: HBhvUtility.h:304
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:431
The HKeyframeQuatSquad class is used for non-linear quaternion based rotation.
Definition: HBhvUtility.h:721
void Set(float X, float Y, float Z, float W)
Definition: HBhvUtility.h:101
char * GetTarget()
Definition: HBhvUtility.h:850
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:275
The HQuat class defines the data type of a Quaternion.
Definition: HBhvUtility.h:83
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:632
float w
Definition: HBhvUtility.h:89
float c
Definition: HBhvUtility.h:553
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:743
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:829
Definition: HBhvUtility.h:1058
String keyframe type.
Definition: HBhvUtility.h:51
Definition: HBhvUtility.h:1070
HQuat m_quat
Definition: HBhvUtility.h:755
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:383
HKeyframeRotation()
Definition: HBhvUtility.h:620
The HKeyframeRotation class is the base class for all rotation related keyframes. ...
Definition: HBhvUtility.h:613
HANIRotationType
Definition: HBhvUtility.h:67
float m_angle
Definition: HBhvUtility.h:682
HQuat()
Definition: HBhvUtility.h:92
char * GetTarget1()
Definition: HBhvUtility.h:899
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:669
The HKeyframeQuatSlerp class is used for linear quaternion based rotation.
Definition: HBhvUtility.h:687
HANIKeyframeType
Definition: HBhvUtility.h:48
HPoint m_tangent2
Definition: HBhvUtility.h:548
virtual void SetEaseInOut(bool easeinout)
Definition: HBhvUtility.h:299
bool m_bRelative
Definition: HBhvUtility.h:305
HKeyframeQuatSlerp(float x=0, float y=0, float z=0, float w=0)
Definition: HBhvUtility.h:694
float y
Definition: HBhvUtility.h:87
HQuat(HQuat const *p)
Definition: HBhvUtility.h:96
HQuat m_quat
Definition: HBhvUtility.h:714
Definition: HBhvUtility.h:1046
HKeyframe()
Definition: HBhvUtility.h:263
HPoint m_cp
Definition: HBhvUtility.h:356
HKeyframeChannelCurve(float x=0, float y=0, float z=0)
Definition: HBhvUtility.h:469
HKeyframeAxisRotation(float angle=0)
Definition: HBhvUtility.h:656
HANIRotationType m_rotationtype
Definition: HBhvUtility.h:639
float x
Definition: HBhvUtility.h:86
HANIKeyframeType m_type
Definition: HBhvUtility.h:303
HPoint m_tangent1
Definition: HBhvUtility.h:547
The HKeyframeChannelDiscrete class is used for discrete interpolation of positional values...
Definition: HBhvUtility.h:411
virtual void Serialize(HUtilityXMLTag *xmlgen)
Definition: HBhvUtility.h:284
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:788
The HKeyframeString class is used for any string related keyframes.
Definition: HBhvUtility.h:863
struct vlist_s * arrays_list
Definition: HBhvUtility.h:925
virtual void Interpolate(HKeyframeChannel **posarray, int keyframe, float fraction, int length, HPoint &res)
float ItemType
Definition: HBhvUtility.h:552
HKeyframeChannelDiscrete(float x=0, float y=0, float z=0)
Definition: HBhvUtility.h:418
The HKeyframeChannelCurve class is used for spline based interpolation of positional values...
Definition: HBhvUtility.h:462
Linear quaternion rotational type.
Definition: HBhvUtility.h:69
The HBaseModel class is used to store and manage model information.
Definition: HBaseModel.h:47
float m_factor2
Definition: HBhvUtility.h:550
The HBhvUtility class contains a set of utility functions and data structures used in the behaviour c...
Definition: HBhvUtility.h:963
Rotational keyframe type.
Definition: HBhvUtility.h:50
HANIChannelType
Definition: HBhvUtility.h:57
The HPoint class is the data type of a three-dimensional point.
Definition: HGlobals.h:121
The HBaseView class defines and manages a view of model information.
Definition: HBaseView.h:332
The HKeyframeChannelLinear class is used for linear interpolation of positional values.
Definition: HBhvUtility.h:364
The ShellMorphInfo class contains vertex attribute information.
Definition: HBhvUtility.h:918
HKeyframeMatrix(float matrix[]=0)
Definition: HBhvUtility.h:770
float z
Definition: HBhvUtility.h:88
Channel keyframe type.
Definition: HBhvUtility.h:49
virtual void SetConstant(bool constant)
Definition: HBhvUtility.h:293
HQuat(float X, float Y, float Z, float W)
Definition: HBhvUtility.h:94
Axis rotation type.
Definition: HBhvUtility.h:68
HKeyframeChannelFollowPath()
Definition: HBhvUtility.h:572
HC_KEY original_key
Definition: HBhvUtility.h:926
The HBhvAnimation class defines an animation.
Definition: HBhvAnimation.h:43
Euler rotation type.
Definition: HBhvUtility.h:71
bool m_bLinear
Definition: HBhvUtility.h:640
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:482
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:878
HANIChannelType m_channeltype
Definition: HBhvUtility.h:357
float b
Definition: HBhvUtility.h:554
virtual void Serialize(HUtilityXMLTag *xmlgen)
HKeyframeQuatSquad(float x=0, float y=0, float z=0, float w=0)
Definition: HBhvUtility.h:729
The HKeyframeChannelFollowPath class is used for interpolators that change orientation in relation to...
Definition: HBhvUtility.h:564
Bezier spline channel type.
Definition: HBhvUtility.h:60
HPoint * control_polygon
Definition: HBhvUtility.h:551
virtual void SetRelative(bool relative)
Definition: HBhvUtility.h:301
Follow path channel type.
Definition: HBhvUtility.h:61
virtual void Interpolate(HKeyframeChannel **posarray, int keyframe, float fraction, int length, HPoint &res)
Definition: HBhvUtility.h:348
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:707
The HKeyframeString class is used for any string related keyframes.
Definition: HBhvUtility.h:814
HC_KEY temp_key
Definition: HBhvUtility.h:927
Non-linear quaternion rotational type.
Definition: HBhvUtility.h:70
bool m_bEaseInOut
Definition: HBhvUtility.h:306
float m_curvelength
Definition: HBhvUtility.h:555
TK_Bhv_XML(HBaseModel *model)
Definition: HBhvUtility.h:945
HQuat(const HQuat &p)
Definition: HBhvUtility.h:98
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:584
The HKeyframeQuatSquad class is used for non-linear quaternion based rotation.
Definition: HBhvUtility.h:762
Linear channel type.
Definition: HBhvUtility.h:58
HKeyframeChannelLinear(float x=0, float y=0, float z=0)
Definition: HBhvUtility.h:371
String keyframe type.
Definition: HBhvUtility.h:52
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:333
Hermite spline channel type.
Definition: HBhvUtility.h:59
The HKeyframeChannel class is the base class for all channel related keyframe types.
Definition: HBhvUtility.h:314
float m_factor1
Definition: HBhvUtility.h:549
Discrete channel type.
Definition: HBhvUtility.h:62
The TK_Bhv_XML subclasses writes and reads behavior related to XML data.
Definition: HBhvUtility.h:935