view Engine/Graphics/ParticleEngine.h @ 2563:65c97624c047

Saving & loading works from both main menu and game
author a.parshin
date Tue, 19 May 2015 22:00:56 +0200
parents 5abd8fc8f1c6
children
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 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