git repos / blockattack-game

blame: source/code/ExplosionManager.hpp

normal view · raw

d450da8b sago007 2017-03-25 17:03 1
/*
d450da8b sago007 2017-03-25 17:03 2
===========================================================================
d450da8b sago007 2017-03-25 17:03 3
blockattack - Block Attack - Rise of the Blocks
d450da8b sago007 2017-03-25 17:03 4
Copyright (C) 2005-2017 Poul Sander
d450da8b sago007 2017-03-25 17:03 5
d450da8b sago007 2017-03-25 17:03 6
This program is free software: you can redistribute it and/or modify
d450da8b sago007 2017-03-25 17:03 7
it under the terms of the GNU General Public License as published by
d450da8b sago007 2017-03-25 17:03 8
the Free Software Foundation, either version 2 of the License, or
d450da8b sago007 2017-03-25 17:03 9
(at your option) any later version.
d450da8b sago007 2017-03-25 17:03 10
d450da8b sago007 2017-03-25 17:03 11
This program is distributed in the hope that it will be useful,
d450da8b sago007 2017-03-25 17:03 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
d450da8b sago007 2017-03-25 17:03 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d450da8b sago007 2017-03-25 17:03 14
GNU General Public License for more details.
d450da8b sago007 2017-03-25 17:03 15
d450da8b sago007 2017-03-25 17:03 16
You should have received a copy of the GNU General Public License
d450da8b sago007 2017-03-25 17:03 17
along with this program.  If not, see http://www.gnu.org/licenses/
d450da8b sago007 2017-03-25 17:03 18
d450da8b sago007 2017-03-25 17:03 19
Source information and contacts persons can be found at
d450da8b sago007 2017-03-25 17:03 20
http://www.blockattack.net
d450da8b sago007 2017-03-25 17:03 21
===========================================================================
d450da8b sago007 2017-03-25 17:03 22
*/
d450da8b sago007 2017-03-25 17:03 23
d450da8b sago007 2017-03-25 17:03 24
#ifndef EXPLOSIONMANAGER_HPP
d450da8b sago007 2017-03-25 17:03 25
#define EXPLOSIONMANAGER_HPP
d450da8b sago007 2017-03-25 17:03 26
f5d6c281 sago007 2017-03-25 17:08 27
#include <array>
f5d6c281 sago007 2017-03-25 17:08 28
d450da8b sago007 2017-03-25 17:03 29
//a explosions, non moving
d450da8b sago007 2017-03-25 17:03 30
class AnExplosion {
d450da8b sago007 2017-03-25 17:03 31
private:
d450da8b sago007 2017-03-25 17:03 32
	int x = 0;
d450da8b sago007 2017-03-25 17:03 33
	int y = 0;
d450da8b sago007 2017-03-25 17:03 34
	Uint8 frameNumber = 0;
d450da8b sago007 2017-03-25 17:03 35
#define frameLength 80
d450da8b sago007 2017-03-25 17:03 36
	//How long an image in an animation should be showed
d450da8b sago007 2017-03-25 17:03 37
#define maxFrame 4
d450da8b sago007 2017-03-25 17:03 38
	//How many images there are in the animation
d450da8b sago007 2017-03-25 17:03 39
	unsigned long int placeTime = 0; //Then the explosion occored
d450da8b sago007 2017-03-25 17:03 40
public:
d450da8b sago007 2017-03-25 17:03 41
	bool inUse = false;
d450da8b sago007 2017-03-25 17:03 42
d450da8b sago007 2017-03-25 17:03 43
	AnExplosion() {
d450da8b sago007 2017-03-25 17:03 44
	}
d450da8b sago007 2017-03-25 17:03 45
d450da8b sago007 2017-03-25 17:03 46
	//constructor:
d450da8b sago007 2017-03-25 17:03 47
	AnExplosion(int X, int Y) {
d450da8b sago007 2017-03-25 17:03 48
		placeTime = SDL_GetTicks();
d450da8b sago007 2017-03-25 17:03 49
		x = X;
d450da8b sago007 2017-03-25 17:03 50
		y = Y;
d450da8b sago007 2017-03-25 17:03 51
		frameNumber=0;
d450da8b sago007 2017-03-25 17:03 52
	}  //constructor
d450da8b sago007 2017-03-25 17:03 53
d450da8b sago007 2017-03-25 17:03 54
	//true if animation has played and object should be removed from the screen
d450da8b sago007 2017-03-25 17:03 55
	bool removeMe() {
d450da8b sago007 2017-03-25 17:03 56
		frameNumber = (SDL_GetTicks()-placeTime)/frameLength;
d450da8b sago007 2017-03-25 17:03 57
		return (!(frameNumber<maxFrame));
d450da8b sago007 2017-03-25 17:03 58
	}
d450da8b sago007 2017-03-25 17:03 59
d450da8b sago007 2017-03-25 17:03 60
	int getX() {
d450da8b sago007 2017-03-25 17:03 61
		return (int)x;
d450da8b sago007 2017-03-25 17:03 62
	}
d450da8b sago007 2017-03-25 17:03 63
d450da8b sago007 2017-03-25 17:03 64
	int getY() {
d450da8b sago007 2017-03-25 17:03 65
		return (int)y;
d450da8b sago007 2017-03-25 17:03 66
	}
d450da8b sago007 2017-03-25 17:03 67
d450da8b sago007 2017-03-25 17:03 68
	int getFrame() {
d450da8b sago007 2017-03-25 17:03 69
		return frameNumber;
d450da8b sago007 2017-03-25 17:03 70
	}
d450da8b sago007 2017-03-25 17:03 71
};  //nExplosion
d450da8b sago007 2017-03-25 17:03 72
d450da8b sago007 2017-03-25 17:03 73
class ExplosionManager {
d450da8b sago007 2017-03-25 17:03 74
	static const int maxNumberOfExplosions = 6*12*2*2;
f5d6c281 sago007 2017-03-25 17:08 75
public:
f5d6c281 sago007 2017-03-25 17:08 76
	std::array<AnExplosion, maxNumberOfExplosions> explosionArray;
d450da8b sago007 2017-03-25 17:03 77
d450da8b sago007 2017-03-25 17:03 78
	ExplosionManager() {
d450da8b sago007 2017-03-25 17:03 79
	}
d450da8b sago007 2017-03-25 17:03 80
d450da8b sago007 2017-03-25 17:03 81
	int addExplosion(int x, int y) {
f5d6c281 sago007 2017-03-25 17:08 82
		size_t explosionNumber = 0;
f5d6c281 sago007 2017-03-25 17:08 83
		while ( explosionNumber<explosionArray.size() && explosionArray[explosionNumber].inUse) {
d450da8b sago007 2017-03-25 17:03 84
			explosionNumber++;
d450da8b sago007 2017-03-25 17:03 85
		}
f5d6c281 sago007 2017-03-25 17:08 86
		if (explosionNumber==explosionArray.size()) {
d450da8b sago007 2017-03-25 17:03 87
			return -1;
d450da8b sago007 2017-03-25 17:03 88
		}
d450da8b sago007 2017-03-25 17:03 89
		explosionArray[explosionNumber] = AnExplosion(x,y);
d450da8b sago007 2017-03-25 17:03 90
		explosionArray[explosionNumber].inUse = true;
d450da8b sago007 2017-03-25 17:03 91
		return 1;
d450da8b sago007 2017-03-25 17:03 92
	}  //addBall
d450da8b sago007 2017-03-25 17:03 93
d450da8b sago007 2017-03-25 17:03 94
	void update() {
f5d6c281 sago007 2017-03-25 17:08 95
		for (size_t i = 0; i<explosionArray.size(); i++) {
d450da8b sago007 2017-03-25 17:03 96
d450da8b sago007 2017-03-25 17:03 97
			if (explosionArray[i].inUse) {
d450da8b sago007 2017-03-25 17:03 98
				if (explosionArray[i].removeMe()) {
d450da8b sago007 2017-03-25 17:03 99
					explosionArray[i].inUse = false;
d450da8b sago007 2017-03-25 17:03 100
				}
d450da8b sago007 2017-03-25 17:03 101
			}
d450da8b sago007 2017-03-25 17:03 102
		}
d450da8b sago007 2017-03-25 17:03 103
	} //update
d450da8b sago007 2017-03-25 17:03 104
d450da8b sago007 2017-03-25 17:03 105
d450da8b sago007 2017-03-25 17:03 106
}; //explosionManager
d450da8b sago007 2017-03-25 17:03 107
d450da8b sago007 2017-03-25 17:03 108
#endif /* EXPLOSIONMANAGER_HPP */
d450da8b sago007 2017-03-25 17:03 109
1970-01-01 00:00 110