123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- #pragma once
- #include "BinaryReader.h"
- // All of this is temporary.
- class Vector3
- {
- public:
- float x;
- float y;
- float z;
- static Vector3 read(BinaryReader &binaryReader) {
- Vector3 newObj;
- newObj.x = binaryReader.ReadSingle();
- newObj.y = binaryReader.ReadSingle();
- newObj.z = binaryReader.ReadSingle();
- return newObj;
- }
- };
- class Frame
- {
- public:
- Vector3 m_fOrigin;
- float qw;
- float qx;
- float qy;
- float qz;
- static Frame read(BinaryReader &binaryReader) {
- Frame newObj;
- newObj.m_fOrigin = Vector3::read(binaryReader);
- newObj.qw = binaryReader.ReadSingle();
- newObj.qx = binaryReader.ReadSingle();
- newObj.qy = binaryReader.ReadSingle();
- newObj.qz = binaryReader.ReadSingle();
- return newObj;
- }
- };
- class Position
- {
- public:
- uint32_t objcell_id;
- Frame frame;
- static Position read(BinaryReader &binaryReader) {
- Position newObj;
- newObj.objcell_id = binaryReader.ReadUInt32();
- newObj.frame = Frame::read(binaryReader);
- return newObj;
- }
- static Position readOrigin(BinaryReader &binaryReader) {
- Position newObj;
- newObj.objcell_id = binaryReader.ReadUInt32();
- newObj.frame.m_fOrigin = Vector3::read(binaryReader);
- return newObj;
- }
- };
- class ChildInfo
- {
- public:
- uint32_t id;
- uint32_t location_id;
- static ChildInfo read(BinaryReader &binaryReader) {
- ChildInfo newObj;
- newObj.id = binaryReader.ReadUInt32();
- newObj.location_id = binaryReader.ReadUInt32();
- return newObj;
- }
- };
- class PhysicsDesc
- {
- public:
- enum PhysicsDescInfo {
- CSetup = (1 << 0), // 0x1
- MTABLE = (1 << 1), // 0x2
- VELOCITY = (1 << 2), // 0x4
- ACCELERATION = (1 << 3), // 0x8
- OMEGA = (1 << 4), // 0x10
- PARENT = (1 << 5), // 0x20
- CHILDREN = (1 << 6), // 0x40
- OBJSCALE = (1 << 7), // 0x80
- FRICTION = (1 << 8), // 0x100
- ELASTICITY = (1 << 9), // 0x200
- TIMESTAMPS = (1 << 10), // 0x400
- STABLE = (1 << 11), // 0x800
- PETABLE = (1 << 12), // 0x1000
- DEFAULT_SCRIPT = (1 << 13), // 0x2000
- DEFAULT_SCRIPT_INTENSITY = (1 << 14), // 0x4000
- POSITION = (1 << 15), // 0x8000
- MOVEMENT = (1 << 16), // 0x10000
- ANIMFRAME_ID = (1 << 17), // 0x20000
- TRANSLUCENCY = (1 << 18) // 0x40000
- };
- DWORD bitfield;
- PhysicsState state;
- BYTE *movement_buffer;
- DWORD movement_buffer_length;
- DWORD autonomous_movement;
- DWORD animframe_id;
- Position pos;
- DWORD mtable_id; // These are tag ids like animpartchange
- DWORD stable_id;
- DWORD phstable_id;
- DWORD setup_id;
- DWORD parent_id;
- DWORD location_id;
- std::list<ChildInfo> children;
- float object_scale;
- float friction;
- float elasticity;
- float translucency;
- Vector3 velocity;
- Vector3 acceleration;
- Vector3 omega;
- PScriptType default_script;
- float default_script_intensity;
- uint16_t timestamps[9];
- PhysicsDesc()
- {
- state = (PhysicsState)0;
- movement_buffer = NULL;
- movement_buffer_length = 0;
- autonomous_movement = 0;
- animframe_id = 0;
-
- mtable_id = 0;
- stable_id = 0;
- phstable_id = 0;
- setup_id = 0;
- parent_id = 0;
- location_id = 0;
- object_scale = 1.0f;
- friction = 0.0f;
- elasticity = 0.0f;
- translucency = 0.0f;
- default_script = (PScriptType)0;
- default_script_intensity = 0.0f;
- }
- ~PhysicsDesc()
- {
- freeData();
- }
- void freeData()
- {
- if (movement_buffer)
- {
- delete[] movement_buffer;
- movement_buffer = NULL;
- }
- }
- void Unpack(BinaryReader &binaryReader) {
- PhysicsDesc &newObj = *this;
- newObj.bitfield = binaryReader.ReadUInt32();
- newObj.state = (PhysicsState)binaryReader.ReadUInt32();
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::MOVEMENT) != 0) {
- DWORD buff_length = binaryReader.ReadUInt32();
- if (buff_length > 0)
- {
- if (newObj.movement_buffer)
- delete[] newObj.movement_buffer;
- newObj.movement_buffer = new BYTE[buff_length];
- memcpy(newObj.movement_buffer, binaryReader.ReadArray((int)buff_length), buff_length);
- newObj.movement_buffer_length = buff_length;
- }
- newObj.autonomous_movement = binaryReader.ReadUInt32();
- }
- else if ((newObj.bitfield & (DWORD)PhysicsDescInfo::ANIMFRAME_ID) != 0) {
- newObj.animframe_id = binaryReader.ReadUInt32();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::POSITION) != 0) {
- newObj.pos = Position::read(binaryReader);
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::MTABLE) != 0) {
- newObj.mtable_id = binaryReader.ReadUInt32();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::STABLE) != 0) {
- newObj.stable_id = binaryReader.ReadUInt32();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::PETABLE) != 0) {
- newObj.phstable_id = binaryReader.ReadUInt32();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::CSetup) != 0) {
- newObj.setup_id = binaryReader.ReadUInt32();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::PARENT) != 0) {
- newObj.parent_id = binaryReader.ReadUInt32();
- newObj.location_id = binaryReader.ReadUInt32();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::CHILDREN) != 0) {
- DWORD num_children = binaryReader.ReadUInt32();
- for (DWORD i = 0; i < num_children; ++i) {
- newObj.children.push_back(ChildInfo::read(binaryReader));
- }
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::OBJSCALE) != 0) {
- newObj.object_scale = binaryReader.ReadSingle();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::FRICTION) != 0) {
- newObj.friction = binaryReader.ReadSingle();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::ELASTICITY) != 0) {
- newObj.elasticity = binaryReader.ReadSingle();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::TRANSLUCENCY) != 0) {
- newObj.translucency = binaryReader.ReadSingle();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::VELOCITY) != 0) {
- newObj.velocity.x = binaryReader.ReadSingle();
- newObj.velocity.y = binaryReader.ReadSingle();
- newObj.velocity.z = binaryReader.ReadSingle();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::ACCELERATION) != 0) {
- newObj.acceleration.x = binaryReader.ReadSingle();
- newObj.acceleration.y = binaryReader.ReadSingle();
- newObj.acceleration.z = binaryReader.ReadSingle();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::OMEGA) != 0) {
- newObj.omega.x = binaryReader.ReadSingle();
- newObj.omega.y = binaryReader.ReadSingle();
- newObj.omega.z = binaryReader.ReadSingle();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::DEFAULT_SCRIPT) != 0) {
- newObj.default_script = (PScriptType)binaryReader.ReadUInt32();
- }
- if ((newObj.bitfield & (DWORD)PhysicsDescInfo::DEFAULT_SCRIPT_INTENSITY) != 0) {
- newObj.default_script_intensity = binaryReader.ReadSingle();
- }
- for (int i = 0; i < 9; ++i) {
- newObj.timestamps[i] = binaryReader.ReadUInt16();
- }
- binaryReader.ReadAlign();
- }
- };
|