Skip to content

Commit

Permalink
Fix ObstacleColorizer using custom-types
Browse files Browse the repository at this point in the history
  • Loading branch information
Fernthedev committed Mar 6, 2021
1 parent f73c4ae commit 1f41a9c
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 45 deletions.
62 changes: 36 additions & 26 deletions include/colorizer/ObstacleColorizer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,45 @@
#include <vector>
#include <string>
#include <optional>
#include "custom-types/shared/types.hpp"
#include "custom-types/shared/macros.hpp"

// We use custom types here to avoid GC deleting our variables
DECLARE_CLASS_CODEGEN(Chroma, OCColorManager, Il2CppObject,

public:
inline static int _tintColorID = -1;
inline static int _addColorID = -1;
inline static std::optional<UnityEngine::Color> _globalColor = std::nullopt;
UnityEngine::Color _color_Original;


static OCColorManager* GetOCColorManager(GlobalNamespace::ObstacleController* oc);
static OCColorManager* CreateOCColorManager(GlobalNamespace::ObstacleController* oc);
static void SetGlobalObstacleColor(std::optional<UnityEngine::Color> color);
static void ResetGlobal();
void Reset();
void SetObstacleColor(std::optional<UnityEngine::Color> color);
void SetActiveColors();

DECLARE_INSTANCE_FIELD(GlobalNamespace::SimpleColorSO*, _color);
DECLARE_INSTANCE_FIELD(GlobalNamespace::StretchableObstacle*, _stretchableObstacle);
DECLARE_INSTANCE_FIELD(GlobalNamespace::ObstacleController*, _oc);

DECLARE_CTOR(ctor, GlobalNamespace::ObstacleController* oc);

REGISTER_FUNCTION(Chroma::LSEColorManager,
getLogger().debug("Registering LSEColorManager!");
REGISTER_METHOD(ctor);

REGISTER_FIELD(_color);
REGISTER_FIELD(_stretchableObstacle);
REGISTER_FIELD(_oc);
)
)


// TODO: Document properly
// TODO: Does this need to become a custom type?
namespace Chroma {
class ObstacleColorizer {
public:
Expand All @@ -29,30 +63,6 @@ namespace Chroma {
*/
static void OCStart(GlobalNamespace::ObstacleController* oc);

class OCColorManager
{
private:
inline static int _tintColorID = -1;
inline static int _addColorID = -1;
static std::optional<UnityEngine::Color> _globalColor;
GlobalNamespace::ObstacleController* _oc;
UnityEngine::Color _color_Original;
// TODO: THIS MAY GET GC'ED. WE MAY NEED CUSTOM TYPES
SafePtr<GlobalNamespace::SimpleColorSO> _color;
GlobalNamespace::StretchableObstacle* _stretchableObstacle;
explicit OCColorManager(GlobalNamespace::ObstacleController* oc);

public:
static OCColorManager* GetOCColorManager(GlobalNamespace::ObstacleController* oc);
static OCColorManager* CreateOCColorManager(GlobalNamespace::ObstacleController* oc);
static void SetGlobalObstacleColor(std::optional<UnityEngine::Color> color);
static void ResetGlobal();
void Reset();
void SetObstacleColor(std::optional<UnityEngine::Color> color);
void SetActiveColors();
};
private:
inline static std::vector<OCColorManager*> _ocColorManagers = {};
};
}

}
36 changes: 18 additions & 18 deletions src/colorizer/ObstacleColorizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ using namespace UnityEngine;

using namespace Chroma;

std::optional<UnityEngine::Color> ObstacleColorizer::OCColorManager::_globalColor = std::nullopt;


DEFINE_CLASS(Chroma::OCColorManager);

void ObstacleColorizer::Reset(GlobalNamespace::ObstacleController *oc) {
auto ocman = OCColorManager::GetOCColorManager(oc);
Expand Down Expand Up @@ -70,59 +68,61 @@ void ObstacleColorizer::ClearOCColorManagers() {
}

void ObstacleColorizer::OCStart(GlobalNamespace::ObstacleController *oc) {
getLogger().debug("Create oc");
OCColorManager::CreateOCColorManager(oc);
}

ObstacleColorizer::OCColorManager::OCColorManager(GlobalNamespace::ObstacleController *oc) {


void OCColorManager::ctor(GlobalNamespace::ObstacleController *oc) {
_oc = oc;
_stretchableObstacle = _oc->stretchableObstacle;

_color_Original = oc->color->color;

if (_color == nullptr)
{
// TODO: We might need custom type here
_color = SafePtr(ScriptableObject::CreateInstance<SimpleColorSO*>());
_color = ScriptableObject::CreateInstance<SimpleColorSO*>();
_color->SetColor(_color_Original);
}

oc->color = _color;
}

ObstacleColorizer::OCColorManager *
ObstacleColorizer::OCColorManager::GetOCColorManager(GlobalNamespace::ObstacleController *oc) {
for (auto& n : _ocColorManagers) {
OCColorManager *
OCColorManager::GetOCColorManager(GlobalNamespace::ObstacleController *oc) {
for (auto& n : ObstacleColorizer::_ocColorManagers) {
if (n->_oc == oc)
return n;
}

return nullptr;
}

ObstacleColorizer::OCColorManager *
ObstacleColorizer::OCColorManager::CreateOCColorManager(GlobalNamespace::ObstacleController *oc) {
OCColorManager *
OCColorManager::CreateOCColorManager(GlobalNamespace::ObstacleController *oc) {
if (GetOCColorManager(oc) != nullptr)
{
return nullptr;
}

auto occm = new OCColorManager(oc);
_ocColorManagers.push_back(occm);
OCColorManager* occm = CRASH_UNLESS(il2cpp_utils::New<OCColorManager*>(oc));
ObstacleColorizer::_ocColorManagers.push_back(occm);
return occm;
}

void ObstacleColorizer::OCColorManager::SetGlobalObstacleColor(std::optional<UnityEngine::Color> color) {
void OCColorManager::SetGlobalObstacleColor(std::optional<UnityEngine::Color> color) {
if (color)
{
_globalColor = color.value();
}
}

void ObstacleColorizer::OCColorManager::ResetGlobal() {
void OCColorManager::ResetGlobal() {
_globalColor = std::nullopt;
}

void ObstacleColorizer::OCColorManager::Reset() {
void OCColorManager::Reset() {
if (_globalColor)
{
_color->SetColor(_globalColor.value());
Expand All @@ -133,14 +133,14 @@ void ObstacleColorizer::OCColorManager::Reset() {
}
}

void ObstacleColorizer::OCColorManager::SetObstacleColor(std::optional<UnityEngine::Color> color) {
void OCColorManager::SetObstacleColor(std::optional<UnityEngine::Color> color) {
if (color)
{
_color->SetColor(color.value());
}
}

void ObstacleColorizer::OCColorManager::SetActiveColors() {
void OCColorManager::SetActiveColors() {
ParametricBoxFrameController* obstacleFrame = _stretchableObstacle->obstacleFrame;
ParametricBoxFakeGlowController* obstacleFakeGlow = _stretchableObstacle->obstacleFakeGlow;
Array<MaterialPropertyBlockController *> *materialPropertyBlockControllers = _stretchableObstacle->materialPropertyBlockControllers;
Expand Down
4 changes: 3 additions & 1 deletion src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include "Chroma.hpp"
#include "colorizer/LightColorizer.hpp"
#include "colorizer/ObstacleColorizer.hpp"
#include "colorizer/SaberColorizer.hpp"
#include "custom-types/shared/register.hpp"

Expand Down Expand Up @@ -47,7 +48,8 @@ extern "C" void load() {

custom_types::Register::RegisterTypes<
Chroma::LSEColorManager,
Chroma::ChromaGradientController
Chroma::ChromaGradientController,
Chroma::OCColorManager
>();

getLogger().info("Installed types");
Expand Down

0 comments on commit 1f41a9c

Please sign in to comment.