2D Run-and-gun shooter inspired by One Man's Doomsday, Counter-Strike, and Metal Slug.
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

98 linhas
3.0 KiB

  1. #include "IZ_config_guid.h"
  2. typedef SDL_GUID INI_ConfigDeserializeGUID(const char*);
  3. typedef void INI_ConfigSerializeGUID(SDL_GUID, const char[128]);
  4. typedef bool INI_ConfigLoadParamsGuidValidator(SDL_GUID);
  5. void INI_ConfigEnsureValidGuid(INI_ConfigItem* item, SDL_GUID raw_value, SDL_GUID default_value) {
  6. SDL_GUID* dest = item->dest;
  7. if (item->validator) {
  8. INI_ConfigLoadParamsGuidValidator* validate = item->validator;
  9. if (validate(raw_value)) {
  10. // within valid values
  11. *dest = raw_value;
  12. return;
  13. }
  14. // outside valid values, we use default value
  15. //
  16. // TODO: what if the default value is also invalid?
  17. *dest = default_value;
  18. return;
  19. }
  20. // no validator, get whatever is the deserialized value
  21. *dest = raw_value;
  22. }
  23. void INI_ConfigLoadGuid(INI_ConfigItem* item, const char* config_path, void* item_array) {
  24. static SDL_GUID raw_value;
  25. static SDL_GUID default_value = {
  26. .data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  27. };
  28. if (item->default_value) {
  29. default_value = *((SDL_GUID *) item->default_value);
  30. }
  31. char buffer[33];
  32. if (item->transformer.deserialize && item->transformer.serialize) {
  33. INI_ConfigDeserializeGUID* deserialize = item->transformer.deserialize;
  34. INI_ConfigSerializeGUID* serialize = item->transformer.serialize;
  35. const char serialized_default_value[33];
  36. serialize(default_value, serialized_default_value);
  37. ini_gets(item->section, item->key, serialized_default_value, buffer, 33, config_path);
  38. raw_value = deserialize(buffer);
  39. } else {
  40. char guid_string_default_value[33];
  41. SDL_GUIDToString(default_value, guid_string_default_value, 33);
  42. ini_gets(item->section, item->key, guid_string_default_value, buffer, 33, config_path);
  43. raw_value = SDL_GUIDFromString(buffer);
  44. }
  45. INI_ConfigEnsureValidGuid(item, raw_value, default_value);
  46. }
  47. INI_ConfigSaveItemResult INI_ConfigSaveGuid(INI_ConfigItem* item, const char* config_path, void* item_array) {
  48. SDL_GUID dest = *((SDL_GUID*) item->dest);
  49. if (item->validator) {
  50. INI_ConfigLoadParamsGuidValidator* validate = item->validator;
  51. if (!validate(dest)) {
  52. dest = *((const SDL_GUID*) item->default_value);
  53. }
  54. }
  55. if (item->transformer.deserialize && item->transformer.serialize) {
  56. INI_ConfigSerializeGUID* serialize = item->transformer.serialize;
  57. const char serialized_value[128];
  58. serialize(dest, serialized_value);
  59. if (!ini_puts(item->section, item->key, serialized_value, config_path)) {
  60. return -1;
  61. }
  62. return 0;
  63. }
  64. char guid_str[33];
  65. memset(guid_str, 0, 33);
  66. SDL_GUIDToString(dest, guid_str, 33);
  67. if (!ini_puts(item->section, item->key, guid_str, config_path)) {
  68. return -1;
  69. }
  70. return 0;
  71. }
  72. void INI_ConfigOverrideGuid(INI_ConfigItem* item, uint8_t argc, const char* argv[]) {
  73. if (!item->cmdline_option) {
  74. return;
  75. }
  76. const char* cmdline_buffer;
  77. static SDL_GUID dest;
  78. static SDL_GUID config_value;
  79. config_value = *((SDL_GUID*) item->dest);
  80. if((cmdline_buffer = INI_ConfigGetCommandlineOption(argc, argv, item->cmdline_option))) {
  81. dest = SDL_GUIDFromString(cmdline_buffer);
  82. INI_ConfigEnsureValidGuid(item, dest, config_value);
  83. }
  84. }