|
4 | 4 | #include "d/d_meter2_draw.h" |
5 | 5 | #include "d/d_meter2_info.h" |
6 | 6 |
|
| 7 | +cXyz currentGamepadColor = {0, 0, 0}; |
| 8 | +cXyz finalGamepadColor = {0, 0, 0}; |
| 9 | +float lerpSpeed = 0.0f; |
| 10 | +const cXyz duskColor = {30, 30, -30}; |
| 11 | + |
| 12 | +const cXyz heartColor1 = {255, 0, 0}; |
| 13 | +const cXyz heartColor2 = {155, 5, 5}; |
| 14 | +const cXyz heartColor3 = {55, 5, 5}; |
| 15 | + |
| 16 | +float lerp(float a, float b, float t) { |
| 17 | + return a + t * (b - a); |
| 18 | +} |
| 19 | + |
| 20 | +cXyz LerpColor(cXyz a, cXyz b, float t) { |
| 21 | + return {lerp(a.x, b.x, t), lerp(a.y, b.y, t), lerp(a.z, b.z, t)}; |
| 22 | +} |
| 23 | + |
| 24 | +void FadeLED(cXyz newColor, float speed) { |
| 25 | + finalGamepadColor = newColor; |
| 26 | + lerpSpeed = speed / 30.0f; |
| 27 | +} |
| 28 | + |
| 29 | +void SetLED(cXyz newColor) { |
| 30 | + currentGamepadColor = newColor; |
| 31 | + finalGamepadColor = newColor; |
| 32 | +} |
| 33 | + |
| 34 | +void AddGamepadCurrentColor(cXyz addColor) { |
| 35 | + finalGamepadColor.x += addColor.x; |
| 36 | + finalGamepadColor.y += addColor.y; |
| 37 | + finalGamepadColor.z += addColor.z; |
| 38 | +} |
| 39 | + |
| 40 | +void daAlink_c::handleGamepadColor() { |
| 41 | + bool setColor = false; |
| 42 | + |
| 43 | + fopAc_ac_c* zhint = dComIfGp_att_getZHint(); |
| 44 | + if (zhint != NULL) { |
| 45 | + FadeLED({50, 50, 175}, 2.0f); |
| 46 | + setColor = true; |
| 47 | + } |
| 48 | + |
| 49 | + u8 linkHp = Z2GetLink()->getLinkHp(); |
| 50 | + if (linkHp <= 2) { |
| 51 | + FadeLED(heartColor1, 2.0f); |
| 52 | + setColor = true; |
| 53 | + } else if (linkHp <= 4) { |
| 54 | + FadeLED(heartColor2, 2.0f); |
| 55 | + setColor = true; |
| 56 | + } else if (linkHp <= 6) { |
| 57 | + FadeLED(heartColor3, 2.0f); |
| 58 | + setColor = true; |
| 59 | + } |
| 60 | + |
| 61 | + if (!setColor) { |
| 62 | + if (checkWolf()) { |
| 63 | + FadeLED({115, 115, 75}, 5.0f); |
| 64 | + setColor = true; |
| 65 | + } else { |
| 66 | + switch (dComIfGs_getSelectEquipClothes()) { |
| 67 | + case dItemNo_WEAR_KOKIRI_e: |
| 68 | + FadeLED({0, 100, 0}, 5.0f); |
| 69 | + setColor = true; |
| 70 | + break; |
| 71 | + case dItemNo_WEAR_ZORA_e: |
| 72 | + FadeLED({0, 0, 100}, 5.0f); |
| 73 | + setColor = true; |
| 74 | + break; |
| 75 | + case dItemNo_ARMOR_e: |
| 76 | + if (checkMagicArmorHeavy()) { |
| 77 | + FadeLED({5, 100, 100}, 5.0f); |
| 78 | + } else { |
| 79 | + FadeLED({100, 0, 5}, 5.0f); |
| 80 | + } |
| 81 | + setColor = true; |
| 82 | + break; |
| 83 | + default: |
| 84 | + FadeLED({235, 230, 115}, 5.0f); |
| 85 | + setColor = true; |
| 86 | + break; |
| 87 | + } |
| 88 | + } |
| 89 | + } |
| 90 | + |
| 91 | + if (dKy_darkworld_check()) { |
| 92 | + AddGamepadCurrentColor(duskColor); |
| 93 | + } |
| 94 | + |
| 95 | + if (finalGamepadColor.x > 255) |
| 96 | + finalGamepadColor.x = 255; |
| 97 | + if (finalGamepadColor.x < 0) |
| 98 | + finalGamepadColor.x = 0; |
| 99 | + |
| 100 | + if (finalGamepadColor.y > 255) |
| 101 | + finalGamepadColor.y = 255; |
| 102 | + if (finalGamepadColor.y < 0) |
| 103 | + finalGamepadColor.y = 0; |
| 104 | + |
| 105 | + if (finalGamepadColor.z > 255) |
| 106 | + finalGamepadColor.z = 255; |
| 107 | + if (finalGamepadColor.z < 0) |
| 108 | + finalGamepadColor.z = 0; |
| 109 | + |
| 110 | + currentGamepadColor = LerpColor(currentGamepadColor, finalGamepadColor, lerpSpeed); |
| 111 | + PADSetColor(PAD_1, (u8)currentGamepadColor.x, (u8)currentGamepadColor.y, (u8)currentGamepadColor.z); |
| 112 | +} |
| 113 | + |
7 | 114 | void daAlink_c::handleWolfHowl() { |
8 | 115 | if (checkWolf()) { |
9 | 116 | if (!dusk::getSettings().game.sunsSong) { |
|
0 commit comments