Skip to content

Commit

Permalink
Far from over
Browse files Browse the repository at this point in the history
  • Loading branch information
hiimjasmine00 committed Oct 30, 2024
1 parent d901650 commit ef33af3
Show file tree
Hide file tree
Showing 9 changed files with 271 additions and 170 deletions.
4 changes: 3 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
set(CMAKE_CXX_VISIBILITY_PRESET hidden)

project(MoreIcons VERSION 1.4.2)
project(MoreIcons VERSION 1.4.3)

add_library(${PROJECT_NAME} SHARED
src/api/MoreIconsAPI.cpp
Expand All @@ -14,10 +14,12 @@ add_library(${PROJECT_NAME} SHARED
src/hooks/CharacterColorPage.cpp
src/hooks/GameManager.cpp
src/hooks/GJGarageLayer.cpp
src/hooks/GJRobotSprite.cpp
src/hooks/LoadingLayer.cpp
src/hooks/MenuLayer.cpp
src/hooks/PlayerObject.cpp
src/hooks/ProfilePage.cpp
src/hooks/SimplePlayer.cpp
src/MoreIcons.cpp
)

Expand Down
4 changes: 4 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# More Icons Changelog
## v1.4.3 (2024-10-29)
- Tweaked the icon kit functionality
- Added user objects for custom icons

## v1.4.2 (2024-10-27)
- Fixed a bug where the icon glow would be offset in the game

Expand Down
2 changes: 1 addition & 1 deletion mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"win": "2.206",
"mac": "2.206"
},
"version": "v1.4.2",
"version": "v1.4.3",
"id": "hiimjustin000.more_icons",
"name": "More Icons",
"developer": "hiimjustin000",
Expand Down
6 changes: 6 additions & 0 deletions src/api/MoreIconsAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ std::string MoreIconsAPI::savedForType(IconType type, bool dual) {
void MoreIconsAPI::updateSimplePlayer(SimplePlayer* player, const std::string& icon, IconType type) {
if (!player || icon.empty() || !hasIcon(icon, type)) return;

MoreIconsAPI::setUserObject(player, icon);

if (type == IconType::Robot) {
updateRobotSprite(player->m_robotSprite, icon, type);
return;
Expand Down Expand Up @@ -79,6 +81,8 @@ void MoreIconsAPI::updateSimplePlayer(SimplePlayer* player, const std::string& i
void MoreIconsAPI::updateRobotSprite(GJRobotSprite* sprite, const std::string& icon, IconType type) {
if (!sprite || icon.empty() || !hasIcon(icon, type)) return;

MoreIconsAPI::setUserObject(sprite, icon);

sprite->setBatchNode(nullptr);
sprite->m_paSprite->setBatchNode(nullptr);

Expand Down Expand Up @@ -127,6 +131,8 @@ void MoreIconsAPI::updateRobotSprite(GJRobotSprite* sprite, const std::string& i
void MoreIconsAPI::updatePlayerObject(PlayerObject* object, const std::string& icon, IconType type) {
if (!object || icon.empty() || !hasIcon(icon, type)) return;

MoreIconsAPI::setUserObject(object, icon);

if (type == IconType::Robot || type == IconType::Spider) {
auto robotSprite = type == IconType::Robot ? object->m_robotSprite : object->m_spiderSprite;
updateRobotSprite(robotSprite, icon, type);
Expand Down
10 changes: 10 additions & 0 deletions src/api/MoreIconsAPI.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ class MoreIconsAPI {
return frame && frame->getTag() != 105871529;
}

static void setUserObject(cocos2d::CCNode* node, const std::string& value) {
if (!node || node->getUserObject("name"_spr)) return;
node->setUserObject("name"_spr, cocos2d::CCString::create(value));
}

static void removeUserObject(cocos2d::CCNode* node) {
if (!node) return;
node->setUserObject("name"_spr, nullptr);
}

static std::vector<std::string>& vectorForType(IconType type);

static std::string savedForType(IconType type, bool dual);
Expand Down
337 changes: 178 additions & 159 deletions src/hooks/GJGarageLayer.cpp

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions src/hooks/GJRobotSprite.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include "../api/MoreIconsAPI.hpp"

using namespace geode::prelude;

#include <Geode/modify/GJRobotSprite.hpp>
class $modify(MIRobotSprite, GJRobotSprite) {
void updateFrame(int frame) {
GJRobotSprite::updateFrame(frame);

MoreIconsAPI::removeUserObject(this);
}
};
54 changes: 45 additions & 9 deletions src/hooks/PlayerObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,100 +28,136 @@ class $modify(MIPlayerObject, PlayerObject) {
void updatePlayerFrame(int frame) {
PlayerObject::updatePlayerFrame(frame);

if (!m_gameLayer || frame == 0) return;
if (!m_gameLayer || frame == 0) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Cube, false), IconType::Cube);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Cube, true), IconType::Cube);
else MoreIconsAPI::removeUserObject(this);
}

void updatePlayerShipFrame(int frame) {
PlayerObject::updatePlayerShipFrame(frame);

if (!m_gameLayer) return;
if (!m_gameLayer) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Ship, false), IconType::Ship);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Ship, true), IconType::Ship);
else MoreIconsAPI::removeUserObject(this);
}

void updatePlayerRollFrame(int frame) {
PlayerObject::updatePlayerRollFrame(frame);

if (!m_gameLayer || frame == 0) return;
if (!m_gameLayer || frame == 0) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Ball, false), IconType::Ball);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Ball, true), IconType::Ball);
else MoreIconsAPI::removeUserObject(this);
}

