Elaztek Developer Hub
Blamite Game Engine - Guerilla (Library)  00402.09.29.23.0627.blamite
The tag editor for the Blamite Game Engine.
fields.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 #include <vector>
5 #include <blam/api/v1/types/tags.h>
6 #include <Strings/components/3rdparty/rapidxml/rapidxml.hpp>
7 
8 #ifndef GUERILLA_LIB_INTERNAL
9 #define GUERILLA_LIB_INTERNAL
10 #endif
11 
12 #ifdef GUERILLA_LIB_EXPORTS
13 #define GUERILLA_LIB_API __declspec(dllexport)
14 #else
15 #define GUERILLA_LIB_API __declspec(dllimport)
16 #endif
17 
18 class BlamTag;
19 class BlamPlugin;
20 
31 {
32  ASM,
33  BASH,
34  C,
35  CPP,
36  CMK,
37  CS,
38  CSS,
39  GO,
40  HSC,
41  HTML,
42  INI,
43  JS,
44  JAVA,
45  JSON,
46  LUA,
47  MAKE,
48  PHP,
49  PY,
50  QML,
51  RUST,
52  SQL,
53  TEXT,
54  TS,
55  V,
56  VEX,
57  XML,
58  YAML,
59  NONE
60 };
61 
62 class BlamTagField;
63 
72 {
73 private:
74  BlamTagFieldType type = BlamTagFieldType::Unspecified;
75  BlamPlugin* plugin = nullptr;
76 
77 public:
78  int offset = 0x0;
79  int length = 0x0;
80  bool visible = true;
81  std::string display_name = "";
82  std::string description = "";
83  std::string field_id = "";
84  std::string input_hint = "";
85  bool require_unused_visible = false;
86  std::string default_value = "";
87 
94  BlamPluginField(BlamPlugin* _plugin, BlamTagFieldType _type);
95 
101  BlamPluginField(BlamPluginField* _old_field);
102 
108  BlamTagFieldType GetType();
109 
116 
126  virtual BlamTagField* GenerateTagField(BlamTag* tag);
127 
137  virtual BlamTagField* GenerateTagField(BlamTagField* existing_tag_field);
138 
150  virtual BlamTagField* GenerateTagField(BlamTag* tag, void* address);
151 
157  virtual std::string GenerateXMLString();
158 
168  virtual void UpdateOffsetData(int new_offset);
169 
180  virtual std::string GenerateCppStructString(std::string line_prefix = "", bool generate_doxygen_comments = true);
181 
193  virtual std::string GenerateCppClassString(std::string line_prefix = "");
194 
205  virtual bool ParseXMLData(rapidxml::xml_node<>* field_node);
206 
222  void ChangeType(BlamTagFieldType new_type);
223 };
224 
232 {
233 private:
234  BlamTagFieldType type = BlamTagFieldType::Unspecified;
235  BlamTag* tag = nullptr;
236 
237 public:
238  int c_entry_index = 0;
239  int c_entry_size = 0;
240  int c_file_offset = 0;
241 
242  BlamPluginField* plugin_field = nullptr;
243  std::string field_id = "";
244 
251  BlamTagField(BlamTag* _tag, BlamTagFieldType _type);
252 
258  virtual std::string GenerateXMLString();
259 
265  virtual std::vector<char> GetValueAsBytes();
266 
272  BlamTagFieldType GetType();
273 
279  BlamTag* GetTag();
280 
286  BlamPluginField* GetPluginField();
287 
293  bool HasPluginField();
294 };
295 
300 {
308  GUERILLA_LIB_API int GetStandardFieldLength(BlamTagFieldType type);
309 
317  GUERILLA_LIB_API BlamTagFieldType DetermineFieldType(std::string node_name);
318 
326  GUERILLA_LIB_API std::string GetFieldTypeName(BlamTagFieldType type);
327 
341  GUERILLA_LIB_API BlamPluginField* ConfigurePluginField(BlamPluginField* field, BlamTagFieldType field_type, bool* configured = nullptr);
342 
351 
361 
362  GUERILLA_LIB_API std::vector<BlamDatarefValueHintType> GetDatarefValueHintTypeList();
363  GUERILLA_LIB_API std::vector<BlamPluginField*> GetGlobalEnums(std::vector<BlamPluginField*> field_list, bool get_global_parents);
364 }
BlamTagField
Class representing a tag field.
Definition: fields.h:231
comment.h
BlamDatarefValueHintType::YAML
@ YAML
YAML Configuration.
BlamDatarefValueHintType::C
@ C
C Code.
block.h
BlamDatarefValueHintType
BlamDatarefValueHintType
Enumerator listing all supported dataref value hint types.
Definition: fields.h:30
BlamDatarefValueHintType::CMK
@ CMK
CMake Script.
bitfield.h
BlamPluginField_Tagref
Class representing an tagref plugin field.
Definition: tagref.h:20
BlamDatarefValueHintType::RUST
@ RUST
Rust Code.
Guerilla::Tags::Fields
Namespace containing functions relating to tag fields.
Definition: fields.h:299
boolean.h
BlamPluginField_Enum
Class representing a plugin enum field.
Definition: enum.h:31
verify_tag_field_name_map
void verify_tag_field_name_map()
Verifies that the tag field name map has the appropriate data.
Definition: fields.cpp:82
Guerilla::Tags::Fields::GetDatarefValueHintString
GUERILLA_LIB_API std::string GetDatarefValueHintString(BlamDatarefValueHintType value_hint)
Generates a string from a given dataref value hint type.
Definition: fields.cpp:326
dataref_value_hint_map
BlamMap< BlamDatarefValueHintType, std::string > dataref_value_hint_map
A map containing a collection of dataref value hint types.
Definition: fields.cpp:27
BlamDatarefValueHintType::CS
@ CS
C# Code.
BlamDatarefValueHintType::BASH
@ BASH
Bash Script.
BlamDatarefValueHintType::GO
@ GO
Go (Golang) Code.
BlamDatarefValueHintType::ASM
@ ASM
Assembly Code.
BlamDatarefValueHintType::VEX
@ VEX
Vex Code.
BlamPluginField_Vector
Class representing a vector plugin field.
Definition: vector.h:18
BlamDatarefValueHintType::TEXT
@ TEXT
Plain Text.
verify_dataref_value_hint_map
void verify_dataref_value_hint_map()
Verifies that the dataref value hint map has the appropriate data.
Definition: fields.cpp:41
BlamDatarefValueHintType::JSON
@ JSON
JSON Data.
BlamDatarefValueHintType::HTML
@ HTML
HTML Markup.
BlamDatarefValueHintType::JAVA
@ JAVA
Java Code.
Guerilla::Tags::GetPlugin
GUERILLA_LIB_API BlamPlugin * GetPlugin(std::string class_name)
Retrieves a plugin based on its name.
Definition: plugins.cpp:137
BlamPluginField_Int
Class representing an integer plugin field.
Definition: int.h:16
BlamPluginField_Block
Class representing a block plugin field.
Definition: block.h:68
BlamPluginField_Enum::define_in_global_scope
bool define_in_global_scope
Definition: enum.h:36
dataref.h
Guerilla::Tags::Fields::GetFieldTypeName
GUERILLA_LIB_API std::string GetFieldTypeName(BlamTagFieldType type)
Generates a string name based on the provided tag field type.
Definition: fields.cpp:235
tagref.h
BlamPluginField_Color
Class representing a color plugin field.
Definition: color.h:17
BlamPluginField
Class representing a plugin field.
Definition: fields.h:71
BlamPluginField_Comment
Class representing a comment plugin field.
Definition: comment.h:30
BlamTag
Class representing a Tag.
Definition: tags.h:277
BlamDatarefValueHintType::CPP
@ CPP
C++ Code.
Guerilla::Tags::Fields::GetDatarefValueHintTypeList
GUERILLA_LIB_API std::vector< BlamDatarefValueHintType > GetDatarefValueHintTypeList()
Definition: fields.cpp:350
BlamDatarefValueHintType::PY
@ PY
Python Code.
BlamDatarefValueHintType::NONE
@ NONE
No value hint, no special treatment will be given to the data.
fieldref.h
BlamPluginField_Dataref
Class representing a dataref plugin field.
Definition: dataref.h:17
BlamDatarefValueHintType::INI
@ INI
INI Configuration.
BlamDatarefValueHintType::LUA
@ LUA
Lua Script.
BlamDatarefValueHintType::SQL
@ SQL
SQL Statements.
BlamDatarefValueHintType::CSS
@ CSS
CSS Stylesheet.
BlamDatarefValueHintType::TS
@ TS
TypeScript Code.
Guerilla::Tags::Fields::DetermineFieldType
GUERILLA_LIB_API BlamTagFieldType DetermineFieldType(std::string node_name)
Determines the field type from a string, used to determine the field type when parsing XML tags and p...
Definition: fields.cpp:222
Guerilla::Tags::Fields::GetGlobalEnums
GUERILLA_LIB_API std::vector< BlamPluginField * > GetGlobalEnums(std::vector< BlamPluginField * > field_list, bool get_global_parents)
Definition: fields.cpp:387
BlamPlugin
Class representing a Plugin.
Definition: tags.h:79
fields.h
BlamPluginField_Fieldref
Class representing a fieldref plugin field.
Definition: fieldref.h:18
BlamPluginField_Bitfield
Clas representing a bitfield plugin field.
Definition: bitfield.h:39
Guerilla::Tags::Fields::ParseDatarefValueHint
GUERILLA_LIB_API BlamDatarefValueHintType ParseDatarefValueHint(std::string value_hint_str)
Determines a dataref value hint type from a string representation.
Definition: fields.cpp:337
BlamDatarefValueHintType::PHP
@ PHP
PHP Code.
BlamPluginField_Ascii
Class representing an ascii plugin field.
Definition: ascii.h:18
BlamPluginField_Block::fields
std::vector< BlamPluginField * > fields
The list of fields within the tag block.
Definition: block.h:72
tag_field_name_map
BlamMap< std::string, BlamTagFieldType > tag_field_name_map
A map containing a collection of tag field type/name mappings.
Definition: fields.cpp:34
float32.h
Guerilla::Tags::Fields::GetStandardFieldLength
GUERILLA_LIB_API int GetStandardFieldLength(BlamTagFieldType type)
Retrieves the length of a tag field.
Definition: fields.cpp:123
vector.h
BlamPluginField_Float32
Class representing a real (float32) plugin field.
Definition: float32.h:16
BlamDatarefValueHintType::JS
@ JS
JavaScript Code.
BlamDatarefValueHintType::QML
@ QML
QML Markup.
BlamPluginField_Boolean
Class representing a boolean plugin field.
Definition: boolean.h:18
color.h
BlamDatarefValueHintType::V
@ V
V Code.
ascii.h
Guerilla::Tags::Fields::ConfigurePluginField
GUERILLA_LIB_API BlamPluginField * ConfigurePluginField(BlamPluginField *field, BlamTagFieldType field_type, bool *configured=nullptr)
Configures a specialized plugin field based on a base plugin field, and the desired type.
Definition: fields.cpp:248
BlamPluginField_Enum::bound_to_global_enum
bool bound_to_global_enum
Definition: enum.h:39
BlamDatarefValueHintType::MAKE
@ MAKE
Make Script.
GUERILLA_LIB_API
#define GUERILLA_LIB_API
Definition: fields.h:15
int.h
BlamDatarefValueHintType::XML
@ XML
XML Markup.
BlamDatarefValueHintType::HSC
@ HSC
BlamScript/HaloScript Script.
enum.h