view ParticleEngine.h @ 760:7f1487b74571

some outdoor cleaning
author Gloval
date Sat, 23 Mar 2013 17:02:14 +0400
parents 574cc56e05e9
children 710cf848ad24
line wrap: on
line source

#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 flt_10;
  float flt_14;
  float flt_18;
  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 field_38;
  int _rotation;
  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;
};
#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)
struct ParticleEngine
{
  ParticleEngine();

  void ResetParticles();
  void AddParticle(Particle_sw *a2);
  void Draw();
  void UpdateParticles();
  bool ViewProject_TrueIfStillVisible(unsigned int uParticleID);
  bool _48B5B3(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)