diff --git a/src/electricity_effect.cc b/src/electricity_effect.cc index a9123af..33eebcc 100644 --- a/src/electricity_effect.cc +++ b/src/electricity_effect.cc @@ -26,13 +26,20 @@ ElectricityEffect::ElectricityEffect(Vector3 center, float radius, next = positions.front(); positions.pop(); + dir = Vector3Normalize(center - next); dir = Vector3Normalize(Vector3{call_js_get_random() * 2.0F - 1.0F, call_js_get_random() * 2.0F - 1.0F, - call_js_get_random() * 2.0F - 1.0F}); + call_js_get_random() * 2.0F - 1.0F} + + dir); auto coll = GetRayCollisionSphere(Ray{.position = next, .direction = dir}, center, radius); + if (coll.distance > CYLINDER_LINE_MAX_LENGTH) { + coll.point = + next + Vector3Normalize(coll.point - next) * CYLINDER_LINE_MAX_LENGTH; + } + cylinders.push_back(Cylinder{.start = next, .end = coll.point}); dir = Vector3Normalize(center - coll.point); diff --git a/src/electricity_effect.h b/src/electricity_effect.h index d61e914..bb43010 100644 --- a/src/electricity_effect.h +++ b/src/electricity_effect.h @@ -11,6 +11,7 @@ constexpr int CYLINDER_SPLIT_COUNT = 3; constexpr int CYLINDER_SIDES = 3; constexpr float CYLINDER_MAX_RADIUS = 0.03F; constexpr float CYLINDER_EDGE_OFFSET = 0.01F; +constexpr float CYLINDER_LINE_MAX_LENGTH = 1.5F; class ElectricityEffect { public: diff --git a/src/screen_trunner.h b/src/screen_trunner.h index c1cbdce..2289d72 100644 --- a/src/screen_trunner.h +++ b/src/screen_trunner.h @@ -29,7 +29,7 @@ constexpr float SURFACE_RESET_TIME = 4.0F; constexpr float SURFACE_RESET_TIME_TRI_DRAW = 3.0F; constexpr float SURFACE_RESET_Y_OFFSET = 40.0F; -constexpr int ELECTRICITY_EFFECT_LINE_COUNT = 50; +constexpr int ELECTRICITY_EFFECT_LINE_COUNT = 35; class TRunnerScreen : public Screen { public: