mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8755 3b4a5df2-a311-0410-b5c6-a8a6f20db521
75 lines
2.5 KiB
C++
75 lines
2.5 KiB
C++
#pragma once
|
|
#ifndef _LBT_LAYERS__H_
|
|
#define _LBT_LAYERS__H_
|
|
|
|
#include "LogicalBodyTypes/AbstractXMLLoader.h"
|
|
#include <stack>
|
|
|
|
namespace LogicalBodyTypes {
|
|
|
|
// Layers configuration implemented as singleton and loadable from XML.
|
|
class Layers : public AbstractXMLLoader, public Singleton<Layers> {
|
|
|
|
public:
|
|
using Singleton <Layers>::Instance;
|
|
struct LayerProperties {
|
|
char* identifier;
|
|
bool render;
|
|
bool renderShadows;
|
|
} typedef LayerProperties;
|
|
typedef std::vector <LayerProperties> LayerPropertiesVector;
|
|
|
|
private:
|
|
enum ParseState {
|
|
E_ELEMENT_LAYERS = FIRST_SUBCLASS_STATE,
|
|
E_ELEMENT_LAYER
|
|
};
|
|
typedef std::pair <UINT32, INT32> ZLevelPair;
|
|
typedef std::stack <ZLevelPair> ZStack;
|
|
typedef std::vector <ZStack> ZStackVector;
|
|
struct ParseData : public AbstractXMLLoader::ParseData { // shadow ParseData type and also extend the ParseData stuct of the base class
|
|
ParseData(XML_Parser* parser) : AbstractXMLLoader::ParseData(parser)
|
|
{
|
|
directionZStacks.resize(NUM_WORLD_DIRECTIONS);
|
|
};
|
|
ZStackVector directionZStacks;
|
|
} typedef ParseData;
|
|
struct LayerGraphNode {
|
|
INT32 zIndex;
|
|
LayerPropertiesVector::size_type index;
|
|
LayerProperties* pLayerProperties;
|
|
} typedef LayerGraphNode;
|
|
typedef std::list <LayerGraphNode> LayerGraph;
|
|
typedef std::vector <LayerGraph> LayerGraphsVector;
|
|
LayerPropertiesVector layers;
|
|
LayerGraphsVector directionLayerGraphs;
|
|
|
|
public:
|
|
typedef LayerGraph::iterator LayerGraphIterator;
|
|
|
|
public:
|
|
Layers(void);
|
|
~Layers(void);
|
|
LayerPropertiesVector::size_type GetCount();
|
|
// returns -1 if layer doesn't exist
|
|
LayerPropertiesVector::size_type GetIndex(std::string& identifier);
|
|
const Layers::LayerProperties& GetLayerProperties(LayerPropertiesVector::size_type index);
|
|
LayerGraphIterator GetIterator(WorldDirections direction);
|
|
LayerGraphIterator GetIterationEnd(WorldDirections direction);
|
|
LayerGraphIterator GetIterator(INT8 direction);
|
|
LayerGraphIterator GetIterationEnd(INT8 direction);
|
|
|
|
private:
|
|
static void XMLCALL StartElementHandle(void* userData, const XML_Char* name, const XML_Char** atts);
|
|
static void XMLCALL CharacterDataHandle(void* userData, const XML_Char* str, int len);
|
|
static void XMLCALL EndElementHandle(void* userData, const XML_Char* name);
|
|
void AddLayerGraphNode(WorldDirections dir, std::string identifier, bool render, bool renderShadows, INT32 zIndex);
|
|
static AbstractXMLLoader::ParseData* MakeParseData(XML_Parser* parser); // shadow factory function for ParseData instances
|
|
void UpdateConfiguration();
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|