/* This file is part of Minitrem. Minitrem is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. Minitrem is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Minitrem. If not, see . */ #include "game.hpp" namespace game { effect_t::effect_t(state_t *game_) : game::entity_t(game_, ET_EFFECT) { } void effect_t::on_think(void) { if (game->now >= ttl) destroy(); } fx_tracer_t::fx_tracer_t(state_t *game_, v2f_t x0_, v2f_t x1_) : effect_t(game_) { ttl = game->now + 0.07; x0 = x0_; x1 = x1_; render_bounds[0] = x0; render_bounds[1] = x1; render_bounds = render_bounds.norm(); cmodel.bounds = render_bounds; cmodel.cflags = 0; ignore_waking = true; wake(); } void fx_tracer_t::render_to(render::state_t *render) { v2f_t x0l, x1l; float t; t = 1.0f - (ttl - game->now) / 0.07f * 0.7f; x0l[0] = lerp(x0[0], x1[0], t); x0l[1] = lerp(x0[1], x1[1], t); x1l[0] = lerp(x0[0], x1[0], t + 0.3f); x1l[1] = lerp(x0[1], x1[1], t + 0.3f); render->render_line(x0l, x1l, sf::Color::Yellow); } fx_blood_t::fx_blood_t(state_t *game_, v2f_t x_, bool alien_) : effect_t(game_) { ttl = game->now + 0.3f; x = x_; alien = alien_; render_bounds[0] = x - v2f_t(0.2, 0.2); render_bounds[1] = x + v2f_t(0.2, 0.2); cmodel.bounds = render_bounds; cmodel.cflags = 0; ignore_waking = true; wake(); } void fx_blood_t::render_to(render::state_t *render) { double phase; sf::Color color; phase = (game->now - ttl) / 0.3 + 1; if (alien) color = sf::Color::Green; else color = sf::Color::Red; render->render(phase, &assets::fx.blood, render_bounds, color); } fx_move_marker_t::fx_move_marker_t(state_t *game_, v2f_t x_) : effect_t(game_) { x = x_; render_bounds[0] = x + v2f_t(-0.15, -0.4); render_bounds[1] = x + v2f_t(0.15, 0.2); cmodel.bounds = render_bounds; cmodel.cflags = 0; ignore_waking = true; link(&game->world); } fx_move_marker_t::~fx_move_marker_t(void) { unlink(); sleep(); } void fx_move_marker_t::render_to(render::state_t *render) { render->render(game->now * 2, &assets::move_marker, render_bounds, sf::Color::White); } } // namespace game