File: Quake3MapReader.h

package info (click to toggle)
darkradiant 3.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,080 kB
  • sloc: cpp: 264,743; ansic: 10,659; python: 1,852; xml: 1,650; sh: 92; makefile: 21
file content (52 lines) | stat: -rw-r--r-- 1,422 bytes parent folder | download | duplicates (6)
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
#pragma once

#include <map>
#include "inode.h"
#include "imapformat.h"
#include "parser/DefTokeniser.h"

namespace map {

class Quake3MapReader :
	public IMapReader
{
protected:
	IMapImportFilter& _importFilter;

	// The map type for one entity's keyvalues (spawnargs)
	typedef std::map<std::string, std::string> EntityKeyValues;

	// The number of entities found in this map file so far
	std::size_t _entityCount;

	// The number of primitives of the currently parsed entity
	std::size_t _primitiveCount;

	// Our list of primitive parsers
	typedef std::map<std::string, PrimitiveParserPtr> PrimitiveParsers;
	PrimitiveParsers _primitiveParsers;

public:
	Quake3MapReader(IMapImportFilter& importFilter);

	// IMapReader implementation
	virtual void readFromStream(std::istream& stream);

protected:
	// Set up our set of primitive parsers
	virtual void initPrimitiveParsers();

	// Adds a specific primitive parser
	virtual void addPrimitiveParser(const PrimitiveParserPtr& parser);

	// Parses an entity plus all child primitives, throws on failure
	virtual void parseEntity(parser::DefTokeniser& tok);

	// Parse the primitive block and insert the child into the given parent
	virtual void parsePrimitive(parser::DefTokeniser& tok, const scene::INodePtr& parentEntity);

	// Create an entity with the given properties and layers
	scene::INodePtr createEntity(const EntityKeyValues& keyValues);
};

} // namespace map