From a4ee68bebf5f9424b5db515da9a350843d8a3fe1 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sat, 24 Jan 2009 22:50:18 +0000 Subject: [PATCH] Exhaust graphics for missiles --- src/Emitter.cpp | 25 +++++++++++++++++++------ src/Emitter.hpp | 13 ++++++++++++- src/Main.cpp | 2 +- src/Missile.cpp | 14 ++++++++++++-- src/Missile.hpp | 5 ++++- src/Ship.hpp | 2 +- 6 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/Emitter.cpp b/src/Emitter.cpp index 9690846..10e6f62 100644 --- a/src/Emitter.cpp +++ b/src/Emitter.cpp @@ -204,15 +204,28 @@ void Emitter::NewParticle(int index) // // Smoke trail constructor. Sets special Emitter constants. // -SmokeTrail::SmokeTrail() - : Emitter(0, 0, 0.6f, 0.6f, 0.9f, +SmokeTrail::SmokeTrail(float r, float g, float b, + float dr, float dg, float db) + : Emitter(0, 0, r, g, b, false, 0.2f, 0.0f, 0.0f, - 0.3f, 0.0f, 4.0f, 0.001f) + 0.3f, 0.0f, 4.0f, 0.001f), + dr(dr), dg(dg), db(db) { createrate = 64.0f; } +BlueSmokeTrail::BlueSmokeTrail() + : SmokeTrail(0.6f, 0.6f, 0.9f, 0.03f, 0.03f, 0.02f) +{ + +} + +OrangeSmokeTrail::OrangeSmokeTrail() + : SmokeTrail(0.9f, 0.6f, 0.6f, 0.02f, 0.03f, 0.03f) +{ + +} // // Processes the smoke trail effect for particle p. @@ -224,11 +237,11 @@ void SmokeTrail::ProcessEffect(int p) else { if (particle[p].r > 0.1f) - particle[p].r -= 0.03f; + particle[p].r -= dr; if (particle[p].b > 0.1f) - particle[p].b -= 0.02f; + particle[p].b -= db; if (particle[p].g > 0.1f) - particle[p].g -= 0.03f; + particle[p].g -= dg; } } diff --git a/src/Emitter.hpp b/src/Emitter.hpp index 17a1971..4a41f4d 100644 --- a/src/Emitter.hpp +++ b/src/Emitter.hpp @@ -68,13 +68,24 @@ protected: // class SmokeTrail : public Emitter { public: - SmokeTrail(); + SmokeTrail(float r, float g, float b, + float dr, float dg, float db); virtual ~SmokeTrail() { } void ProcessEffect(int particle); private: + float dr, dg, db; }; +class BlueSmokeTrail : public SmokeTrail { +public: + BlueSmokeTrail(); +}; + +class OrangeSmokeTrail : public SmokeTrail { +public: + OrangeSmokeTrail(); +}; // // An explosion. diff --git a/src/Main.cpp b/src/Main.cpp index 00df5c7..0d6a3e9 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -124,7 +124,7 @@ int main(int argc, char **argv) DestroyScreens(); } - catch (std::runtime_error e) { + catch (std::runtime_error& e) { #ifdef WIN32 MessageBox(NULL, e.what(), "Runtime Error", MB_OK | MB_ICONSTOP); #else /* #ifdef WIN32 */ diff --git a/src/Missile.cpp b/src/Missile.cpp index b680447..33baf62 100644 --- a/src/Missile.cpp +++ b/src/Missile.cpp @@ -54,8 +54,12 @@ void Missile::Draw() const { if (viewport->PointInScreen(dx, dy, ObjectGrid::OBJ_GRID_SIZE, ObjectGrid::OBJ_GRID_SIZE) - && state != DESTROYED) + && state != DESTROYED) { image->Draw(dx - viewport->GetXAdjust(), dy - viewport->GetYAdjust(), angle); + } + + exhaust.Draw((double)viewport->GetXAdjust(), + (double)viewport->GetYAdjust()); } bool Missile::CheckCollison(const Ship& ship) @@ -88,12 +92,18 @@ void Missile::MoveFixed(const Ship& ship) if (xDistance <= HORIZ_FIRE_RANGE && yDistance <= VERT_FIRE_RANGE) state = FLYING; + + exhaust.Process(false); } void Missile::MoveFlying() { dx += speed * sin(angle * M_PI/180); dy += speed * cos(angle * M_PI/180); + + exhaust.xpos = dx; + exhaust.ypos = dy + image->GetHeight()/2; + exhaust.Process(true); speed += ACCEL; @@ -104,6 +114,6 @@ void Missile::MoveFlying() void Missile::MoveDestroyed() { - + exhaust.Process(false); } diff --git a/src/Missile.hpp b/src/Missile.hpp index 870e992..611320b 100644 --- a/src/Missile.hpp +++ b/src/Missile.hpp @@ -1,6 +1,6 @@ // // Missile.hpp -- Missiles on asteroids, etc. -// Copyright (C) 2008 Nick Gasson +// Copyright (C) 2008-2009 Nick Gasson // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ #include "GameObjFwd.hpp" #include "GraphicsFwd.hpp" +#include "Emitter.hpp" class Missile { public: @@ -44,6 +45,8 @@ private: enum State { FIXED, FLYING, DESTROYED }; State state; + OrangeSmokeTrail exhaust; + static Image* image; static const double ACCEL; static const int HORIZ_FIRE_RANGE, VERT_FIRE_RANGE; diff --git a/src/Ship.hpp b/src/Ship.hpp index c1b19a7..a7acb3b 100644 --- a/src/Ship.hpp +++ b/src/Ship.hpp @@ -67,7 +67,7 @@ private: Viewport* viewport; Explosion explosion; - SmokeTrail exhaust; + BlueSmokeTrail exhaust; bool thrusting; SoundEffect boingSound; -- 2.39.2