ACE3/extensions/common/p3d/model_info.hpp
jaynus e22080db3a Reworked with test p3d.
Animations accessible. Pass map of animation names and phases and pass a vector of the lods you want to animate.

Dynamic loading humbuggery.

Added: A3->Extension animation state sync framework done. Test cases for animations created.

Apply animation phases from game to test case render.

Continuing finalization. rotation_offset was reversed for zero_distance, thats fixed but still off. Rendering test hard-coded for container LOD temporarily.

Rotation translation corrected.

Removed: Scale flipping, these should work now but they dont.

Debug logging, debug model.

Correct parameters to extension.

Stability fixes.

Animations nearly aligning correctly.

scale, rotation and translation work; still not working. Back compat for v60 p3d's fully implemented.

Add vehicle ID to animation state send.

cmake bullet integration from submodule.

WINVER forced for all builds.

More bullet + windows + cmake fun.

Remove LinaerMath.

Testing for nou.

typo

Fixed: Pathing bug.

Vehicle damage working set for Nou.
2015-05-12 16:37:01 -07:00

74 lines
4.4 KiB
C++

#pragma once
#include "shared.hpp"
#include "vector.hpp"
#include "skeleton.hpp"
#include "lod_types.hpp"
#include <sstream>
namespace ace {
namespace p3d {
class model_info {
public:
model_info();
model_info(std::istream &, const uint32_t lod_count, uint32_t version = 68);
~model_info();
public:
std::vector<int> resolutions;
float *raw_resolutions;//LodTypes[Header.NoOfLods];// alias resolutions
uint32_t index; // appears to be a bit flag, 512, 256 eg
float lod_sphere_mem;
float lod_sphere_geo; // mostly same as MemLodSphere
uint32_t point_flags[3]; // typically 00 00 00 00 00 00 00 00 00 00 0C 00 eg (last is same as user point flags)
ace::vector3<float> offset_1; // model offset (unknown functionality),//mostly same as offset2
uint32_t map_icon_color; // RGBA 32 color
uint32_t map_selected_color; // RGBA 32 color
float view_density; //
ace::vector3<float> bbox_min_pos; // minimum coordinates of bounding box
ace::vector3<float> bbox_max_pos; // maximum coordinates of bounding box. Generally the complement of the 1st
// pew.GeometryBounds in Pew is bboxMinPosition-bboxMaxPosition for X and Z
// pew.ResolutionBounds mostly the same
ace::vector3<float> center_of_gravity; // pew.GeometryAutoCenterPos (and mostly pew.ResolutionAutoCenterPos too)
ace::vector3<float> offset_2; // mostly same as Offset1 often same as CentreOfGravity (but it isn't ResolutionPos)
ace::vector3<float> cog_offset; // see below
ace::vector3<float> mass_vectors[3]; // for ODOL7 this is a mixture of floats and index values
//// if Arma3 /////////////////
uint8_t thermal_profile_2[24];
///////////////////////////////
bool autocenter;
bool lock_autocenter;
bool allow_occlude;
bool allow_occluded;
bool allow_animation;
///////////ARMA/VBS2 ////////////
uint8_t u_bytes_1[6]; //
uint8_t thermal_profile[24]; //
uint32_t u_long_1; // V48 and beyond
//uint8_t thermal_profile[24]; // TOH only (v52) see above for arma3
skeleton_p skeleton; //
uint8_t u_byte_1;
uint32_t u_floats_1_size; // always zero for arma
float *u_floats_1; // potentially compressed
float mass;
float mass_reciprocal; // see note
float mass_alt; // see note
float mass_alt_reciprocoal; // see note
uint8_t u_bytes_2[14]; // see note generally FF FF FF FF FF FF FF FF FF FF FF FF
uint8_t u_short_1; // often same as NoOfLods
bool u_bool_1; // generally set if ascii below has strings
std::string class_type; // asciiz ClassType; // class="House" See Named Properties
std::string destruct_type; //DestructType; // damage="Tent" See Named Properties
bool u_bool_2; // rarely true
bool u_bool_3; // rarely true
uint32_t u_long_2; //
uint8_t *default_indicators;//default_indicators[NoOfLods][12]; //generally FF FF FF FF FF FF FF FF FF FF FF FF
};
typedef std::shared_ptr<model_info> model_info_p;
};
};