summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVittorio Romeo <vittorio.romeo@outlook.com>2021-11-09 03:51:03 +0000
committerVittorio Romeo <vittorio.romeo@outlook.com>2021-11-09 03:51:03 +0000
commit69ece308c9778dd1eb04b92f595287f260d362c3 (patch)
tree9648ff3193421c445bf97a4d0d55a1d5c382b5aa
parent206398b4cec575249e725db0b02d8e690c5e7cd1 (diff)
Add player angle tilt effect and fix swap cooldown color
-rw-r--r--_RELEASE/config.json4
-rw-r--r--include/SSVOpenHexagon/Components/CPlayer.hpp5
-rw-r--r--include/SSVOpenHexagon/Core/HexagonGame.hpp7
-rw-r--r--include/SSVOpenHexagon/Global/Config.hpp2
-rw-r--r--src/SSVOpenHexagon/Components/CPlayer.cpp51
-rw-r--r--src/SSVOpenHexagon/Core/HGGraphics.cpp3
-rw-r--r--src/SSVOpenHexagon/Core/HGUpdate.cpp5
-rw-r--r--src/SSVOpenHexagon/Core/MenuGame.cpp2
-rw-r--r--src/SSVOpenHexagon/Global/Config.cpp11
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