1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef IMODELPARSER_H
#define IMODELPARSER_H
#include <map>
#include <vector>
#include <string>
#include <set>
#include "System/Matrix44f.h"
#include "3DModel.h"
class IModelParser
{
public:
virtual S3DModel* Load(const std::string& name) = 0;
virtual ~IModelParser() {}
};
class CUnit;
class CAssParser;
class C3DModelLoader
{
public:
C3DModelLoader();
~C3DModelLoader();
void Update();
S3DModel* Load3DModel(std::string name, const float3& centerOffset = ZeroVector);
void DeleteLocalModel(CUnit* unit);
void CreateLocalModel(CUnit* unit);
typedef std::map<std::string, S3DModel*> ModelMap;
typedef std::map<std::string, IModelParser*> ParserMap;
private:
// FIXME make some static?
ModelMap cache;
ParserMap parsers;
std::vector<S3DModelPiece*> createLists;
std::set<CUnit*> fixLocalModels;
std::vector<LocalModel*> deleteLocalModels;
void CreateLists(S3DModelPiece* o);
void CreateListsNow(S3DModelPiece* o);
void DeleteChilds(S3DModelPiece* o);
void SetLocalModelPieceDisplayLists(CUnit* unit);
void SetLocalModelPieceDisplayLists(S3DModelPiece* model, LocalModel* lmodel, int* piecenum);
};
extern C3DModelLoader* modelParser;
#endif /* IMODELPARSER_H */
|