File: LayerInfoFileModule.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 (63 lines) | stat: -rw-r--r-- 1,821 bytes parent folder | download | duplicates (3)
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
63
#pragma once

#include "imapinfofile.h"
#include <sstream>

namespace scene
{

class LayerInfoFileModule :
	public map::IMapInfoFileModule
{
private:
	// Number of node-to-layer mappings written
	std::size_t _layerInfoCount;

	// Buffer to hold our output
	std::stringstream _output;
	std::stringstream _layerNameBuffer;
	std::stringstream _layerHierarchyBuffer;

	// The list of layernames
    std::map<int, std::string> _layerNames;

    std::map<int, int> _layerParentIds;
    int _activeLayerId;
    std::vector<int> _hiddenLayerIds;

	typedef std::vector<scene::LayerList> LayerLists;
	LayerLists _layerMappings;

	// The standard list (node is part of layer 0)
	scene::LayerList _standardLayerList;

public:
	LayerInfoFileModule();

	std::string getName() override;

	void onInfoFileSaveStart() override;
	void onBeginSaveMap(const scene::IMapRootNodePtr& root) override;
	void onFinishSaveMap(const scene::IMapRootNodePtr& root) override;
	void onSavePrimitive(const INodePtr& node, std::size_t entityNum, std::size_t primitiveNum) override;
	void onSaveEntity(const INodePtr& node, std::size_t entityNum) override;
	void writeBlocks(std::ostream& stream) override;
	void onInfoFileSaveFinished() override;

	void onInfoFileLoadStart() override;
	bool canParseBlock(const std::string& blockName) override;
	void parseBlock(const std::string& blockName, parser::DefTokeniser& tok) override;
	void applyInfoToScene(const IMapRootNodePtr& root, const map::NodeIndexMap& nodeMap) override;
	void onInfoFileLoadFinished() override;

private:
	void saveNode(const INodePtr& node);
	void clear();

	void parseLayerNames(parser::DefTokeniser& tok);
	void parseNodeToLayerMapping(parser::DefTokeniser& tok);
	void parseLayerHierarchy(parser::DefTokeniser& tok);
	void parseLayerProperties(parser::DefTokeniser& tok);
};

}