Mercurial > mm7
diff Engine/Graphics/ParticleEngine.h @ 2496:5abd8fc8f1c6
for ITEM_ARTIFACT_LADYS_ESCORT
author | Ritor1 |
---|---|
date | Thu, 18 Sep 2014 17:38:54 +0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Engine/Graphics/ParticleEngine.h Thu Sep 18 17:38:54 2014 +0600 @@ -0,0 +1,199 @@ +#pragma once +#include "Render.h" + + + +enum ParticleType: unsigned __int32 +{ + ParticleType_Invalid = 0, + ParticleType_1 = 0x0001, + ParticleType_Rotating = 0x0004, + ParticleType_8 = 0x0008, + ParticleType_Diffuse = 0x0100, // colored plane + ParticleType_Line = 0x0200, // line + ParticleType_Bitmap = 0x0400, // textured planed + ParticleType_Sprite = 0x0800 +}; + +/* 305 */ +#pragma pack(push, 1) +struct Particle_sw +{ + unsigned int type; + float x; + float y; + float z; + float r; + float g; + float b; + unsigned int uDiffuse; + int timeToLive; + unsigned int uTextureID; + float flt_28; + int field_2C; + int field_30; + int field_34; + int field_38[12]; +}; +#pragma pack(pop) + + + +/* 109 */ +#pragma pack(push, 1) +struct Particle +{ + unsigned int type; + float x; + float y; + float z; + float flt_10; + float flt_14; + float flt_18; + union + { + struct + { + unsigned char r, g, b, a; + }; + unsigned int uParticleColor; + }; + int timeToLive; + unsigned int uTextureID; + float flt_28; + float _x; + float _y; + float _z; + int rotation_speed; + int angle; + int uScreenSpaceX; + int uScreenSpaceY; + int uScreenSpaceZ; // line end x + int uScreenSpaceW; // line end y + union + { + int sZValue; + struct + { + unsigned short object_pid; + short zbuffer_depth; + }; + }; + int sZValue2; // line end z + int _screenspace_scale; + float flt_5C; + float flt_60; + int uLightColor_bgr; +}; +#pragma pack(pop) + + + +/* 111 */ +#pragma pack(push, 1) +struct stru2_LineList +{ + unsigned int uNumLines; + RenderVertexD3D3 pLineVertices[48]; + char field_604[60]; +}; +#pragma pack(pop) + + + + + +/* 110 */ +#pragma pack(push, 1) +class ParticleEngine +{ +public: + ParticleEngine(); + + void ResetParticles(); + void AddParticle(Particle_sw *a2); + void Draw(); + void UpdateParticles(); + bool ViewProject_TrueIfStillVisible_BLV(unsigned int uParticleID); + bool ViewProject_TrueIfStillVisible_ODM(unsigned int uID); + void DrawParticles_BLV(); + void DrawParticles_ODM(); + + Particle pParticles[500]; + stru2_LineList pLines; + char field_D160[4800]; + float field_E420; + int uStartParticle; + int uEndParticle; + int uTimeElapsed; +}; +#pragma pack(pop) + + + + + + + + + + + +/* 160 */ +#pragma pack(push, 1) +struct TrailParticle // stru167 +{ + inline TrailParticle() + { + x = 0; + y = 0; + z = 0; + time_left = 0; + time_to_live = 0; + bgr16 = 0; + } + + char field_0; + char field_1; + char field_2; + char field_3; + char field_4; + char field_5; + __int16 x; + __int16 y; + __int16 z; + __int16 time_left; + __int16 time_to_live; + char field_10; + char field_11; + char field_12; + char field_13; + __int16 bgr16; + char field_16; + char field_17; +}; +#pragma pack(pop) + + +/* 363 */ +#pragma pack(push, 1) +struct TrailParticleGenerator // stru167_wrap +{ + public: + inline TrailParticleGenerator() + { + num_particles = 0; + } + + void GenerateTrailParticles(int x, int y, int z, int bgr16); + void UpdateParticles(); + + protected: + void AddParticle(int x, int y, int z, int bgr16); + + TrailParticle particles[100]; + int num_particles; + int field_964; +}; +#pragma pack(pop) +extern TrailParticleGenerator trail_particle_generator; // 005118E8 \ No newline at end of file