void updatePlayerBirdFrame(int frame) {
PlayerObject::updatePlayerBirdFrame(frame);

if (!m_gameLayer) return;
if (!m_gameLayer) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Ufo, false), IconType::Ufo);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Ufo, true), IconType::Ufo);
else MoreIconsAPI::removeUserObject(this);
}

void updatePlayerDartFrame(int frame) {
PlayerObject::updatePlayerDartFrame(frame);

if (!m_gameLayer) return;
if (!m_gameLayer) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Wave, false), IconType::Wave);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Wave, true), IconType::Wave);
else MoreIconsAPI::removeUserObject(this);
}

void createRobot(int frame) {
PlayerObject::createRobot(frame);

if (!m_gameLayer) return;
if (!m_gameLayer) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Robot, false), IconType::Robot);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Robot, true), IconType::Robot);
else MoreIconsAPI::removeUserObject(this);
}

void createSpider(int frame) {
PlayerObject::createSpider(frame);

if (!m_gameLayer) return;
if (!m_gameLayer) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Spider, false), IconType::Spider);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Spider, true), IconType::Spider);
else MoreIconsAPI::removeUserObject(this);
}

void updatePlayerSwingFrame(int frame) {
PlayerObject::updatePlayerSwingFrame(frame);

if (!m_gameLayer) return;
if (!m_gameLayer) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Swing, false), IconType::Swing);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Swing, true), IconType::Swing);
else MoreIconsAPI::removeUserObject(this);
}

void updatePlayerJetpackFrame(int frame) {
PlayerObject::updatePlayerJetpackFrame(frame);

if (!m_gameLayer) return;
if (!m_gameLayer) {
MoreIconsAPI::removeUserObject(this);
return;
}

if (!m_gameLayer->m_player1 || m_gameLayer->m_player1 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Jetpack, false), IconType::Jetpack);
else if (!m_gameLayer->m_player2 || m_gameLayer->m_player2 == this)
MoreIconsAPI::updatePlayerObject(this, MoreIconsAPI::activeForType(IconType::Jetpack, true), IconType::Jetpack);
else MoreIconsAPI::removeUserObject(this);
}

void setupStreak() {
Expand Down
12 changes: 12 additions & 0 deletions src/hooks/SimplePlayer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include "../api/MoreIconsAPI.hpp"

using namespace geode::prelude;

#include <Geode/modify/SimplePlayer.hpp>
class $modify(MISimplePlayer, SimplePlayer) {
void updatePlayerFrame(int frame, IconType type) {
SimplePlayer::updatePlayerFrame(frame, type);

MoreIconsAPI::removeUserObject(this);
}
};

0 comments on commit ef33af3

Please sign in to comment.