summaryrefslogtreecommitdiff
path: root/scene/resources/scene_format_text.h
blob: 4f18af2b62830be822dd2bbdbc32004ee1c55f1d (plain)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#ifndef SCENE_FORMAT_TEXT_H
#define SCENE_FORMAT_TEXT_H

#include "io/resource_loader.h"
#include "io/resource_saver.h"
#include "os/file_access.h"
#include "scene/resources/packed_scene.h"
#include "variant_parser.h"



class ResourceInteractiveLoaderText : public ResourceInteractiveLoader {

	String local_path;
	String res_path;
	String error_text;

	FileAccess *f;

	VariantParser::StreamFile stream;

	struct ExtResource {
		String path;
		String type;
	};


	bool is_scene;
	String res_type;



//	Map<String,String> remaps;

	Map<int,ExtResource> ext_resources;

	int resources_total;
	int resource_current;
	String resource_type;

	VariantParser::Tag next_tag;

	mutable int lines;

	Map<String,String> remaps;
	//void _printerr();

	static Error _parse_sub_resources(void* p_self, VariantParser::Stream* p_stream,Ref<Resource>& r_res,int &line,String &r_err_str) { return reinterpret_cast<ResourceInteractiveLoaderText*>(p_self)->_parse_sub_resource(p_stream,r_res,line,r_err_str); }
	static Error _parse_ext_resources(void* p_self, VariantParser::Stream* p_stream,Ref<Resource>& r_res,int &line,String &r_err_str) { return reinterpret_cast<ResourceInteractiveLoaderText*>(p_self)->_parse_ext_resource(p_stream,r_res,line,r_err_str); }

	Error _parse_sub_resource(VariantParser::Stream* p_stream,Ref<Resource>& r_res,int &line,String &r_err_str);
	Error _parse_ext_resource(VariantParser::Stream* p_stream,Ref<Resource>& r_res,int &line,String &r_err_str);

	VariantParser::ResourceParser rp;


	Ref<PackedScene> packed_scene;


friend class ResourceFormatLoaderText;

	List<RES> resource_cache;
	Error parse_property(Variant& r_v, String &r_name);
	Error error;

	RES resource;

public:

	virtual void set_local_path(const String& p_local_path);
	virtual Ref<Resource> get_resource();
	virtual Error poll();
	virtual int get_stage() const;
	virtual int get_stage_count() const;

	void open(FileAccess *p_f);
	String recognize(FileAccess *p_f);
	void get_dependencies(FileAccess *p_f, List<String> *p_dependencies, bool p_add_types);
	Error rename_dependencies(FileAccess *p_f, const String &p_path,const Map<String,String>& p_map);


	~ResourceInteractiveLoaderText();

};



class ResourceFormatLoaderText : public ResourceFormatLoader {
public:

	virtual Ref<ResourceInteractiveLoader> load_interactive(const String &p_path,Error *r_error=NULL);
	virtual void get_recognized_extensions_for_type(const String& p_type,List<String> *p_extensions) const;
	virtual void get_recognized_extensions(List<String> *p_extensions) const;
	virtual bool handles_type(const String& p_type) const;
	virtual String get_resource_type(const String &p_path) const;
	virtual void get_dependencies(const String& p_path, List<String> *p_dependencies, bool p_add_types=false);
	virtual Error rename_dependencies(const String &p_path,const Map<String,String>& p_map);


};


class ResourceFormatSaverTextInstance  {

	String local_path;

	Ref<PackedScene> packed_scene;

	bool takeover_paths;
	bool relative_paths;
	bool bundle_resources;
	bool skip_editor;
	FileAccess *f;
	Set<RES> resource_set;
	List<RES> saved_resources;
	Map<RES,int> external_resources;
	Map<RES,int> internal_resources;

	void _find_resources(const Variant& p_variant,bool p_main=false);
	void write_property(const String& p_name,const Variant& p_property,bool *r_ok=NULL);

public:

	Error save(const String &p_path,const RES& p_resource,uint32_t p_flags=0);


};

class ResourceFormatSaverText : public ResourceFormatSaver {
public:
	static ResourceFormatSaverText* singleton;
	virtual Error save(const String &p_path,const RES& p_resource,uint32_t p_flags=0);
	virtual bool recognize(const RES& p_resource) const;
	virtual void get_recognized_extensions(const RES& p_resource,List<String> *p_extensions) const;

	ResourceFormatSaverText();
};


#endif // SCENE_FORMAT_TEXT_H