view Engine/Graphics/DecalBuilder.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 f2f2595fe308
line wrap: on
line source

#pragma once

#include <cstdint>

#include "Render.h"

/*  158 */
#pragma pack(push, 1)
struct Bloodsplat
{
  //----- (0043B538) --------------------------------------------------------
  inline Bloodsplat()
  {
    this->field_1C = 0;
    this->field_20 = 0;
    //this->field_24 = 0;
    //this->vdestructor_ptr = &Bloodsplat_pvdtor;
  }

  //----- (0043B54C) --------------------------------------------------------
  //void  Bloodsplat::vdtor(Bloodsplat *this, char a2)

  //----- (0043B569) --------------------------------------------------------
  virtual ~Bloodsplat()
  {
  }

  //void ( ***vdestructor_ptr)(Bloodsplat *, bool);
  float x;
  float y;
  float z;
  float radius;
  float dot_dist;
  unsigned char r;
  unsigned char g;
  unsigned char b;
  char field_1B;
  int field_1C;
  unsigned long long field_20;
  //int field_24;
};
#pragma pack(pop)

/*  159 */
#pragma pack(push, 1)
struct BloodsplatContainer
{
  //----- (0043B688) --------------------------------------------------------
  inline BloodsplatContainer()
  {
  /*_eh_vector_constructor_iterator_(
    this->std__vector_pBloodsplats,
    40,
    64,
    (void ( *)(void *))Bloodsplat::Bloodsplat,
    (void ( *)(void *))Bloodsplat::dtor);
  v1->std__vector_pBloodsplats_size = 0;*/
    uNumBloodsplats = 0;
  }
  //----- (0043B6D6) --------------------------------------------------------
  virtual ~BloodsplatContainer()
  {
    //this->vdestructor_ptr = &BloodsplatContainer_pvdtor;
    //_eh_vector_destructor_iterator_(this->std__vector_pBloodsplats, 40, 64, Bloodsplat::dtor);
  }


  void AddBloodsplat(float x, float y, float z, float r, float g, float b, float radius, int a8, int a9);
  void AddBloodsplat(float x, float y, float z, float radius, unsigned char r, unsigned char g, unsigned char b);


  //void ( ***vdestructor_ptr)(BloodsplatContainer *, bool);
  Bloodsplat std__vector_pBloodsplats[64];
  unsigned int std__vector_pBloodsplats_size;
  int uNumBloodsplats;
};
#pragma pack(pop)

extern struct BloodsplatContainer *pBloodsplatContainer; // idb

#pragma pack(push, 1)
struct DecalBuilder_stru0
{
  double _43B570_get_color_mult_by_time();

  int field_0;
  int field_4;
  int field_8;
  int field_C;
  int field_10;
  int field_14;
  int field_18;
  int field_1C_flags;
  __int64 field_20_time;
};
#pragma pack(pop)



/*  181 */
#pragma pack(push, 1)
struct Decal
{
  void Decal_base_ctor();
  //----- (0043B60C) --------------------------------------------------------
  inline Decal()
  {
    Decal_base_ctor();
    field_C1C = 0;
  }

  //----- (0043B625) --------------------------------------------------------
  //void  Decal::vdtor(Decal *this, bool a2)
  //----- (0043B641) --------------------------------------------------------
  virtual ~Decal()
  {
  }

  //void ( ***vdestructor_ptr)(Decal *, bool);
  int uNumVertices;
  RenderVertexSoft pVertices[64];
  __int16 field_C08;
  __int16 field_C0A;
  __int16 field_C0C;
  __int16 field_C0E;
  uint32_t uColorMultiplier;
  int field_C14;
  DecalBuilder_stru0 *field_C18;
  int field_C1C;
};
#pragma pack(pop)

/*  180 */
#pragma pack(push, 1)
struct DecalBuilder
{
  //----- (0049B408) --------------------------------------------------------
  DecalBuilder()
  {
    char *v2; // eax@1
    signed int v3; // ecx@1

    DecalBuilder* v1 = this;
    /*_eh_vector_constructor_iterator_(
    this->std__vector_pDecals,
    3104,
    1024,
    (void ( *)(void *))Decal::Decal,
    (void ( *)(void *))Decal::dtor);*/
  v1->std__vector_pDecals_size = 0;
  v1->field_308008 = 0;
  v2 = (char *)&v1->pVertices[0].flt_2C;
  v3 = 256;
  do
  {
    *(float *)v2 = 0.0;
    v2 += 48;
    --v3;
  }
  while ( v3 );
  }

  //----- (0049B471) --------------------------------------------------------
  virtual ~DecalBuilder()
  {}


  void AddBloodsplat(float x, float y, float z, float r, float g, float b, float radius, int a8, int a9);
  void Reset(unsigned int bPreserveBloodsplats);
  char ApplyDecals(int light_level, char a3, struct stru154 *a4, int a5, struct RenderVertexSoft *a6, struct IndoorCameraD3D_Vec4 *a7, char a8, unsigned int uSectorID);
  char _49B790_build_decal_geometry(int a2, char a3, Bloodsplat *a4, int a5, float a6, unsigned int uColorMultiplier, float a8, struct stru314 *a9, signed int a10, struct RenderVertexSoft *a11, char uClipFlags);
  bool ApplyBloodsplatDecals_IndoorFace(unsigned int uFaceID);
  char ApplyDecals_OutdoorFace(ODMFace *pFace);
  bool _49BE8A(struct Polygon *a2, Vec3_float_ *a3, float *a4, struct RenderVertexSoft *a5, unsigned int uStripType, char a7);
  void DrawDecals(float z_bias);
  void DrawBloodsplats();
  void DrawDecalDebugOutlines();



  //void ( ***vdestructor_ptr)(DecalBuilder *, bool);
  Decal std__vector_pDecals[1024];
  unsigned int std__vector_pDecals_size;
  int field_308008;
  RenderVertexSoft pVertices[256];
  int std__vector_30B00C[1024];
  int uNumDecals;
  float field_30C010;
  float field_30C014;
  float field_30C018;
  float field_30C01C;
  float field_30C020;
  float field_30C024;
  float field_30C028;
  float field_30C02C;
  float flt_30C030;
  float field_30C034;
};
#pragma pack(pop)

extern struct DecalBuilder *pDecalBuilder;