diff options
author | Vittorio Romeo <vittorio.romeo@outlook.com> | 2021-11-09 03:51:03 +0000 |
---|---|---|
committer | Vittorio Romeo <vittorio.romeo@outlook.com> | 2021-11-09 03:51:03 +0000 |
commit | 69ece308c9778dd1eb04b92f595287f260d362c3 (patch) | |
tree | 9648ff3193421c445bf97a4d0d55a1d5c382b5aa | |
parent | 206398b4cec575249e725db0b02d8e690c5e7cd1 (diff) |
Add player angle tilt effect and fix swap cooldown color
-rw-r--r-- | _RELEASE/config.json | 4 | ||||
-rw-r--r-- | include/SSVOpenHexagon/Components/CPlayer.hpp | 5 | ||||
-rw-r--r-- | include/SSVOpenHexagon/Core/HexagonGame.hpp | 7 | ||||
-rw-r--r-- | include/SSVOpenHexagon/Global/Config.hpp | 2 | ||||
-rw-r--r-- | src/SSVOpenHexagon/Components/CPlayer.cpp | 51 | ||||
-rw-r--r-- | src/SSVOpenHexagon/Core/HGGraphics.cpp | 3 | ||||
-rw-r--r-- | src/SSVOpenHexagon/Core/HGUpdate.cpp | 5 | ||||
-rw-r--r-- | src/SSVOpenHexagon/Core/MenuGame.cpp | 2 | ||||
-rw-r--r-- | src/SSVOpenHexagon/Global/Config.cpp | 11 |
9 files changed, 77 insertions, 13 deletions
diff --git a/_RELEASE/config.json b/_RELEASE/config.json index 0a2c6165..9bc31cef 100644 --- a/_RELEASE/config.json +++ b/_RELEASE/config.json @@ -3,11 +3,13 @@ "3D_enabled" : true,
"3D_max_depth" : 100,
"3D_multiplier" : 1.0,
+ "angle_tilt_intensity" : 1.0,
"antialiasing_level" : 16,
"auto_restart" : false,
"auto_zoom_factor" : true,
"beatpulse_enabled" : true,
"black_and_white" : false,
+ "camera_shake_multiplier" : 1.000002622604370,
"darken_uneven_background_chunk" : true,
"debug" : true,
"draw_text_outlines" : true,
@@ -53,7 +55,7 @@ "save_last_login_username" : true,
"save_local_best_replay_to_file" : true,
"server_control_port" : 50506,
- "server_ip" : "127.0.0.1",
+ "server_ip" : "139.162.199.162",
"server_level_whitelist" :
[
"ohvrvanilla_vittorio_romeo_cube_1_apeirogon_m_0.35",
diff --git a/include/SSVOpenHexagon/Components/CPlayer.hpp b/include/SSVOpenHexagon/Components/CPlayer.hpp index 2ff20ad7..e021ae0d 100644 --- a/include/SSVOpenHexagon/Components/CPlayer.hpp +++ b/include/SSVOpenHexagon/Components/CPlayer.hpp @@ -64,6 +64,8 @@ private: Ticker _swapBlinkTimer; Ticker _deadEffectTimer; + float _currTiltedAngle; + void drawPivot(const unsigned int sides, const sf::Color& colorMain, Utils::FastVertexVectorQuads& wallQuads, Utils::FastVertexVectorTris& capTris, const sf::Color& capColor); @@ -115,7 +117,8 @@ public: void draw(const unsigned int sides, const sf::Color& colorMain, const sf::Color& colorPlayer, Utils::FastVertexVectorQuads& wallQuads, Utils::FastVertexVectorTris& capTris, - Utils::FastVertexVectorTris& playerTris, const sf::Color& capColor); + Utils::FastVertexVectorTris& playerTris, const sf::Color& capColor, + const float angleTiltIntensity); [[nodiscard]] bool push(const int movementDir, const float radius, const CWall& wall, const sf::Vector2f& mCenterPos, diff --git a/include/SSVOpenHexagon/Core/HexagonGame.hpp b/include/SSVOpenHexagon/Core/HexagonGame.hpp index 55909b18..243467e0 100644 --- a/include/SSVOpenHexagon/Core/HexagonGame.hpp +++ b/include/SSVOpenHexagon/Core/HexagonGame.hpp @@ -167,11 +167,18 @@ private: ssvs::VertexVector<sf::PrimitiveType::Quads> flashPolygon{4}; + enum class ParticleType : std::uint8_t + { + Normal, + Trail + }; + struct Particle { sf::Sprite sprite; sf::Vector2f velocity; float angularVelocity; + ParticleType type; }; std::vector<Particle> particles; diff --git a/include/SSVOpenHexagon/Global/Config.hpp b/include/SSVOpenHexagon/Global/Config.hpp index dbb9e9a7..0ed86863 100644 --- a/include/SSVOpenHexagon/Global/Config.hpp +++ b/include/SSVOpenHexagon/Global/Config.hpp @@ -83,6 +83,7 @@ void setSaveLastLoginUsername(bool mX); void setLastLoginUsername(const std::string& mX); void setShowLoginAtStartup(bool mX); void setCameraShakeMultiplier(float x); +void setAngleTiltIntensity(float x); [[nodiscard]] bool getOfficial(); [[nodiscard]] const std::string& getUneligibilityReason(); @@ -150,6 +151,7 @@ void setCameraShakeMultiplier(float x); [[nodiscard]] const std::string& getLastLoginUsername(); [[nodiscard]] bool getShowLoginAtStartup(); [[nodiscard]] float getCameraShakeMultiplier(); +[[nodiscard]] float getAngleTiltIntensity(); // keyboard binds diff --git a/src/SSVOpenHexagon/Components/CPlayer.cpp b/src/SSVOpenHexagon/Components/CPlayer.cpp index 27bcb239..20b583ec 100644 --- a/src/SSVOpenHexagon/Components/CPlayer.cpp +++ b/src/SSVOpenHexagon/Components/CPlayer.cpp @@ -48,14 +48,16 @@ CPlayer::CPlayer(const sf::Vector2f& pos, const float swapCooldown, _triangleWidth{unfocusedTriangleWidth}, _triangleWidthTransitionTime{0.f}, _swapTimer{swapCooldown}, - _swapBlinkTimer{swapCooldown / 6.f}, - _deadEffectTimer{80.f, false} + _swapBlinkTimer{6.f}, + _deadEffectTimer{80.f, false}, + _currTiltedAngle{0} {} void CPlayer::draw(const unsigned int sides, const sf::Color& colorMain, const sf::Color& colorPlayer, Utils::FastVertexVectorQuads& wallQuads, Utils::FastVertexVectorTris& capTris, - Utils::FastVertexVectorTris& playerTris, const sf::Color& capColor) + Utils::FastVertexVectorTris& playerTris, const sf::Color& capColor, + const float angleTiltIntensity) { drawPivot(sides, colorMain, wallQuads, capTris, capColor); @@ -68,21 +70,24 @@ void CPlayer::draw(const unsigned int sides, const sf::Color& colorMain, ? colorPlayer : Utils::getColorFromHue(_hue / 360.f)}; + const float tiltedAngle = + _angle + (_currTiltedAngle * ssvu::toRad(24.f) * angleTiltIntensity); + const sf::Vector2f pLeft = ssvs::getOrbitRad( - _pos, _angle - ssvu::toRad(100.f), _size + _triangleWidth); + _pos, tiltedAngle - ssvu::toRad(100.f), _size + _triangleWidth); const sf::Vector2f pRight = ssvs::getOrbitRad( - _pos, _angle + ssvu::toRad(100.f), _size + _triangleWidth); + _pos, tiltedAngle + ssvu::toRad(100.f), _size + _triangleWidth); if(!_swapTimer.isRunning() && !_dead) { - adjustedColorMain = - Utils::getColorFromHue((_swapBlinkTimer.getCurrent() * 15) / 360.f); + adjustedColorMain = Utils::getColorFromHue( + (_swapBlinkTimer.getCurrent() * 15.f) / 360.f); } playerTris.reserve_more(3); playerTris.batch_unsafe_emplace_back(adjustedColorMain, - ssvs::getOrbitRad(_pos, _angle, _size), pLeft, pRight); + ssvs::getOrbitRad(_pos, tiltedAngle, _size), pLeft, pRight); } void CPlayer::drawPivot(const unsigned int sides, const sf::Color& colorMain, @@ -452,12 +457,40 @@ void CPlayer::updateInputMovement(const float movementDir, { _currentSpeed = playerSpeedMult * (focused ? _focusSpeed : _speed) * ft; _angle += ssvu::toRad(_currentSpeed * movementDir); + + const float inc = ft / 10.f; + + if(movementDir == 0) + { + if(_currTiltedAngle > 0) + { + _currTiltedAngle -= inc; + } + else if(_currTiltedAngle < 0) + { + _currTiltedAngle += inc; + } + } + else if(movementDir == 1) + { + if(_currTiltedAngle < 1) + { + _currTiltedAngle += inc * 2.f; + } + } + else if(movementDir == -1) + { + if(_currTiltedAngle > -1) + { + _currTiltedAngle -= inc * 2.f; + } + } } void CPlayer::resetSwap(const float swapCooldown) { _swapTimer.restart(swapCooldown); - _swapBlinkTimer.restart(swapCooldown / 6.f); + _swapBlinkTimer.restart(6.f); } void CPlayer::setJustSwapped(const bool value) diff --git a/src/SSVOpenHexagon/Core/HGGraphics.cpp b/src/SSVOpenHexagon/Core/HGGraphics.cpp index 95abd3a2..ea31c1e3 100644 --- a/src/SSVOpenHexagon/Core/HGGraphics.cpp +++ b/src/SSVOpenHexagon/Core/HGGraphics.cpp @@ -114,7 +114,8 @@ void HexagonGame::draw() if(status.started) { player.draw(getSides(), getColorMain(), getColorPlayer(), pivotQuads, - capTris, playerTris, getColorCap()); + capTris, playerTris, getColorCap(), + Config::getAngleTiltIntensity()); } if(Config::get3D()) diff --git a/src/SSVOpenHexagon/Core/HGUpdate.cpp b/src/SSVOpenHexagon/Core/HGUpdate.cpp index afe5eb47..e90cae0a 100644 --- a/src/SSVOpenHexagon/Core/HGUpdate.cpp +++ b/src/SSVOpenHexagon/Core/HGUpdate.cpp @@ -871,6 +871,9 @@ void HexagonGame::updateParticles(ssvu::FT mFT) pos.y < 0 - padding || pos.y > Config::getHeight() + padding); }; + const auto isDead = [&](const Particle& p) + { return p.sprite.getColor().a <= 0 || isOutOfBounds(p); }; + const auto makePBParticle = [this] { Particle p; @@ -893,7 +896,7 @@ void HexagonGame::updateParticles(ssvu::FT mFT) return p; }; - ssvu::eraseRemoveIf(particles, isOutOfBounds); + ssvu::eraseRemoveIf(particles, isDead); for(Particle& p : particles) { diff --git a/src/SSVOpenHexagon/Core/MenuGame.cpp b/src/SSVOpenHexagon/Core/MenuGame.cpp index ecf39222..d73fbe79 100644 --- a/src/SSVOpenHexagon/Core/MenuGame.cpp +++ b/src/SSVOpenHexagon/Core/MenuGame.cpp @@ -1394,6 +1394,8 @@ void MenuGame::initMenus() visfx.create<i::Toggle>("flash", &Config::getFlash, &Config::setFlash); visfx.create<i::Slider>("shake mult.", &Config::getCameraShakeMultiplier, &Config::setCameraShakeMultiplier, 0.f, 5.f, 0.1f); + visfx.create<i::Slider>("angle tilt mult.", &Config::getAngleTiltIntensity, + &Config::setAngleTiltIntensity, 0.f, 5.f, 0.1f); visfx.create<i::GoBack>("back"); auto& fps(optionsMenu.createCategory("fps settings")); diff --git a/src/SSVOpenHexagon/Global/Config.cpp b/src/SSVOpenHexagon/Global/Config.cpp index 84a15c67..9695ca7e 100644 --- a/src/SSVOpenHexagon/Global/Config.cpp +++ b/src/SSVOpenHexagon/Global/Config.cpp @@ -215,6 +215,7 @@ using cil = std::initializer_list<cmb>; X(lastLoginUsername, std::string, "last_login_username", "") \ X(showLoginAtStartup, bool, "show_login_at_startup", false) \ X(cameraShakeMultiplier, float, "camera_shake_multiplier", 1.f) \ + X(angleTiltIntensity, float, "angle_tilt_intensity", 1.f) \ X_LINKEDVALUES_BINDS namespace hg::Config { @@ -736,6 +737,11 @@ void setCameraShakeMultiplier(float x) cameraShakeMultiplier() = x; } +void setAngleTiltIntensity(float x) +{ + angleTiltIntensity() = x; +} + [[nodiscard]] bool getOfficial() { return official(); @@ -1066,6 +1072,11 @@ void setCameraShakeMultiplier(float x) return cameraShakeMultiplier(); } +[[nodiscard]] float getAngleTiltIntensity() +{ + return angleTiltIntensity(); +} + //*********************************************************** // // KEYBOARD/MOUSE BINDS |