21 #ifndef _H_HBhvUtility_H
22 #define _H_HBhvUtility_H
36 class HUtilityTextParser;
39 class HStreamFileToolkit;
44 #define BHV_MAX_NAME_LENGTH 256
45 #define BHV_MAX_VERSION_LENGTH 256
46 #define BHV_MAX_VENDOR_LENGTH 4096
47 #define BHV_MAX_TYPE_LENGTH 4096
93 const HQuat &Normalize();
95 HQuat() { x=0.0f;y=0.0f;z=0.0f; w=0;};
97 HQuat(
float X,
float Y,
float Z,
float W) { x=X;y=Y;z=Z; w=W;};
104 void Set(
float X,
float Y,
float Z,
float W) { x=X;y=Y;z=Z; w=W; };
114 return HQuat(y*q2.
z - z*q2.
y + w*q2.
x + x*q2.
w,
115 z*q2.
x - x*q2.
z + w*q2.
y + y*q2.
w,
116 x*q2.
y - y*q2.
x + w*q2.
z + z*q2.
w,
117 w*q2.
w - x*q2.
x - y*q2.
y - z*q2.
z);
127 return HQuat(x*v, y*v, z*v, w*v);
148 return HQuat(x/v, y/v, z/v, w/v);
157 return HQuat(x-q2.
x, y-q2.
y, z-q2.
z, w-q2.
w);
167 return HQuat(x+q2.
x, y+q2.
y, z+q2.
z, w+q2.
w);
182 void ToMatrix(
float matrix[16]);
215 static HQuat QslerpNoInvert(
const HQuat &q1,
const HQuat &q2,
float fraction);
224 static HQuat QslerpNoInvertExtraSpins(
const HQuat &q1,
const HQuat &q2,
float fraction,
int ExtraSpins);
247 static HQuat MatrixToQuaternion(
float *matrix);
269 m_bEaseInOut =
false;
294 virtual void SetConstant(
bool constant) { m_bConstant = constant; }
300 virtual void SetEaseInOut(
bool easeinout) { m_bEaseInOut = easeinout; }
302 virtual void SetRelative(
bool relative) { m_bRelative = relative; }
324 m_cp.Set(0.0f,0.0f,0.0f);
398 virtual void Serialize(HUtilityXMLTag *xmlgen);
448 virtual void Serialize(HUtilityXMLTag *xmlgen);
490 void CalculateCurveFactor(
HBhvTimeline *timeline,
int keyframe);
518 void CalculateCurveLength(
HPoint p2);
525 void DrawTangents(
HPoint p2);
540 virtual void Serialize(HUtilityXMLTag *xmlgen);
595 virtual void Serialize(HUtilityXMLTag *xmlgen);
675 virtual void Serialize(HUtilityXMLTag *xmlgen);
748 virtual void Serialize(HUtilityXMLTag *xmlgen);
771 for (
int i=0;i<16;i++)
772 m_matrix[i] = matrix[i];
793 virtual void Serialize(HUtilityXMLTag *xmlgen);
834 virtual void Serialize(HUtilityXMLTag *xmlgen);
841 void SetTarget(
const char *target);
847 char m_target[MVO_BUFFER_SIZE];
883 virtual void Serialize(HUtilityXMLTag *xmlgen);
890 void SetTarget(
const char *t1,
const char *t2,
const char *t3);
895 char * GetTarget2() {
return m_t2; }
896 char * GetTarget3() {
return m_t3; }
946 TK_Status Interpret(BStreamFileToolkit &tk, ID_Key key,
int variant) alter;
948 TK_Status Execute (BStreamFileToolkit & tk) alter;
967 static void GetQuatPoint(HUtilityTextParser *tp,
HQuat &quat);
968 static void GetMatrix(HUtilityTextParser *tp,
float *matrix);
976 static void GetQuatPoint(
const char *text,
HQuat &quat);
978 static void GetMatrix(
const char *text,
float *matrix);
986 static void ConvertHSFtoMorph(
const char *filename,
HBaseModel *model);
993 static void ConvertHSFtoSegSwitch(
const char *filename,
HBaseModel *model);
1000 static void SetupAnimationReadFromHSF(HStreamFileToolkit *mytool,
HBaseModel *model);
1007 static void SetupAnimationWriteFromHSF(HStreamFileToolkit *mytool,
HBaseModel *model);
1013 static void ShowModellingMatrix(
float *segment_modelling_matrix);
1015 static void MakeCameraKeyframe(
HBaseView *view,
float timediff,
bool targetmode =
false);
1018 static void AddPosKeyframe(
HBaseModel *model,
char *animname,
int tick,
HPoint pos,
bool linear);
1019 static void AddRotKeyframe(
HBaseModel *model,
char *animname,
int tick,
HQuat pos,
bool linear);
1020 static void AddPosRotKeyframe(
HBaseModel *model,
const char *animname,
int tick,
HPoint pivot,
float *matrix);
1023 static void AddPosRotKeyframe(
HBaseModel *model,
char *animname,
int tick,
HPoint pos,
bool linear,
HQuat quat,
bool linear2);
1024 static void AddInstanceCreateKeyframe(
HBaseModel *model,
char *animname,
int tick,
char *path,
char *include_path,
char *color);
1032 static void Move_Segments_To_Segment(
HC_KEY target,
HC_KEY destination);
1033 static void AddShellToMorphList(
HC_KEY key,
struct vlist_s *morph_data_list);
1034 static bool KeyExists(
HC_KEY key,
struct vlist_s *morp_data_list);
1035 static void ResetMorphData(
struct vlist_s *morp_data_list);
1036 static void CollectShellMorphData(
HC_KEY key,
struct vlist_s *morp_data_list);
1037 static void ClearAllAttributes(
HC_KEY key);
1038 static int searchcounter;
1057 void MakeTreeSnapshotRecursive(
HC_KEY segkey,
HC_KEY newsegkey, MVO_POINTER_SIZED_INT &uid);
1058 void MakeTreeSnapshot();
1062 struct vhash_s * m_NewIncludesHash;
1073 bool CompareMatrices(
float *m1,
float *m2);
1077 struct vlist_s * m_Anims;
1078 struct vhash_s * m_Segments;
HKeyframeChannel()
Definition: HBhvUtility.h:322
The HBhvTimeline class encpasulates an animation timeline.
Definition: HBhvTimeline.h:42
The HKeyframe class is the base class for all keyframe types.
Definition: HBhvUtility.h:260
The HKeyframeAxisRotation class is used for rotations around an arbitrary axis.
Definition: HBhvUtility.h:642
bool m_bConstant
Definition: HBhvUtility.h:305
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:426
The HKeyframeQuatSquad class is used for non-linear quaternion based rotation.
Definition: HBhvUtility.h:716
void Set(float X, float Y, float Z, float W)
Definition: HBhvUtility.h:104
char * GetTarget()
Definition: HBhvUtility.h:845
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:278
The HQuat class defines the data type of a Quaternion.
Definition: HBhvUtility.h:86
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:627
float w
Definition: HBhvUtility.h:92
float c
Definition: HBhvUtility.h:548
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:738
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:824
Definition: HBhvUtility.h:1053
String keyframe type.
Definition: HBhvUtility.h:54
Definition: HBhvUtility.h:1065
HQuat m_quat
Definition: HBhvUtility.h:750
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:378
HKeyframeRotation()
Definition: HBhvUtility.h:615
The HKeyframeRotation class is the base class for all rotation related keyframes. ...
Definition: HBhvUtility.h:608
HANIRotationType
Definition: HBhvUtility.h:70
float m_angle
Definition: HBhvUtility.h:677
HQuat()
Definition: HBhvUtility.h:95
char * GetTarget1()
Definition: HBhvUtility.h:894
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:664
The HKeyframeQuatSlerp class is used for linear quaternion based rotation.
Definition: HBhvUtility.h:682
HANIKeyframeType
Definition: HBhvUtility.h:51
HPoint m_tangent2
Definition: HBhvUtility.h:543
virtual void SetEaseInOut(bool easeinout)
Definition: HBhvUtility.h:300
bool m_bRelative
Definition: HBhvUtility.h:306
HKeyframeQuatSlerp(float x=0, float y=0, float z=0, float w=0)
Definition: HBhvUtility.h:689
float y
Definition: HBhvUtility.h:90
HQuat(HQuat const *p)
Definition: HBhvUtility.h:99
HQuat m_quat
Definition: HBhvUtility.h:709
Definition: HBhvUtility.h:1041
HKeyframe()
Definition: HBhvUtility.h:266
HPoint m_cp
Definition: HBhvUtility.h:351
HKeyframeChannelCurve(float x=0, float y=0, float z=0)
Definition: HBhvUtility.h:464
HKeyframeAxisRotation(float angle=0)
Definition: HBhvUtility.h:651
HANIRotationType m_rotationtype
Definition: HBhvUtility.h:634
float x
Definition: HBhvUtility.h:89
HANIKeyframeType m_type
Definition: HBhvUtility.h:304
HPoint m_tangent1
Definition: HBhvUtility.h:542
The HKeyframeChannelDiscrete class is used for discrete interpolation of positional values...
Definition: HBhvUtility.h:406
virtual void Serialize(HUtilityXMLTag *xmlgen)
Definition: HBhvUtility.h:287
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:783
The HKeyframeString class is used for any string related keyframes.
Definition: HBhvUtility.h:858
struct vlist_s * arrays_list
Definition: HBhvUtility.h:920
virtual void Interpolate(HKeyframeChannel **posarray, int keyframe, float fraction, int length, HPoint &res)
float ItemType
Definition: HBhvUtility.h:547
HKeyframeChannelDiscrete(float x=0, float y=0, float z=0)
Definition: HBhvUtility.h:413
The HKeyframeChannelCurve class is used for spline based interpolation of positional values...
Definition: HBhvUtility.h:457
Linear quaternion rotational type.
Definition: HBhvUtility.h:72
The HBaseModel class is used to store and manage model information.
Definition: HBaseModel.h:52
float m_factor2
Definition: HBhvUtility.h:545
The HBhvUtility class contains a set of utility functions and data structures used in the behaviour c...
Definition: HBhvUtility.h:958
Rotational keyframe type.
Definition: HBhvUtility.h:53
HANIChannelType
Definition: HBhvUtility.h:60
The HPoint class is the data type of a three-dimensional point.
Definition: HGlobals.h:126
The HBaseView class defines and manages a view of model information.
Definition: HBaseView.h:337
The HKeyframeChannelLinear class is used for linear interpolation of positional values.
Definition: HBhvUtility.h:359
The ShellMorphInfo class contains vertex attribute information.
Definition: HBhvUtility.h:913
float z
Definition: HBhvUtility.h:91
Channel keyframe type.
Definition: HBhvUtility.h:52
virtual void SetConstant(bool constant)
Definition: HBhvUtility.h:294
HQuat(float X, float Y, float Z, float W)
Definition: HBhvUtility.h:97
Axis rotation type.
Definition: HBhvUtility.h:71
HKeyframeChannelFollowPath()
Definition: HBhvUtility.h:567
HC_KEY original_key
Definition: HBhvUtility.h:921
The HBhvAnimation class defines an animation.
Definition: HBhvAnimation.h:47
Euler rotation type.
Definition: HBhvUtility.h:74
bool m_bLinear
Definition: HBhvUtility.h:635
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:477
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:873
HANIChannelType m_channeltype
Definition: HBhvUtility.h:352
float b
Definition: HBhvUtility.h:549
virtual void Serialize(HUtilityXMLTag *xmlgen)
HKeyframeQuatSquad(float x=0, float y=0, float z=0, float w=0)
Definition: HBhvUtility.h:724
The HKeyframeChannelFollowPath class is used for interpolators that change orientation in relation to...
Definition: HBhvUtility.h:559
Bezier spline channel type.
Definition: HBhvUtility.h:63
HPoint * control_polygon
Definition: HBhvUtility.h:546
virtual void SetRelative(bool relative)
Definition: HBhvUtility.h:302
Follow path channel type.
Definition: HBhvUtility.h:64
virtual void Interpolate(HKeyframeChannel **posarray, int keyframe, float fraction, int length, HPoint &res)
Definition: HBhvUtility.h:349
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:702
The HKeyframeString class is used for any string related keyframes.
Definition: HBhvUtility.h:809
HC_KEY temp_key
Definition: HBhvUtility.h:922
Non-linear quaternion rotational type.
Definition: HBhvUtility.h:73
bool m_bEaseInOut
Definition: HBhvUtility.h:307
float m_curvelength
Definition: HBhvUtility.h:550
TK_Bhv_XML(HBaseModel *model)
Definition: HBhvUtility.h:940
HQuat(const HQuat &p)
Definition: HBhvUtility.h:101
HKeyframeMatrix(float *matrix=0)
Definition: HBhvUtility.h:765
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:579
The HKeyframeQuatSquad class is used for non-linear quaternion based rotation.
Definition: HBhvUtility.h:757
Linear channel type.
Definition: HBhvUtility.h:61
HKeyframeChannelLinear(float x=0, float y=0, float z=0)
Definition: HBhvUtility.h:366
String keyframe type.
Definition: HBhvUtility.h:55
virtual HKeyframe * Clone()
Definition: HBhvUtility.h:334
Hermite spline channel type.
Definition: HBhvUtility.h:62
The HKeyframeChannel class is the base class for all channel related keyframe types.
Definition: HBhvUtility.h:315
float m_factor1
Definition: HBhvUtility.h:544
Discrete channel type.
Definition: HBhvUtility.h:65
The TK_Bhv_XML subclasses writes and reads behavior related to XML data.
Definition: HBhvUtility.h:930