Skip to content

Commit 5dfebfa

Browse files
committed
oxygen meter lolololol
1 parent 1c106f2 commit 5dfebfa

1 file changed

Lines changed: 45 additions & 18 deletions

File tree

src/modified/PlayLayer.cpp

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class $modify(HorriblePlayLayer, PlayLayer) {
2121

2222
float m_oxygenLevel = 100.f;
2323
bool m_oxygenActive = false;
24+
25+
Ref<CCSprite> m_oxygenBar;
26+
CCSprite* m_oxygenBarFill;
2427
};
2528

2629
bool init(GJGameLevel * level, bool useReplay, bool dontCreateObjects) {
@@ -33,25 +36,47 @@ class $modify(HorriblePlayLayer, PlayLayer) {
3336
m_fields->m_oxygenActive = true;
3437
m_fields->m_oxygenLevel = 100.f;
3538

36-
char buf[32];
39+
CCDirector::sharedDirector()->getScheduler()->scheduleSelector(
40+
schedule_selector(HorriblePlayLayer::decreaseOxygen),
41+
this, 0.0f, false);
42+
43+
if (!m_fields->m_oxygenBar) {
44+
m_fields->m_oxygenBar = CCSprite::create("slidergroove2.png");
45+
m_fields->m_oxygenBar->setID("oxygen"_spr);
46+
m_fields->m_oxygenBar->setPosition({ 10.f, getScaledContentHeight() / 2.f });
47+
m_fields->m_oxygenBar->setRotation(90.f);
48+
m_fields->m_oxygenBar->setZOrder(101);
49+
50+
m_fields->m_oxygenBarFill = CCSprite::create("sliderBar2.png");
51+
m_fields->m_oxygenBarFill->setID("oxygen-fill"_spr);
52+
m_fields->m_oxygenBarFill->setZOrder(-1);
53+
m_fields->m_oxygenBarFill->setRotation(-180.f);
54+
m_fields->m_oxygenBarFill->setColor({ 0, 175, 255 });
55+
m_fields->m_oxygenBarFill->setPosition({ m_fields->m_oxygenBar->getScaledContentWidth() - 2.f, 4.f });
56+
m_fields->m_oxygenBarFill->setAnchorPoint({ 0, 1 });
57+
58+
m_fields->m_oxygenBarFill->setTextureRect({ 0, 0, 0, 8 });
59+
60+
m_fields->m_oxygenBar->addChild(m_fields->m_oxygenBarFill);
61+
62+
addChild(m_fields->m_oxygenBar);
63+
};
3764

38-
snprintf(buf, sizeof(buf), "Oxygen: %d", static_cast<int>(m_fields->m_oxygenLevel));
65+
std::string buf = fmt::format("o2: {}%", as<int>(m_fields->m_oxygenLevel));
3966

4067
if (!m_fields->m_oxygenLabel) {
41-
m_fields->m_oxygenLabel = CCLabelBMFont::create(buf, "bigFont.fnt");
42-
m_fields->m_oxygenLabel->setAnchorPoint({ 0.5f, 1.0f });
43-
m_fields->m_oxygenLabel->setPosition({ getContentSize().width / 2.f, getContentSize().height - 10.f });
44-
m_fields->m_oxygenLabel->setScale(0.5f);
68+
m_fields->m_oxygenLabel = CCLabelBMFont::create(buf.c_str(), "bigFont.fnt");
69+
m_fields->m_oxygenLabel->setColor({ 0, 175, 255 });
70+
m_fields->m_oxygenLabel->setAnchorPoint({ 0.f, 1.0f });
71+
m_fields->m_oxygenLabel->setPosition({ 2.f, (getScaledContentHeight() / 2.f) - (m_fields->m_oxygenBar->getScaledContentWidth() / 2.f) - 1.25f });
72+
m_fields->m_oxygenLabel->setScale(0.375f);
73+
4574
addChild(m_fields->m_oxygenLabel, 100);
4675
} else {
47-
m_fields->m_oxygenLabel->setString(buf);
76+
m_fields->m_oxygenLabel->setString(buf.c_str());
4877
};
4978

5079
log::info("Oxygen level enabled for {}", level->m_levelName);
51-
52-
CCDirector::sharedDirector()->getScheduler()->scheduleSelector(
53-
schedule_selector(HorriblePlayLayer::decreaseOxygen),
54-
this, 0.0f, false);
5580
} else {
5681
log::warn("Oxygen level disabled for {}", level->m_levelName);
5782
};
@@ -101,10 +126,14 @@ class $modify(HorriblePlayLayer, PlayLayer) {
101126
if (m_fields->m_oxygenLevel > 100.f) m_fields->m_oxygenLevel = 100.f;
102127
if (m_fields->m_oxygenLevel < 0.f) m_fields->m_oxygenLevel = 0.f;
103128

104-
char buf[32];
105129

106-
snprintf(buf, sizeof(buf), "Oxygen: %d", static_cast<int>(m_fields->m_oxygenLevel));
107-
m_fields->m_oxygenLabel->setString(buf);
130+
std::string buf = fmt::format("o2: {}%", as<int>(m_fields->m_oxygenLevel));
131+
m_fields->m_oxygenLabel->setString(buf.c_str());
132+
133+
float maxWidth = m_fields->m_oxygenBar->getContentWidth() - 4.f;
134+
float newWidth = maxWidth * (m_fields->m_oxygenLevel / 100.f);
135+
136+
m_fields->m_oxygenBarFill->setTextureRect({ 0, 0, newWidth, 8 });
108137

109138
// Destroy player if oxygen is 0
110139
if (m_fields->m_oxygenLevel <= 0.f && m_player1 && !m_player1->m_isDead) destroyPlayer(m_player1, nullptr);
@@ -114,10 +143,8 @@ class $modify(HorriblePlayLayer, PlayLayer) {
114143
m_fields->m_oxygenLevel = 100.f;
115144

116145
if (m_fields->m_oxygenLabel) {
117-
char buf[32];
118-
119-
snprintf(buf, sizeof(buf), "Oxygen: %d", static_cast<int>(m_fields->m_oxygenLevel));
120-
m_fields->m_oxygenLabel->setString(buf);
146+
std::string buf = fmt::format("o2: {}%", as<int>(m_fields->m_oxygenLevel));
147+
m_fields->m_oxygenLabel->setString(buf.c_str());
121148
};
122149
};
123150

0 commit comments

Comments
 (0)