From 9252bfb61fabea1f45afacb19d805eb5fdd01599 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 28 Sep 2008 21:34:53 +0000 Subject: intro module --- src/game/intro/convoy.cc | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/game/intro/convoy.cc (limited to 'src/game/intro/convoy.cc') diff --git a/src/game/intro/convoy.cc b/src/game/intro/convoy.cc new file mode 100644 index 0000000..ea71a27 --- /dev/null +++ b/src/game/intro/convoy.cc @@ -0,0 +1,85 @@ +/* + intro/convoy.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include "intro/convoy.h" + +namespace intro { + +Member::Member(std::string const &model) : core::EntityControlable(0, 1) +{ + set_name("Convoy member"); + set_label(model); + + entity_modelname = "ships/" + model; + + entity_thrust = 1.0f; + entity_speed = 1.0f; + + entity_location.x = -16.0f; + entity_location.y = -math::randomf(8.0f); + entity_location.z = math::randomf(8.0f) - 6.0f; + + entity_axis.change_direction(15.0f); +} + +Member::~Member() +{ +} + +void Member::frame(float seconds) +{ + entity_location += entity_axis.forward() * speed() * thrust() * seconds; +} + +Convoy::Convoy(core::Zone *zone) +{ + convoy_zone = zone; +} + +Convoy::~Convoy() +{ + convoy_members.clear(); +} + +void Convoy::set_color(math::Color const &color) +{ + convoy_color.assign(color); +} +void Convoy::set_color_second(math::Color const &color) +{ + convoy_color_second.assign(color); +} + +void Convoy::add(const char *model) +{ + add(std::string(model)); +} + +void Convoy::add(std::string const &model) +{ + Member *member = new Member(model); + convoy_members.push_back(member); + member->set_zone(convoy_zone); + member->entity_color.assign(convoy_color); + member->entity_color_second.assign(convoy_color_second); +} + +void Convoy::frame(float seconds) +{ + for (Members::iterator it = convoy_members.begin(); it != convoy_members.end(); ) { + Member *member = (*it); + if (member->location().length() > 64.0f) { + std::string model(member->label()); + member->die(); + convoy_members.erase(it++); + add(model); + } else { + ++it; + } + } +} + +} \ No newline at end of file -- cgit v1.2.3