Files
fissh/src/Seaweed.cpp

41 lines
1.1 KiB
C++

#include "Seaweed.h"
#include "Aquarium.h"
#include "Random.h"
#include "defs.h"
#include <ncurses.h>
Seaweed::Seaweed()
: x(Random::intInRange(0, Aquarium::getInstance().getWidth())),
y(Aquarium::getInstance().getHeight()),
height(Random::intInRange(SEAWEED_MIN_HEIGHT, SEAWEED_MAX_HEIGHT)),
speed(Random::floatInRange(0.1f, 0.3f)),
lifetime(Random::intInRange(SEAWEED_MIN_LIFETIME, SEAWEED_MAX_LIFETIME)) {
}
void Seaweed::update() noexcept {
frame += speed;
if (frame >= 1.0f) {
pattern_flipped = !pattern_flipped;
frame -= 1.0f;
}
--lifetime;
}
void Seaweed::draw() const {
auto &aquarium = Aquarium::getInstance();
std::string line(1, '\0');
std::string colorLine(1, 'g');
for (size_t i = 0; i < height; ++i) {
// Determine character and position for this segment
const bool use_left = (i % 2 == 0) ^ pattern_flipped;
const char ch = use_left ? PATTERN_LEFT : PATTERN_RIGHT;
const int drawX = static_cast<int>(x) + (use_left ? 0 : 1);
const int drawY = y - static_cast<int>(i);
line[0] = ch;
aquarium.drawToBackBuffer(drawY, drawX, 0, line, colorLine);
}
}