Elaztek Developer Hub
Blamite Game Engine - Guerilla (Library)  00449.01.12.26.0555.blamite
The tag editor for the Blamite Game Engine.
block.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <string>
5 
6 #include "../fields.h"
7 
8 #ifdef GUERILLA_LIB_EXPORTS
9 #define GUERILLA_LIB_API __declspec(dllexport)
10 #else
11 #define GUERILLA_LIB_API __declspec(dllimport)
12 #endif
13 
15 class BlamTagField_Block;
17 class BlamTagField_Color;
20 class BlamTagField_Enum;
23 class BlamTagField_Int;
26 
31 {
32 public:
33  std::string name;
34  std::vector<BlamTagField*> fields;
35 
37 
46  BlamTagField* GetField(std::string field_id);
47 
57  BlamTagField* GetField(std::string field_id, BlamTagFieldType field_type);
58 
73  template <typename T> T* GetField(std::string field_id, BlamTagFieldType field_type = BlamTagFieldType::Unspecified)
74  {
75  if (std::is_same_v<T, BlamTagField_Bitfield>) return (T*)GetField(field_id, field_type);
76  else if (std::is_same_v<T, BlamTagField_Block>) return (T*)GetField(field_id, BlamTagFieldType::Block);
77  else if (std::is_same_v<T, BlamTagField_Boolean>) return (T*)GetField(field_id, BlamTagFieldType::Boolean);
78  else if (std::is_same_v<T, BlamTagField_Color>) return (T*)GetField(field_id, BlamTagFieldType::Color);
79  else if (std::is_same_v<T, BlamTagField_Comment>) return (T*)GetField(field_id, BlamTagFieldType::Comment);
80  else if (std::is_same_v<T, BlamTagField_Dataref>) return (T*)GetField(field_id, BlamTagFieldType::DataReference);
81  else if (std::is_same_v<T, BlamTagField_Enum>) return (T*)GetField(field_id, field_type);
82  else if (std::is_same_v<T, BlamTagField_Fieldref>) return (T*)GetField(field_id, BlamTagFieldType::Block);
83  else if (std::is_same_v<T, BlamTagField_Float32>) return (T*)GetField(field_id, BlamTagFieldType::Block);
84  else if (std::is_same_v<T, BlamTagField_Int>) return (T*)GetField(field_id, field_type);
85  else if (std::is_same_v<T, BlamTagField_Tagref>) return (T*)GetField(field_id, BlamTagFieldType::Block);
86  else if (std::is_same_v<T, BlamTagField_Vector>) return (T*)GetField(field_id, field_type);
87 
88  return nullptr;
89  };
90 
99  BlamTagBlockEntry* Copy();
100 
101  BlamTagField* GetFieldFromRelativeAddress(std::string address);
102 };
103 
114 {
115 public:
116  int entry_size = 0;
117  std::vector<BlamPluginField*> fields;
118 
119  int c_entry_count = 0;
120  int c_entry_offset = 0;
121  int max_entry_count = -1;
122 
129 
131 
140  BlamPluginField* GetField(std::string id);
141 
151  BlamPluginField* GetField(std::string id, BlamTagFieldType type);
152 
153  void UpdateOffsetData(int new_offset) override;
154  std::string GenerateXMLString() override;
155  std::string GenerateCppStructString(std::string line_prefix = "", BlamPluginExportOptions options = BlamPluginExportOptions()) override;
156  std::string GenerateCppClassString(std::string line_prefix = "") override;
157  bool ParseXMLData(rapidxml::xml_node<>* field_node) override;
158  BlamTagField* GenerateTagField(BlamTag* tag, void* address) override;
159  BlamTagField* GenerateTagField(BlamTag* tag) override;
160  BlamPluginField* Copy(BlamPlugin* new_plugin) override;
161 };
162 
173 {
174 public:
175  std::vector<BlamTagBlockEntry*> entries;
176 
183 
192  bool AddEntry(int offset = -1);
193 
201  bool DuplicateEntry(int index);
202 
210  bool DeleteEntry(int index);
211 
215  void DeleteAllEntries();
216 
226  BlamTagBlockEntry* CreateNewEntry();
227 
236  std::string GenerateXMLString(bool keep_unused, bool keep_invalid);
237 
243  std::vector<char> GetEntryDataAsBytes();
244 
245  std::string GenerateXMLString() override;
246  std::vector<char> GetValueAsBytes() override;
247 };
BlamTagField
Class representing a tag field.
Definition: fields.h:272
comment.h
block.h
BlamTagField::GetType
BlamTagFieldType GetType()
Retrieves the type of this field.
Definition: BlamTagField.cpp:19
BlamPluginField_Bitfield::Copy
BlamPluginField * Copy(BlamPlugin *new_plugin) override
Creates a copy of this plugin field.
Definition: BlamPluginField_Bitfield.cpp:322
BlamPluginField::GenerateTagField
virtual BlamTagField * GenerateTagField(BlamTag *tag)
Generates a new tag field from this plugin field.
Definition: BlamPluginField.cpp:41
BlamPluginExportOptions::generate_doxygen_comments
bool generate_doxygen_comments
Whether or not to include doxygen-compatible comments when generating the tag struct.
Definition: fields.h:29
bitfield.h
BlamPluginField_Block::entry_size
int entry_size
The size of a each block entry.
Definition: block.h:116
BlamTagBlockEntry::Copy
BlamTagBlockEntry * Copy()
Creates a copy of this block entry.
Definition: BlamTagBlockEntry.cpp:48
BlamTagBlockEntry::GetField
T * GetField(std::string field_id, BlamTagFieldType field_type=BlamTagFieldType::Unspecified)
Locates a field within the entry with a specified ID and type.
Definition: block.h:73
BlamPluginField_Bitfield::GenerateCppClassString
std::string GenerateCppClassString(std::string line_prefix="") override
Generates a string containing C++ code representing this plugin field.
Definition: BlamPluginField_Bitfield.cpp:111
BlamPluginField_Block::GetField
BlamPluginField * GetField(std::string id)
Locates a field within the entry template with a specified ID.
Definition: BlamPluginField_Block.cpp:25
BlamTagField_Bitfield::bits
std::vector< BlamBitfieldBitData > bits
The list of bits within this bitfield.
Definition: bitfield.h:68
tags.h
BlamTagField::GetPluginField
BlamPluginField * GetPluginField()
Retrieves the plugin data associated with this field, if available.
Definition: BlamTagField.cpp:29
BlamPluginField::GenerateXMLString
virtual std::string GenerateXMLString()
Generates a string representing this plugin field.
Definition: BlamPluginField.cpp:61
BlamTagField::GetTag
BlamTag * GetTag()
Retrieves the tag associated with this field.
Definition: BlamTagField.cpp:24
BlamPlugin::ParseField
BlamPluginField * ParseField(rapidxml::xml_node<> *field_node)
Attempts to parse an XML node as a plugin field.
Definition: BlamPlugin.cpp:69
BlamTagField_Block::entries
std::vector< BlamTagBlockEntry * > entries
The list of entries within this block.
Definition: block.h:175
BlamPluginField_Block::~BlamPluginField_Block
~BlamPluginField_Block()
Definition: BlamPluginField_Block.cpp:15
BlamPluginField_Block::GenerateCppStructString
std::string GenerateCppStructString(std::string line_prefix="", BlamPluginExportOptions options=BlamPluginExportOptions()) override
Generates a string containing C++ code representing this plugin field.
Definition: BlamPluginField_Block.cpp:100
BlamPluginField::default_value
std::string default_value
The default text value for the field.
Definition: fields.h:113
BlamPluginExportOptions::include_comments
bool include_comments
Whether or not to include comment fields when generating the tag data structure.
Definition: fields.h:28
BlamTagField::field_id
std::string field_id
The ID of this field.
Definition: fields.h:284
BlamPluginField_Bitfield::GenerateTagField
BlamTagField * GenerateTagField(BlamTag *tag, void *address) override
Generates a new tag field from this plugin field.
Definition: BlamPluginField_Bitfield.cpp:216
BlamPluginField::input_hint
std::string input_hint
An additional piece of short text that can be used to suggest valid input for a field.
Definition: fields.h:111
BlamPluginField::GetType
BlamTagFieldType GetType()
Retrieves the type of this field.
Definition: BlamPluginField.cpp:31
BlamPluginField_Bitfield::GenerateXMLString
std::string GenerateXMLString() override
Generates a string representing this plugin field.
Definition: BlamPluginField_Bitfield.cpp:23
BlamTagField_Block::GenerateXMLString
std::string GenerateXMLString(bool keep_unused, bool keep_invalid)
Generates a string with the field ID and value, ready to be written to an XML file.
Definition: BlamTagField_Block.cpp:133
BlamTagBlockEntry
Data structure representing a tag block entry.
Definition: block.h:30
BlamTagField_Block::DeleteAllEntries
void DeleteAllEntries()
Deletes all block entries from the field.
Definition: BlamTagField_Block.cpp:82
BlamTagField_Block::GetEntryDataAsBytes
std::vector< char > GetEntryDataAsBytes()
Compiles the entry data into a list of bytes.
Definition: BlamTagField_Block.cpp:211
BlamBitfieldBitData::id
std::string id
The ID of the bit.
Definition: bitfield.h:30
BlamTagField_Float32
Class representing a real (float32) tag field.
Definition: float32.h:33
BlamBitfieldBitInfo::index
int index
The bit's index.
Definition: bitfield.h:22
BlamPluginField_Comment::GenerateCppStructString
std::string GenerateCppStructString(std::string line_prefix="", BlamPluginExportOptions options=BlamPluginExportOptions()) override
Generates a string containing C++ code representing this plugin field.
Definition: BlamPluginField_Comment.cpp:79
BlamPluginField_Block
Class representing a block plugin field.
Definition: block.h:113
BlamTagField::GenerateXMLString
virtual std::string GenerateXMLString()
Generates a string with the field ID and value, ready to be written to an XML file.
Definition: BlamTagField.cpp:9
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:230
BlamPlugin::file_path
std::string file_path
The path to the plugin file.
Definition: tags.h:135
BlamTagField_Bitfield::HasBit
bool HasBit(std::string flag_id)
Checks if a given bitfield flag exists.
Definition: BlamTagField_Bitfield.cpp:168
BlamPluginField::UpdateOffsetData
virtual void UpdateOffsetData(int new_offset)
Updates any offsets or lengths for the given field.
Definition: BlamPluginField.cpp:91
BlamTagField_Tagref
Class representing an tagref tag field.
Definition: tagref.h:42
BlamBitfieldBitInfo::id
std::string id
The ID of the bit.
Definition: bitfield.h:20
BlamTagField_Block::DeleteEntry
bool DeleteEntry(int index)
Deletes a specific block entry from the field.
Definition: BlamTagField_Block.cpp:63
BlamPluginField::display_name
std::string display_name
The display name of the field.
Definition: fields.h:108
BlamTagField_Bitfield
Clas representing a bitfield tag field.
Definition: bitfield.h:65
BlamTagField_Block
Class representing a block tag field.
Definition: block.h:172
BlamTagBlockEntry::GetField
BlamTagField * GetField(std::string field_id)
Locates a field within the entry with a specified ID.
Definition: BlamTagBlockEntry.cpp:16
BlamPluginField
Class representing a plugin field.
Definition: fields.h:98
BlamPluginField_Comment
Class representing a comment plugin field.
Definition: comment.h:30
BlamTagField_Bitfield::BlamTagField_Bitfield
BlamTagField_Bitfield(BlamTag *_tag, BlamTagFieldType _type)
Constructs a new bitfield tag field.
Definition: BlamTagField_Bitfield.cpp:15
BlamTagField_Dataref
Class representing a dataref tag field.
Definition: dataref.h:46
BlamTag
Class representing a Tag.
Definition: tags.h:319
BlamTagField_Block::GetValueAsBytes
std::vector< char > GetValueAsBytes() override
Retrieves the field value as a list of bytes.
Definition: BlamTagField_Block.cpp:185
BlamPluginField_Block::Copy
BlamPluginField * Copy(BlamPlugin *new_plugin) override
Creates a copy of this plugin field.
Definition: BlamPluginField_Block.cpp:254
BlamPluginField::BlamPluginField
BlamPluginField(BlamPlugin *_plugin, BlamTagFieldType _type)
Constructs a new plugin field.
Definition: BlamPluginField.cpp:9
BlamTagField_Block::BlamTagField_Block
BlamTagField_Block(BlamTag *_tag)
Constructs a new block tag field.
Definition: BlamTagField_Block.cpp:3
BlamTagBlockEntry::GetFieldFromRelativeAddress
BlamTagField * GetFieldFromRelativeAddress(std::string address)
Definition: BlamTagBlockEntry.cpp:71
BlamBitfieldBitData::value
bool value
The bit's value.
Definition: bitfield.h:31
BlamPluginField_Bitfield::GenerateCppStructString
std::string GenerateCppStructString(std::string line_prefix="", BlamPluginExportOptions options=BlamPluginExportOptions()) override
Generates a string containing C++ code representing this plugin field.
Definition: BlamPluginField_Bitfield.cpp:42
BlamPluginField_Block::GenerateXMLString
std::string GenerateXMLString() override
Generates a string representing this plugin field.
Definition: BlamPluginField_Block.cpp:84
GUERILLA_LIB_API
#define GUERILLA_LIB_API
Definition: block.h:11
BlamPluginField::Copy
virtual BlamPluginField * Copy(BlamPlugin *new_plugin)
Creates a copy of this plugin field.
Definition: BlamPluginField.cpp:229
BlamPluginField_Bitfield::BlamPluginField_Bitfield
BlamPluginField_Bitfield(BlamPluginField *base_field)
Constructs a new bitfield plugin field from an existing generic plugin field.
Definition: BlamPluginField_Bitfield.cpp:18
BlamPluginField::visible
bool visible
Whether or not the field is visible.
Definition: fields.h:107
BlamTagField::HasPluginField
bool HasPluginField()
Checks whether the field has plugin data available.
Definition: BlamTagField.cpp:34
BlamPluginField::ParseXMLData
virtual bool ParseXMLData(rapidxml::xml_node<> *field_node)
Populates data within the plugin field from an XML node.
Definition: BlamPluginField.cpp:106
BlamTagBlockEntry::fields
std::vector< BlamTagField * > fields
The list of fields within the entry.
Definition: block.h:34
BlamTagField_Enum
Class representing a tag enum field.
Definition: enum.h:80
BlamBitfieldBitInfo::name
std::string name
The display name of the bit.
Definition: bitfield.h:21
BlamTagBlockEntry::~BlamTagBlockEntry
~BlamTagBlockEntry()
Definition: BlamTagBlockEntry.cpp:6
BlamPlugin
Class representing a Plugin.
Definition: tags.h:93
BlamPluginField::field_id
std::string field_id
The ID of the field.
Definition: fields.h:110
BlamTagField_Int
Class representing an integer tag field.
Definition: int.h:33
BlamTagField_Comment
Class representing a comment tag field.
Definition: comment.h:71
BlamTagField_Block::CreateNewEntry
BlamTagBlockEntry * CreateNewEntry()
Creates a new block entry based on the plugin's entry template.
Definition: BlamTagField_Block.cpp:99
BlamTagField_Vector
Class representing a vector tag field.
Definition: vector.h:36
fields.h
BlamPluginField_Bitfield
Clas representing a bitfield plugin field.
Definition: bitfield.h:39
BlamPluginField::ChangeType
void ChangeType(BlamTagFieldType new_type)
Changes the type of a plugin field.
Definition: BlamPluginField.cpp:224
BlamPluginField_Bitfield::ParseXMLData
bool ParseXMLData(rapidxml::xml_node<> *field_node) override
Populates data within the plugin field from an XML node.
Definition: BlamPluginField_Bitfield.cpp:145
BlamPluginField_Block::c_entry_count
int c_entry_count
The entry count. Used in tag decompilation.
Definition: block.h:119
BlamPluginField_Block::fields
std::vector< BlamPluginField * > fields
The list of fields within the tag block.
Definition: block.h:117
BlamTagField_Block::DuplicateEntry
bool DuplicateEntry(int index)
Copies a specific block entry within the field.
Definition: BlamTagField_Block.cpp:42
BlamPluginField_Block::UpdateOffsetData
void UpdateOffsetData(int new_offset) override
Updates any offsets or lengths for the given field.
Definition: BlamPluginField_Block.cpp:67
Guerilla::Tags::Fields::GetStandardFieldLength
GUERILLA_LIB_API int GetStandardFieldLength(BlamTagFieldType type)
Retrieves the length of a tag field.
Definition: fields.cpp:122
BlamPluginField_Block::GenerateTagField
BlamTagField * GenerateTagField(BlamTag *tag, void *address) override
Generates a new tag field from this plugin field.
Definition: BlamPluginField_Block.cpp:231
BlamTagField::plugin_field
BlamPluginField * plugin_field
The plugin data associated with this field, if any.
Definition: fields.h:283
BlamPluginExportOptions::export_legacy_bitfields
bool export_legacy_bitfields
Whether or not to export bitfields using the legacy output method.
Definition: fields.h:43
BlamTagField_Boolean
Class representing a boolean tag field.
Definition: boolean.h:35
BlamTagField::BlamTagField
BlamTagField(BlamTag *_tag, BlamTagFieldType _type)
Constructs a new tag field.
Definition: BlamTagField.cpp:3
BlamTagField_Bitfield::SetBit
bool SetBit(std::string flag_id, bool value)
Sets the value of a bitfield flag.
Definition: BlamTagField_Bitfield.cpp:194
BlamPluginExportOptions
Data structure containing plugin export options.
Definition: fields.h:26
GUERILLA_SET_BITFIELD_BIT
#define GUERILLA_SET_BITFIELD_BIT(index)
Definition: BlamTagField_Bitfield.cpp:6
BlamPluginField::description
std::string description
An optional description of the field.
Definition: fields.h:109
BlamTagField_Fieldref
Class representing a fieldref tag field.
Definition: fieldref.h:38
BlamPluginField_Block::c_entry_offset
int c_entry_offset
The offset of the entry data. Used in tag decompilation.
Definition: block.h:120
BlamPluginField_Bitfield::bits
std::vector< BlamBitfieldBitInfo > bits
The list of bits within this bitfield.
Definition: bitfield.h:42
BlamPluginField_Block::GenerateCppClassString
std::string GenerateCppClassString(std::string line_prefix="") override
Generates a string containing C++ code representing this plugin field.
Definition: BlamPluginField_Block.cpp:137
BlamPluginField::GetPlugin
BlamPlugin * GetPlugin()
Retrieves the plugin this field is associated with.
Definition: BlamPluginField.cpp:36
BlamPluginField::require_unused_visible
bool require_unused_visible
If enabled, this field will only be visible when "Show Unused Fields" is enabled.
Definition: fields.h:112
BlamPluginField::offset
int offset
The offset of the field data.
Definition: fields.h:105
BlamTagBlockEntry::name
std::string name
The name of the entry.
Definition: block.h:33
BlamTagField_Bitfield::GetBitValue
bool GetBitValue(std::string flag_id)
Retrieves the value of a bitfield flag.
Definition: BlamTagField_Bitfield.cpp:181
GUERILLA_BITFIELD_DECOMPILE_SET_BITFIELD_BIT
#define GUERILLA_BITFIELD_DECOMPILE_SET_BITFIELD_BIT(index)
Definition: BlamPluginField_Bitfield.cpp:9
BlamBitfieldBitData
Data structure containing data for a bitfield bit.
Definition: bitfield.h:28
BlamTagField_Bitfield::GenerateXMLString
std::string GenerateXMLString()
Generates a string with the field ID and value, ready to be written to an XML file.
Definition: BlamTagField_Bitfield.cpp:20
BlamPluginField::GenerateCppClassString
virtual std::string GenerateCppClassString(std::string line_prefix="")
Generates a string containing C++ code representing this plugin field.
Definition: BlamPluginField.cpp:101
BlamPluginField::length
int length
The length of the field data.
Definition: fields.h:106
BlamTagField_Bitfield::GetValueAsBytes
std::vector< char > GetValueAsBytes()
Retrieves the field value as a list of bytes.
Definition: BlamTagField_Bitfield.cpp:54
BlamTagField_Block::AddEntry
bool AddEntry(int offset=-1)
Adds a new entry to the field.
Definition: BlamTagField_Block.cpp:8
BlamTagField_Block::GenerateXMLString
std::string GenerateXMLString() override
Generates a string with the field ID and value, ready to be written to an XML file.
Definition: BlamTagField_Block.cpp:128
BlamTagField::GetValueAsBytes
virtual std::vector< char > GetValueAsBytes()
Retrieves the field value as a list of bytes.
Definition: BlamTagField.cpp:14
BlamPluginField_Block::max_entry_count
int max_entry_count
The maximum number of entries this block can contain.
Definition: block.h:121
BlamPluginField_Block::BlamPluginField_Block
BlamPluginField_Block(BlamPluginField *base_field)
Constructs a new block plugin field from an existing generic plugin field.
Definition: BlamPluginField_Block.cpp:10
BlamPluginField_Block::ParseXMLData
bool ParseXMLData(rapidxml::xml_node<> *field_node) override
Populates data within the plugin field from an XML node.
Definition: BlamPluginField_Block.cpp:161
BlamPluginField::GenerateCppStructString
virtual std::string GenerateCppStructString(std::string line_prefix="", BlamPluginExportOptions options=BlamPluginExportOptions())
Generates a string containing C++ code representing this plugin field.
Definition: BlamPluginField.cpp:96
BlamBitfieldBitInfo
Data structure containing extra data for a bitfield bit.
Definition: bitfield.h:18
BlamTagField_Color
Class representing a color tag field.
Definition: color.h:34