commit f5a7ddbe7c5d951bbd175b2cfc2dc8b33ad7cdad
parent 7c965fe613a12acf5efdb0b6ab51e0b8810ed906
Author: amrfti <andrew@kloet.net>
Date: Thu, 22 May 2025 21:55:44 -0400
refactor waterline
Diffstat:
2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/src/Waterline.cpp b/src/Waterline.cpp
@@ -3,9 +3,8 @@
#include "Random.h"
#include "defs.h"
#include <algorithm>
-#include <ncurses.h>
-Waterline::Waterline() : x(0), y(5) {
+Waterline::Waterline() : x(0), y(WATERLINE_Y) {
shape = {
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", "^^^^ ^^^ ^^^ ^^^ ^^^^ ",
"^^^^ ^^^^ ^^^ ^^ ", "^^ ^^^^ ^^^ ^^^^^^ "};
@@ -16,21 +15,26 @@ Waterline::Waterline() : x(0), y(5) {
while (line.size() < width) {
line += original;
}
+ colorLines.emplace_back(line.size(), WATERLINE_COLOR);
}
}
void Waterline::draw() const {
for (size_t i = 0; i < shape.size(); ++i) {
- Aquarium::getInstance().drawToBackBuffer(i + y, x, 0, shape[i],
- std::string(shape[i].size(), 'c'));
+ Aquarium::getInstance().drawToBackBuffer(y + static_cast<int>(i), x, 0,
+ shape[i], colorLines[i]);
}
}
void Waterline::update() {
+ // Skip the first line (index 0) as it's static
for (size_t i = 1; i < shape.size(); ++i) {
- // Probability increases with line index (later lines = higher chance)
- float chance = static_cast<float>(i) / shape.size();
- if (Random::floatInRange(0.0f, 1.0f) < chance * (1.0f / WAVE_MOVE_CHANCE)) {
+ // Probability increases with depth (higher index = more movement)
+ float movementChance =
+ static_cast<float>(i) / static_cast<float>(shape.size());
+ float threshold = movementChance / WAVE_MOVE_CHANCE;
+
+ if (Random::floatInRange(0.0f, 1.0f) < threshold) {
int direction = Random::intInRange(0, 1) == 0 ? -1 : 1;
shiftString(shape[i], direction);
}
@@ -38,7 +42,7 @@ void Waterline::update() {
}
void Waterline::shiftString(std::string &str, int direction) {
- if (direction == 1) {
+ if (direction > 0) {
std::rotate(str.rbegin(), str.rbegin() + 1, str.rend());
} else {
std::rotate(str.begin(), str.begin() + 1, str.end());
diff --git a/src/Waterline.h b/src/Waterline.h
@@ -1,11 +1,18 @@
#pragma once
-#include "Entity.h"
+#include <string>
+#include <vector>
class Waterline {
private:
+ static constexpr int WATERLINE_Y = 5;
+ static constexpr char WATERLINE_COLOR = 'c';
+
size_t x, y;
std::vector<std::string> shape;
- void shiftString(std::string &, int direction);
+ std::vector<std::string> colorLines;
+
+ void shiftString(std::string &str, int direction);
+ void initializeShape();
public:
Waterline();