@@ -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