cellGem: improve hue handling

This commit is contained in:
Megamouse 2021-07-29 22:53:57 +02:00
parent fd29382290
commit 0c68a6afdd
2 changed files with 41 additions and 4 deletions

View file

@ -939,7 +939,7 @@ error_code cellGemGetTrackerHue(u32 gem_num, vm::ptr<u32> hue)
if (!gem.controllers[gem_num].enabled_tracking || gem.controllers[gem_num].hue > 359)
{
return CELL_GEM_ERROR_NOT_A_HUE;
return { CELL_GEM_ERROR_NOT_A_HUE, gem.controllers[gem_num].hue };
}
*hue = gem.controllers[gem_num].hue;
@ -1220,14 +1220,42 @@ error_code cellGemTrackHues(vm::cptr<u32> req_hues, vm::ptr<u32> res_hues)
for (u32 i = 0; i < CELL_GEM_MAX_NUM; i++)
{
if (req_hues[i] == u32{CELL_GEM_DONT_CARE_HUE})
if (req_hues[i] == CELL_GEM_DONT_CARE_HUE)
{
gem.controllers[i].enabled_tracking = true;
gem.controllers[i].enabled_LED = true;
switch (i)
{
default:
case 0:
gem.controllers[i].hue = 240; // blue
break;
case 1:
gem.controllers[i].hue = 0; // red
break;
case 2:
gem.controllers[i].hue = 120; // green
break;
case 3:
gem.controllers[i].hue = 300; // purple
break;
}
if (res_hues)
{
res_hues[i] = gem.controllers[i].hue;
}
}
else if (req_hues[i] == u32{CELL_GEM_DONT_TRACK_HUE})
else if (req_hues[i] == CELL_GEM_DONT_TRACK_HUE)
{
gem.controllers[i].enabled_tracking = false;
gem.controllers[i].enabled_LED = false;
if (res_hues)
{
res_hues[i] = CELL_GEM_DONT_TRACK_HUE;
}
}
else
{
@ -1235,6 +1263,15 @@ error_code cellGemTrackHues(vm::cptr<u32> req_hues, vm::ptr<u32> res_hues)
{
cellGem.warning("cellGemTrackHues: req_hues[%d]=%d -> this can lead to unexpected behavior", i, req_hues[i]);
}
gem.controllers[i].enabled_tracking = true;
gem.controllers[i].enabled_LED = true;
gem.controllers[i].hue = req_hues[i];
if (res_hues)
{
res_hues[i] = gem.controllers[i].hue;
}
}
}

View file

@ -91,7 +91,7 @@ enum
};
// Special values for cellGemTrackHues.
enum
enum : u32
{
CELL_GEM_DONT_TRACK_HUE = 2 << 24,
CELL_GEM_DONT_CARE_HUE = 4 << 24,