| 1 | #include "Library/Yaml/MacroUtil.h" |
| 2 | |
| 3 | #include "Library/Base/StringUtil.h" |
| 4 | #include "Library/Yaml/ByamlIter.h" |
| 5 | #include "Library/Yaml/ByamlUtil.h" |
| 6 | |
| 7 | namespace alYamlMacroUtil { |
| 8 | |
| 9 | IUseYamlParam::IUseYamlParam(const char* name) : mName(name) { |
| 10 | YamlParamGroup::sCurrent->addParam(param: this); |
| 11 | } |
| 12 | |
| 13 | bool IUseYamlParam::isEqualParamName(const char* name) const { |
| 14 | return al::isEqualString(str1: name, str2: mName); |
| 15 | } |
| 16 | |
| 17 | template <typename T> |
| 18 | void YamlParamGroup::setParamPtr(const char* name, T* value) { |
| 19 | IUseYamlParam* paramEntry = mHeadParam; |
| 20 | while (paramEntry) { |
| 21 | if (paramEntry->isEqualParamName(name)) { |
| 22 | switch (paramEntry->getClassId()) { |
| 23 | case YamlClassId::U8: |
| 24 | paramEntry->setPtr_u8(value); |
| 25 | break; |
| 26 | case YamlClassId::U16: |
| 27 | paramEntry->setPtr_u16(value); |
| 28 | break; |
| 29 | case YamlClassId::S16: |
| 30 | paramEntry->setPtr_s16(value); |
| 31 | break; |
| 32 | case YamlClassId::V2f: |
| 33 | paramEntry->setPtr_V2f(value); |
| 34 | break; |
| 35 | case YamlClassId::V3f: |
| 36 | paramEntry->setPtr_V3f(value); |
| 37 | break; |
| 38 | case YamlClassId::Color: |
| 39 | paramEntry->setPtr_YamlColor(value); |
| 40 | break; |
| 41 | case YamlClassId::S32: |
| 42 | paramEntry->setPtr_s32(value); |
| 43 | break; |
| 44 | case YamlClassId::F32: |
| 45 | paramEntry->setPtr_f32(value); |
| 46 | break; |
| 47 | case YamlClassId::Bool: |
| 48 | paramEntry->setPtr_bool(value); |
| 49 | break; |
| 50 | case YamlClassId::String: |
| 51 | paramEntry->setPtr_YamlString(value); |
| 52 | break; |
| 53 | default: |
| 54 | break; |
| 55 | } |
| 56 | } |
| 57 | paramEntry = paramEntry->getNext(); |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | void YamlParamGroup::addParam(IUseYamlParam* param) { |
| 62 | if (!mHeadParam) { |
| 63 | mHeadParam = param; |
| 64 | mTailParam = param; |
| 65 | return; |
| 66 | } |
| 67 | mTailParam->setNext(param); |
| 68 | mTailParam = param; |
| 69 | } |
| 70 | |
| 71 | void YamlParamGroup::readyToSetPtr() { |
| 72 | IUseYamlParam* paramEntry = mHeadParam; |
| 73 | while (paramEntry) { |
| 74 | paramEntry->clearPtr(); |
| 75 | paramEntry = paramEntry->getNext(); |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | void YamlParamGroup::readParam(const al::ByamlIter& iter) { |
| 80 | IUseYamlParam* paramEntry = mHeadParam; |
| 81 | while (paramEntry) { |
| 82 | switch (paramEntry->getClassId()) { |
| 83 | case YamlClassId::U8: |
| 84 | al::tryGetByamlU8(((YamlParamBase<u8>*)paramEntry)->getParamPtr(), iter, |
| 85 | paramEntry->getName()); |
| 86 | break; |
| 87 | case YamlClassId::U16: |
| 88 | al::tryGetByamlU16(((YamlParamBase<u16>*)paramEntry)->getParamPtr(), iter, |
| 89 | paramEntry->getName()); |
| 90 | break; |
| 91 | case YamlClassId::S16: |
| 92 | al::tryGetByamlS16(((YamlParamBase<s16>*)paramEntry)->getParamPtr(), iter, |
| 93 | paramEntry->getName()); |
| 94 | break; |
| 95 | case YamlClassId::V2f: |
| 96 | al::tryGetByamlV2f(((YamlParamBase<sead::Vector2f>*)paramEntry)->getParamPtr(), iter, |
| 97 | paramEntry->getName()); |
| 98 | break; |
| 99 | case YamlClassId::V3f: |
| 100 | al::tryGetByamlV3f(((YamlParamBase<sead::Vector3f>*)paramEntry)->getParamPtr(), iter, |
| 101 | paramEntry->getName()); |
| 102 | break; |
| 103 | case YamlClassId::Color: |
| 104 | al::tryGetByamlColor(((YamlParamBase<sead::Color4f>*)paramEntry)->getParamPtr(), iter, |
| 105 | paramEntry->getName()); |
| 106 | break; |
| 107 | case YamlClassId::F32: |
| 108 | al::tryGetByamlF32(((YamlParamBase<f32>*)paramEntry)->getParamPtr(), iter, |
| 109 | paramEntry->getName()); |
| 110 | break; |
| 111 | case YamlClassId::S32: { |
| 112 | s32 value = al::tryGetByamlKeyIntOrZero(iter, paramEntry->getName()); |
| 113 | ((YamlParamBase<s32>*)paramEntry)->setParam(value); |
| 114 | break; |
| 115 | } |
| 116 | case YamlClassId::Bool: { |
| 117 | bool value = al::tryGetByamlKeyBoolOrFalse(iter, paramEntry->getName()); |
| 118 | ((YamlParamBase<bool>*)paramEntry)->setParam(value); |
| 119 | break; |
| 120 | } |
| 121 | case YamlClassId::String: { |
| 122 | const char* value = al::tryGetByamlKeyStringOrNULL(iter, paramEntry->getName()); |
| 123 | ((YamlParamBase<const char*>*)paramEntry)->setParam(value); |
| 124 | } |
| 125 | } |
| 126 | paramEntry = paramEntry->getNext(); |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | YamlParam_YamlString::YamlParam_YamlString(const char* name) : YamlParamBase(name) {} |
| 131 | |
| 132 | YamlClassId YamlParam_YamlString::getClassId() const { |
| 133 | return YamlClassId::String; |
| 134 | } |
| 135 | |
| 136 | void YamlParam_YamlString::setPtr_YamlString(const char** value) { |
| 137 | setParamPtr(value); |
| 138 | } |
| 139 | |
| 140 | YamlParam_V3f::YamlParam_V3f(const char* name) : YamlParamBase(name) {} |
| 141 | |
| 142 | YamlClassId YamlParam_V3f::getClassId() const { |
| 143 | return YamlClassId::V3f; |
| 144 | } |
| 145 | |
| 146 | void YamlParam_V3f::setPtr_V3f(sead::Vector3f* value) { |
| 147 | setParamPtr(value); |
| 148 | } |
| 149 | |
| 150 | YamlParam_YamlColor::YamlParam_YamlColor(const char* name) : YamlParamBase(name) {} |
| 151 | |
| 152 | YamlClassId YamlParam_YamlColor::getClassId() const { |
| 153 | return YamlClassId::Color; |
| 154 | } |
| 155 | |
| 156 | void YamlParam_YamlColor::setPtr_YamlColor(sead::Color4f* value) { |
| 157 | setParamPtr(value); |
| 158 | } |
| 159 | |
| 160 | YamlParam_bool::YamlParam_bool(const char* name) : YamlParamBase(name) {} |
| 161 | |
| 162 | YamlClassId YamlParam_bool::getClassId() const { |
| 163 | return YamlClassId::Bool; |
| 164 | } |
| 165 | |
| 166 | void YamlParam_bool::setPtr_bool(bool* value) { |
| 167 | setParamPtr(value); |
| 168 | } |
| 169 | |
| 170 | YamlParam_u8::YamlParam_u8(const char* name) : YamlParamBase(name) {} |
| 171 | |
| 172 | YamlClassId YamlParam_u8::getClassId() const { |
| 173 | return YamlClassId::U8; |
| 174 | } |
| 175 | |
| 176 | void YamlParam_u8::setPtr_u8(u8* value) { |
| 177 | setParamPtr(value); |
| 178 | } |
| 179 | |
| 180 | YamlParam_f32::YamlParam_f32(const char* name) : YamlParamBase(name) {} |
| 181 | |
| 182 | YamlClassId YamlParam_f32::getClassId() const { |
| 183 | return YamlClassId::F32; |
| 184 | } |
| 185 | |
| 186 | void YamlParam_f32::setPtr_f32(f32* value) { |
| 187 | setParamPtr(value); |
| 188 | } |
| 189 | |
| 190 | YamlParam_V2f::YamlParam_V2f(const char* name) : YamlParamBase(name) {} |
| 191 | |
| 192 | YamlClassId YamlParam_V2f::getClassId() const { |
| 193 | return YamlClassId::V2f; |
| 194 | } |
| 195 | |
| 196 | void YamlParam_V2f::setPtr_V2f(sead::Vector2f* value) { |
| 197 | setParamPtr(value); |
| 198 | } |
| 199 | |
| 200 | } // namespace alYamlMacroUtil |
| 201 | |