Blamite Game Engine - blam!  00296.01.12.21.0102.blamite
The core library for the Blamite Game Engine.
fields.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 #include <d2d1.h>
5 #include <Strings/components/utils/string/string.h>
6 
7 #include "tags.h"
8 #include "components/3rdparty/imgui/imgui.h"
10 #include "components/3rdparty/imgui/extensions/imgui_extensions.h"
13 
14 #ifndef BLAM
15 #define BLAM
16 #endif
17 
18 typedef bool bitfield8[8];
19 typedef bool bitfield16[16];
20 typedef bool bitfield32[32];
21 typedef char ascii[32];
22 typedef char stringid[128];
23 
24 namespace Blam::Content::Tags
25 {
35  class TagField
36  {
37  public:
38  std::string display_name;
39  std::string extra_info;
40 
41  void* read_address;
43 
49  virtual void ShowImPropertyControl()
50  {
51  ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0), std::string("<field '" + display_name + "' has no imgui control available>").c_str());
52  }
53 
57  virtual void SetMemoryLocation(void* new_address)
58  {
59  read_address = new_address;
60  }
61 
72  virtual std::string GetFieldXMLString(int offset)
73  {
74  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
75  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
76 
77  std::string field_string = "<unknown id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"false\" />";
78 
79  return field_string;
80  }
81  };
82 
89  class AsciiField : public TagField
90  {
91  public:
92  AsciiField(std::string _display_name, std::string _extra_info)
93  {
94  display_name = _display_name;
95  extra_info = _extra_info;
96 
97  read_length = sizeof(ascii);
98  }
99 
101  {
102  ImGui::InputText(display_name.c_str(), (char*)read_address, read_length);
103 
104  if (extra_info.length() > 0)
105  {
106  ImGui::SameLine();
108  }
109  }
110 
111  std::string GetFieldXMLString(int offset)
112  {
113  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
114  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
115 
116  std::string field_string = "<ascii id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" length=\"" + std::to_string(read_length) + "\" visible=\"true\" />";
117 
118  return field_string;
119  }
120  };
121 
127  class Int32Field : public TagField
128  {
129  public:
130  Int32Field(std::string _display_name, std::string _extra_info)
131  {
132  display_name = _display_name;
133  extra_info = _extra_info;
134 
135  read_length = sizeof(int);
136  }
137 
139  {
140  ImGui::DragInt(display_name.c_str(), (int*)read_address, 1.0f);
141 
142  if (extra_info.length() > 0)
143  {
144  ImGui::SameLine();
146  }
147  }
148 
149  std::string GetFieldXMLString(int offset)
150  {
151  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
152  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
153 
154  std::string field_string = "<int32 id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\" />";
155 
156  return field_string;
157  }
158  };
159 
165  class Int16Field : public TagField
166  {
167  public:
168  Int16Field(std::string _display_name, std::string _extra_info)
169  {
170  display_name = _display_name;
171  extra_info = _extra_info;
172 
173  read_length = sizeof(short);
174  }
175 
177  {
178  int value_expand = *(short*)read_address;
179 
180  ImGui::DragInt(display_name.c_str(), &value_expand, 1.0f, -32768, 32767);
181 
182  *(short*)read_address = value_expand;
183 
184  if (extra_info.length() > 0)
185  {
186  ImGui::SameLine();
188  }
189  }
190 
191  std::string GetFieldXMLString(int offset)
192  {
193  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
194  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
195 
196  std::string field_string = "<int16 id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\" />";
197 
198  return field_string;
199  }
200  };
201 
207  class Int8Field : public TagField
208  {
209  public:
210  Int8Field(std::string _display_name, std::string _extra_info)
211  {
212  display_name = _display_name;
213  extra_info = _extra_info;
214 
215  read_length = sizeof(byte);
216  }
217 
219  {
220  int value_expand = *(byte*)read_address;
221 
222  ImGui::DragInt(display_name.c_str(), &value_expand, 1.0f, 0, 255);
223 
224  *(byte*)read_address = value_expand;
225 
226  if (extra_info.length() > 0)
227  {
228  ImGui::SameLine();
230  }
231  }
232 
233  std::string GetFieldXMLString(int offset)
234  {
235  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
236  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
237 
238  std::string field_string = "<int8 id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\" />";
239 
240  return field_id;
241  }
242  };
243 
250  class BooleanField : public TagField
251  {
252  public:
253  BooleanField(std::string _display_name, std::string _extra_info)
254  {
255  display_name = _display_name;
256  extra_info = _extra_info;
257 
258  read_length = sizeof(bool);
259  }
260 
262  {
263  ImGui::Checkbox(display_name.c_str(), (bool*)read_address);
264 
265  if (extra_info.length() > 0)
266  {
267  ImGui::SameLine();
269  }
270  }
271 
272  std::string GetFieldXMLString(int offset)
273  {
274  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
275  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
276 
277  std::string field_string = "<boolean id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\" />";
278 
279  return field_string;
280  }
281  };
282 
289  class ColorFloatField : public TagField
290  {
291  public:
292  ColorFloatField(std::string _display_name, std::string _extra_info)
293  {
294  display_name = _display_name;
295  extra_info = _extra_info;
296 
297  read_length = sizeof(D2D1_COLOR_F);
298  }
299 
301  {
302  ImGui::ColorEdit4(display_name.c_str(), (float*)read_address);
303 
304  if (extra_info.length() > 0)
305  {
306  ImGui::SameLine();
308  }
309  }
310 
311  std::string GetFieldXMLString(int offset)
312  {
313  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
314  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
315 
316  std::string field_string = "<colorf id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\" format=\"rgba\" />";
317 
318  return field_string;
319  }
320  };
321 
328  class EnumField : public TagField
329  {
330  private:
331  std::vector<std::string> options;
332  int* active_item = 0;
333 
334  public:
335  EnumField(std::string _display_name, std::string _extra_info, std::vector<std::string> _options)
336  {
337  display_name = _display_name;
338  extra_info = _extra_info;
339  options = _options;
340 
341  read_length = sizeof(int);
342  }
343 
345  {
346  active_item = (int*)read_address;
347 
348  if (ImGui::BeginCombo(display_name.c_str(), options.at(*active_item).c_str()))
349  {
350  for (int i = 0; i < options.size(); i++)
351  {
352  if (ImGui::Selectable(options.at(i).c_str()))
353  {
354  *active_item = i;
355  }
356  }
357 
358  ImGui::EndCombo();
359  }
360 
361  if (extra_info.length() > 0)
362  {
363  ImGui::SameLine();
365  }
366  }
367 
368  std::string GetFieldXMLString(int offset)
369  {
370  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
371  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
372 
373  std::string field_string = "<enum id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\">";
374 
375  for (int i = 0; i < options.size(); i++)
376  {
377  field_string += "<option id=\"" + field_id + "\" name=\"" + display_name + "\" value=\"" + std::to_string(i) + "\" visible=\"true\"/>";
378  }
379 
380  field_string += "</enum>";
381 
382  return field_string;
383  }
384  };
385 
391  class Bitfield8Field : public TagField
392  {
393  public:
394  std::vector<std::string> options;
396 
397  Bitfield8Field(std::string _display_name, std::string _extra_info, std::vector<std::string> _options)
398  {
399  display_name = _display_name;
400  extra_info = _extra_info;
401 
402  read_length = sizeof(bitfield8);
403 
404  options = _options;
405  }
406 
408  {
409  int region_height = (ImGui::GetStyle().WindowPadding.y * 2) + (max_items_to_show * 21) + ((max_items_to_show - 1) * ImGui::GetStyle().ItemSpacing.y);
410  int region_width = ImGui::CalcItemWidth();
411 
412 
413  ImGui::BeginChild(display_name.c_str(), ImVec2(region_width, region_height), true, ImGuiWindowFlags_HorizontalScrollbar);
414 
415  int max_bits_available = 0;
416 
417  if (options.size() > max_items_to_show)
418  {
419  max_bits_available = max_items_to_show;
420  }
421  else
422  {
423  max_bits_available = options.size();
424  }
425 
426  for (int i = 0; i < options.size(); i++)
427  {
428  void* prop_address = (char*)read_address + i;
429 
430  ImGui::Checkbox(options.at(i).c_str(), (bool*)prop_address);
431  }
432 
433  if (options.size() < max_items_to_show)
434  {
435  int unused_options = max_items_to_show - options.size();
436 
437  for (int i = 0; i < unused_options; i++)
438  {
439  bool helper_value = false;
440 
441  ImGui::Checkbox("", &helper_value);
442  ImGui::SameLine();
443  ImGui::TextDisabled("unused bit");
444  }
445  }
446 
447  ImGui::EndChild();
448 
449  ImGui::SameLine();
450  ImGui::Text(display_name.c_str());
451 
452  if (extra_info.length() > 0)
453  {
454  ImGui::SameLine();
456  }
457  }
458 
459  std::string GetFieldXMLString(int offset)
460  {
461  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
462  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
463 
464  std::string field_string = "<bitfield8 id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\">";
465 
466  for (int i = 0; i < options.size(); i++)
467  {
468  field_string += "<bit id=\"" + field_id + "\" name=\"" + display_name + "\" index=\"" + std::to_string(i) + "\" visible=\"true\"/>";
469  }
470 
471  field_string += "</bitfield8>";
472 
473  return field_string;
474  }
475  };
476 
482  class Bitfield16Field : public TagField
483  {
484  public:
485  std::vector<std::string> options;
486  int max_items_to_show = 16;
487 
488  Bitfield16Field(std::string _display_name, std::string _extra_info, std::vector<std::string> _options)
489  {
490  display_name = _display_name;
491  extra_info = _extra_info;
492 
493  read_length = sizeof(bitfield16);
494 
495  options = _options;
496  }
497 
499  {
500  int region_height = (ImGui::GetStyle().WindowPadding.y * 2) + (max_items_to_show * 21) + ((max_items_to_show - 1) * ImGui::GetStyle().ItemSpacing.y);
501  int region_width = ImGui::CalcItemWidth();
502 
503 
504  ImGui::BeginChild(display_name.c_str(), ImVec2(region_width, region_height), true, ImGuiWindowFlags_HorizontalScrollbar);
505 
506  int max_bits_available = 0;
507 
508  if (options.size() > max_items_to_show)
509  {
510  max_bits_available = max_items_to_show;
511  }
512  else
513  {
514  max_bits_available = options.size();
515  }
516 
517  for (int i = 0; i < options.size(); i++)
518  {
519  void* prop_address = (char*)read_address + i;
520 
521  ImGui::Checkbox(options.at(i).c_str(), (bool*)prop_address);
522  }
523 
524  if (options.size() < max_items_to_show)
525  {
526  int unused_options = max_items_to_show - options.size();
527 
528  for (int i = 0; i < unused_options; i++)
529  {
530  bool helper_value = false;
531 
532  ImGui::Checkbox("", &helper_value);
533  ImGui::SameLine();
534  ImGui::TextDisabled("unused bit");
535  }
536  }
537 
538  ImGui::EndChild();
539 
540  ImGui::SameLine();
541  ImGui::Text(display_name.c_str());
542 
543  if (extra_info.length() > 0)
544  {
545  ImGui::SameLine();
547  }
548  }
549 
550  std::string GetFieldXMLString(int offset)
551  {
552  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
553  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
554 
555  std::string field_string = "<bitfield16 id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\">";
556 
557  for (int i = 0; i < options.size(); i++)
558  {
559  field_string += "<bit id=\"" + field_id + "\" name=\"" + display_name + "\" index=\"" + std::to_string(i) + "\" visible=\"true\"/>";
560  }
561 
562  field_string += "</bitfield16>";
563 
564  return field_string;
565  }
566  };
567 
573  class Bitfield32Field : public TagField
574  {
575  public:
576  std::vector<std::string> options;
577  int max_items_to_show = 32;
578 
579  Bitfield32Field(std::string _display_name, std::string _extra_info, std::vector<std::string> _options)
580  {
581  display_name = _display_name;
582  extra_info = _extra_info;
583 
584  read_length = sizeof(bitfield32);
585 
586  options = _options;
587  }
588 
590  {
591  int region_height = (ImGui::GetStyle().WindowPadding.y * 2) + (max_items_to_show * 21) + ((max_items_to_show - 1) * ImGui::GetStyle().ItemSpacing.y);
592  int region_width = ImGui::CalcItemWidth();
593 
594 
595  ImGui::BeginChild(display_name.c_str(), ImVec2(region_width, region_height), true, ImGuiWindowFlags_HorizontalScrollbar);
596 
597  int max_bits_available = 0;
598 
599  if (options.size() > max_items_to_show)
600  {
601  max_bits_available = max_items_to_show;
602  }
603  else
604  {
605  max_bits_available = options.size();
606  }
607 
608  for (int i = 0; i < options.size(); i++)
609  {
610  void* prop_address = (char*)read_address + i;
611 
612  ImGui::Checkbox(options.at(i).c_str(), (bool*)prop_address);
613  }
614 
615  if (options.size() < max_items_to_show)
616  {
617  int unused_options = max_items_to_show - options.size();
618 
619  for (int i = 0; i < unused_options; i++)
620  {
621  bool helper_value = false;
622 
623  ImGui::Checkbox("", &helper_value);
624  ImGui::SameLine();
625  ImGui::TextDisabled("unused bit");
626  }
627  }
628 
629  ImGui::EndChild();
630 
631  ImGui::SameLine();
632  ImGui::Text(display_name.c_str());
633 
634  if (extra_info.length() > 0)
635  {
636  ImGui::SameLine();
638  }
639  }
640 
641  std::string GetFieldXMLString(int offset)
642  {
643  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
644  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
645 
646  std::string field_string = "<bitfield32 id=\"" + field_id + "\" name=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" visible=\"true\">";
647 
648  for (int i = 0; i < options.size(); i++)
649  {
650  field_string += "<bit id=\"" + field_id + "\" name=\"" + display_name + "\" index=\"" + std::to_string(i) + "\" visible=\"true\"/>";
651  }
652 
653  field_string += "</bitfield32>";
654 
655  return field_string;
656  }
657  };
658 
666  class CommentField : public TagField
667  {
668  public:
669  CommentField(std::string _display_name)
670  {
671  display_name = _display_name;
672  extra_info = "";
673 
674  read_length = 0;
675  }
676 
677  CommentField(std::string _display_name, std::string _extra_info)
678  {
679  display_name = _display_name;
680  extra_info = _extra_info;
681 
682  read_length = 0;
683  }
684 
686  {
687  ImGui::Text(display_name.c_str());
688  ImGui::NewLine();
689 
690  if (extra_info.length() > 0)
691  {
692  ImGui::Text(extra_info.c_str());
693  }
694  }
695 
696  std::string GetFieldXMLString(int offset)
697  {
698  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
699  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
700 
701  std::string field_string = "<comment title=\"" + display_name + "\" visible=\"true\">";
702 
703  field_string += extra_info;
704 
705  field_string += "</comment>";
706 
707  return field_string;
708  }
709  };
710 
717  class TagReference : public TagField
718  {
719  private:
720  std::vector<std::string> valid_classes;
721  int active_class_index = 0;
722  std::string active_tag_class_label;
723 
724  std::vector<tag_memory_data> filtered_tag_list;
725  int active_tag_index = 0;
726  public:
727  TagReference(std::string _display_name, std::string _extra_info, std::vector<std::string> _valid_classes)
728  {
729  display_name = _display_name;
730  extra_info = _extra_info;
731  valid_classes = _valid_classes;
732 
733  read_length = sizeof(tag_reference);
734  }
735 
736  std::string GetFieldXMLString(int offset);
737  void ShowImPropertyControl();
738  };
739 
745  class Block : public TagField
746  {
747  private:
748  float indent = 22.0f;
749 
750  public:
751  std::vector<TagField*> block_template;
752  int active_entry = 0;
754 
755  int entry_size = 0;
756 
757  Block(int _entry_size, std::string _display_name, std::string _extra_info, std::vector<TagField*> _block_template)
758  {
759  display_name = _display_name;
760  extra_info = _extra_info;
761  block_template = _block_template;
762  entry_size = _entry_size;
763 
764  read_length = sizeof(tag_block<void>);
765  }
766 
767  void SetMemoryLocation(void* new_address)
768  {
769  read_address = (char*)new_address/* + 1*/;
770  }
771 
772  std::string GetFieldXMLString(int offset)
773  {
774  std::string field_id = BlamStrings::Utils::String::ToLower(display_name);
775  field_id = BlamStrings::Utils::String::Replace(field_id, " ", "_");
776 
777  std::string field_string = "<reflexive id=\"" + field_id + "\" title=\"" + display_name + "\" offset=\"" + std::to_string(offset) + "\" entrySize=\"" + std::to_string(entry_size) + "\" visible=\"true\">";
778 
779  int field_offset = 0;
780 
781  for (int i = 0; i < block_template.size(); i++)
782  {
783  field_string += block_template.at(i)->GetFieldXMLString(field_offset);
784  field_offset += block_template.at(i)->read_length;
785  }
786 
787  field_string += "</reflexive>";
788 
789  return field_string;
790  }
791 
793  {
796  block_info->block_identifier[0] = 't';
797  block_info->block_identifier[1] = 'b';
798  block_info->block_identifier[2] = 'f';
799  block_info->block_identifier[3] = 'd';
800  block_info->block_identifier[4] = NULL;
801 
803  {
805  }
806  else if (active_entry < 0)
807  {
808  active_entry = 0;
809  }
810 
811 
812  if (ImGui::CollapsingHeader(display_name.c_str()))
813  {
814  ImGui::Indent(indent);
815 
816  std::string block_id = "block_" + display_name;
817 
818  ImGui::PushID(block_id.c_str());
819  if (ImGui::Button("Add"))
820  {
821  if (block_info->entry_count == 0)
822  {
823  // For the first entry, we can simply allocate a new block without having to free
824  // anything beforehand.
825 
826  void* new_entry_address = calloc(1, entry_size * (block_info->entry_count + 1));
827 
828  block_info->entry_data_address = new_entry_address;
829 
831  }
832  else
833  {
834  // If we already have existing entries, we need to allocate a new block of memory and
835  // copy the original data to it - then free the old memory block.
836 
837  void* new_data_address = calloc(1, entry_size * (block_info->entry_count + 1));
838 
839  void* old_address = block_info->entry_data_address;
840 
841  memcpy(new_data_address, block_info->entry_data_address, (entry_size * block_info->entry_count));
842 
843  block_info->entry_data_address = new_data_address;
844 
845  free(old_address);
846 
848  }
849  }
850 
851  ImGui::SameLine();
852 
853  if (ImGui::Button("Insert"))
854  {
855  Blam::Logger::LogEvent("not yet implemented");
856  }
857 
858  ImGui::SameLine();
859 
860  if (ImGui::Button("Duplicate"))
861  {
862  Blam::Logger::LogEvent("not yet implemented");
863  }
864 
865  ImGui::SameLine();
866 
867  if (ImGui::Button("Delete"))
868  {
869  Blam::Logger::LogEvent("not yet implemented");
870  }
871 
872  ImGui::SameLine();
873 
874  if (ImGui::Button("Delete All"))
875  {
876  Blam::Logger::LogEvent("not yet implemented");
877  }
878 
879  ImGui::SameLine();
880 
881  ImGui::PushItemWidth(70.0f);
882  if (ImGui::BeginCombo("entry", std::to_string(active_entry).c_str()))
883  {
884  for (int i = 0; i < block_info->entry_count; i++)
885  {
886  std::string label = "entry " + std::to_string(i);
887 
888  if (ImGui::Selectable(label.c_str()))
889  {
890  active_entry = i;
891  }
892  }
893 
894  ImGui::EndCombo();
895  }
896  ImGui::PopItemWidth();
897 
898  if (block_info->entry_count != 0)
899  {
900  void* entry_start_address = (char*)block_info->entry_data_address + (entry_size * active_entry);
901 
902  void* next_field_address = entry_start_address;
903 
904  for (int i = 0; i < block_template.size(); i++)
905  {
906  block_template[i]->SetMemoryLocation(next_field_address);
907 
908  block_template[i]->ShowImPropertyControl();
909 
910  next_field_address = (char*)block_template[i]->read_address + block_template[i]->read_length;
911  }
912  }
913  else
914  {
915  ImGui::Text("no entries found");
916  }
917 
918  ImGui::Unindent(indent);
919 
920  ImGui::PopID();
921  }
922  }
923  };
924 }
tag_block::entry_size
int entry_size
The size of each block entry.
Definition: tags.h:82
Blam::Content::Tags::TagReference
Class representing a tag reference, or tagref for short.
Definition: fields.h:717
Blam::DebugUI::Widgets::ShowHelpMarker
BLAM void ShowHelpMarker(const char *desc)
Shows a help indicator.
Definition: widgets.cpp:7
Blam::Content::Tags
Namespace containing things related to tag data.
Definition: bitmap.h:9
tag_block::entry_data_address
void * entry_data_address
The address of the blocks' entry data.
Definition: tags.h:83
Blam::Logger::LogEvent
BLAM void LogEvent(std::string message)
Logs a message to the log and/or console.
Definition: aliases.cpp:101
Blam::Content::Tags::CommentField::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:685
Blam::Content::Tags::TagReference::TagReference
TagReference(std::string _display_name, std::string _extra_info, std::vector< std::string > _valid_classes)
Definition: fields.h:727
tag_block< void >
Blam::Content::Tags::EnumField::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:368
Blam::Content::Tags::Block::active_entry
int active_entry
The index of the active entry.
Definition: fields.h:752
logger.h
Blam::Content::Tags::Int8Field::Int8Field
Int8Field(std::string _display_name, std::string _extra_info)
Definition: fields.h:210
Blam::Content::Tags::Bitfield8Field::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:407
ascii
char ascii[32]
Typedef for an ascii field, used in tag data definitions.
Definition: fields.h:21
Blam::Content::Tags::Int8Field::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:218
tags.h
Blam::Content::Tags::Bitfield32Field::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:589
Blam::Content::Tags::TagField::GetFieldXMLString
virtual std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:72
world.h
Blam::Content::Tags::CommentField::CommentField
CommentField(std::string _display_name)
Definition: fields.h:669
Blam::Content::Tags::Bitfield8Field::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:459
Blam::Content::Tags::AsciiField::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:100
Blam::Content::Tags::Bitfield16Field::Bitfield16Field
Bitfield16Field(std::string _display_name, std::string _extra_info, std::vector< std::string > _options)
Definition: fields.h:488
Blam::Content::Tags::AsciiField::AsciiField
AsciiField(std::string _display_name, std::string _extra_info)
Definition: fields.h:92
Blam::Content::Tags::Bitfield8Field
Class representing a bitfield8 tag field.
Definition: fields.h:391
Blam::Content::Tags::Block
Class representing a tag block, also referred to as a struct or reflexive in the modding community.
Definition: fields.h:745
Blam::Content::Tags::Bitfield16Field::max_items_to_show
int max_items_to_show
Maximum number of bitfield options to show.
Definition: fields.h:486
Blam::Content::Tags::Bitfield8Field::Bitfield8Field
Bitfield8Field(std::string _display_name, std::string _extra_info, std::vector< std::string > _options)
Definition: fields.h:397
Blam::Content::Tags::Bitfield8Field::options
std::vector< std::string > options
List of options available in the bitfield.
Definition: fields.h:394
Blam::Content::Tags::Block::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:772
Blam::Content::Tags::Bitfield16Field::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:550
Blam::Content::Tags::EnumField::EnumField
EnumField(std::string _display_name, std::string _extra_info, std::vector< std::string > _options)
Definition: fields.h:335
Blam::Content::Tags::Block::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:792
Blam::Content::Tags::Int8Field::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:233
bitfield8
bool bitfield8[8]
Typedef for a bitfield8 field, used in tag data definitions.
Definition: fields.h:18
Blam::Content::Tags::Int32Field::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:138
Blam::Content::Tags::EnumField
Class representing an enum tag field.
Definition: fields.h:328
Blam::Content::Tags::CommentField::CommentField
CommentField(std::string _display_name, std::string _extra_info)
Definition: fields.h:677
Blam::Content::Tags::AsciiField::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:111
Blam::Content::Tags::Int32Field::Int32Field
Int32Field(std::string _display_name, std::string _extra_info)
Definition: fields.h:130
Blam::Content::Tags::Int16Field::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:191
Blam::Content::Tags::ColorFloatField::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:311
Blam::Content::Tags::ColorFloatField
Class representing a color tag field.
Definition: fields.h:289
Blam::Content::Tags::TagReference::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.cpp:45
Blam::Content::Tags::ColorFloatField::ColorFloatField
ColorFloatField(std::string _display_name, std::string _extra_info)
Definition: fields.h:292
Blam::Content::Tags::BooleanField::BooleanField
BooleanField(std::string _display_name, std::string _extra_info)
Definition: fields.h:253
Blam::Content::Tags::Bitfield16Field::options
std::vector< std::string > options
List of options available in the bitfield.
Definition: fields.h:485
widgets.h
tag_block::entry_count
int entry_count
The number of entries within the tag block.
Definition: tags.h:84
Blam::Content::Tags::TagField::read_address
void * read_address
The address of the data the field is currently representing.
Definition: fields.h:41
Blam::Content::Tags::Bitfield32Field::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:641
Blam::Content::Tags::ColorFloatField::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:300
tag_reference
Structure representing a tag reference.
Definition: tags.h:112
Blam::Content::Tags::Block::block_template
std::vector< TagField * > block_template
The list of block entries in this block.
Definition: fields.h:751
Blam::Content::Tags::Int8Field
Class representing an int8 tag field.
Definition: fields.h:207
Blam::Content::Tags::Block::entry_size
int entry_size
The size of each block entry.
Definition: fields.h:755
Blam::Content::Tags::CommentField
Class representing a comment field.
Definition: fields.h:666
Blam::Content::Tags::Block::block_info
tag_block< void > * block_info
Pointer to the current block info being represented.
Definition: fields.h:753
Blam::Content::Tags::Int16Field::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:176
Blam::Content::Tags::TagField
Base class representing a tag field.
Definition: fields.h:35
tag_block::block_identifier
char block_identifier[6]
Special variable that is used for saving tag data to a file from within the engine....
Definition: tags.h:81
Blam::Content::Tags::TagField::read_length
int read_length
How many bytes to read from the start of the address.
Definition: fields.h:42
Blam::Content::Tags::TagField::extra_info
std::string extra_info
Additional information to show alongside the field.
Definition: fields.h:39
Blam::Content::Tags::Bitfield32Field
Class representing a bitfield32 tag field.
Definition: fields.h:573
Blam::Content::Tags::Int32Field
Class representing an int32 tag field.
Definition: fields.h:127
bitfield16
bool bitfield16[16]
Typedef for a bitfield16 field, used in tag data definitions.
Definition: fields.h:19
stringid
char stringid[128]
Typedef for a stringid field, used in tag data definitions.
Definition: fields.h:22
Blam::Content::Tags::Block::SetMemoryLocation
void SetMemoryLocation(void *new_address)
Sets the read location of the tag field.
Definition: fields.h:767
Blam::Content::Tags::Bitfield32Field::max_items_to_show
int max_items_to_show
Maximum number of bitfield options to show.
Definition: fields.h:577
Blam::Content::Tags::BooleanField::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:272
Blam::Content::Tags::Int16Field::Int16Field
Int16Field(std::string _display_name, std::string _extra_info)
Definition: fields.h:168
bitfield32
bool bitfield32[32]
Typedef for a bitfield32 field, used in tag data definitions.
Definition: fields.h:20
Blam::Content::Tags::Bitfield32Field::options
std::vector< std::string > options
List of options available in the bitfield.
Definition: fields.h:576
Blam::Content::Tags::AsciiField
Class representing an ascii tag field.
Definition: fields.h:89
Blam::Content::Tags::Bitfield8Field::max_items_to_show
int max_items_to_show
Maximum number of bitfield options to show.
Definition: fields.h:395
Blam::Content::Tags::TagField::SetMemoryLocation
virtual void SetMemoryLocation(void *new_address)
Sets the read location of the tag field.
Definition: fields.h:57
Blam::Content::Tags::TagField::display_name
std::string display_name
The display name of the tag field.
Definition: fields.h:38
Blam::Content::Tags::Bitfield16Field::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:498
Blam::Content::Tags::Block::Block
Block(int _entry_size, std::string _display_name, std::string _extra_info, std::vector< TagField * > _block_template)
Definition: fields.h:757
Blam::Content::Tags::EnumField::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:344
Blam::Content::Tags::TagReference::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.cpp:5
Blam::Content::Tags::BooleanField
Class representing a boolean tag field.
Definition: fields.h:250
Blam::Content::Tags::Int16Field
Class representing an int16 tag field.
Definition: fields.h:165
Blam::Content::Tags::Int32Field::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:149
Text
@ Text
Master text object that wraps around both BitmapText and DWText.
Definition: render_stack.h:73
Blam::Content::Tags::CommentField::GetFieldXMLString
std::string GetFieldXMLString(int offset)
Generates a string representing an XML node associated with this tag field, used for generating plugi...
Definition: fields.h:696
Blam::Content::Tags::TagField::ShowImPropertyControl
virtual void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:49
Blam::Content::Tags::Bitfield32Field::Bitfield32Field
Bitfield32Field(std::string _display_name, std::string _extra_info, std::vector< std::string > _options)
Definition: fields.h:579
Blam::Content::Tags::Bitfield16Field
Class representing a bitfield16 tag field.
Definition: fields.h:482
Blam::Content::Tags::BooleanField::ShowImPropertyControl
void ShowImPropertyControl()
Shows a set of ImGUI controls representing the tag field.
Definition: fields.h:261