Files
firestorm/Gameleap/code/mw4/Libraries/elementrenderer/GridElement.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

197 lines
4.4 KiB
C++

#pragma once
#include "ElementRenderer.hpp"
#include "ListElement.hpp"
//#########################################################################
//######################### GridElement ###############################
//#########################################################################
namespace ElementRenderer {
class GroupElement;
class GridElement:
public ListElement
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Initialization
//
public:
static void InitializeClass();
static void TerminateClass();
static ClassData *DefaultData;
typedef ListElement BaseClass;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Constructors/Destructors
//
protected:
GridElement(
ClassData *class_data,
Stuff::MemoryStream *stream,
int version,
ShapeHolder shapes
);
public:
GridElement(
BYTE row_size,
BYTE column_size,
Stuff::Scalar row_offset,
Stuff::Scalar column_offset,
Stuff::Scalar total_row_size,
Stuff::Scalar total_column_size,
ClassData *class_data=DefaultData
);
~GridElement();
static GridElement* Make(
Stuff::MemoryStream *stream,
int version,
ShapeHolder shapes=NULL
);
void Save(Stuff::MemoryStream *stream);
static HGOSHEAP s_Heap;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Testing
//
public:
void TestInstance();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Hierarchy
//
public:
void AttachIndexedChild(
BYTE row,
BYTE column,
Element *element
);
Element* GetIndexedElement(
BYTE row,
BYTE column
)
{Check_Object(this); return m_list[row*m_columnCellCount+column];}
Element* GetIndexedElement(WORD index)
{Check_Object(this); return m_list[index];}
WORD FindElementIndex(
Stuff::Scalar row,
Stuff::Scalar column
);
void FindRowAndColumn(
WORD index,
BYTE *row,
BYTE *column
)
{
Check_Object(this);
if (index != 0)
*row = static_cast<BYTE>(index/m_columnCellCount);
else
*row = 0;
*column = static_cast<BYTE>(index-(*row*m_columnCellCount));
}
void SetSize(WORD total_cells);
void SetSize(
BYTE row_size,
BYTE column_size
);
void GetSize(
BYTE* row_size,
BYTE* column_size
)
{
Check_Object(this); Check_Pointer(row_size); Check_Pointer(column_size);
*row_size = m_rowCellCount; *column_size = m_columnCellCount;
}
void GetDimensions(
Stuff::Scalar *row_offset,
Stuff::Scalar *column_offset,
Stuff::Scalar *row_cell_size,
Stuff::Scalar *column_cell_size
);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Sync support
//
protected:
void SetSyncState();
static SyncMethod SyncMethods[4];
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Culling
//
protected:
virtual void SetCullState();
static CullMethod CullMethods;
int GridCullMethod(CameraElement *camera);
bool GridRayCullMethod(CollisionQuery *query);
int GridSphereTestMethod(SphereTest *test);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Collision
//
public:
typedef void* (*CellTest)(
GridElement *grid,
WORD cell,
CollisionQuery *query,
Stuff::Scalar enter,
Stuff::Scalar leave
);
void* IterateLine(
CollisionQuery *query,
CellTest test_function
);
protected:
bool CastCulledRay(CollisionQuery *query);
Element* FindSmallestElementContainingCulled(SphereTest *test);
static void* TestCell(
GridElement *grid,
WORD cell,
CollisionQuery *query,
Stuff::Scalar enter,
Stuff::Scalar leave
);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Drawing
//
protected:
void SetDrawState();
static DrawMethod DrawMethods[DrawStateCount];
void InheritDrawMethod(
CameraElement *camera,
const StateChange *inherited_state,
int clipping_state
);
void OverrideDrawMethod(
CameraElement *camera,
const StateChange *inherited_state,
int clipping_state
);
BYTE m_rowCellCount, m_columnCellCount;
Stuff::Scalar m_rowCellSize, m_columnCellSize;
Stuff::Scalar m_rowOffset, m_columnOffset;
};
}