Renamed some folders
This commit is contained in:
@@ -1,145 +0,0 @@
|
||||
/* Copyright: (c) Kayne Ruse 2013-2016
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "image.hpp"
|
||||
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
template<typename T = class Image>
|
||||
class CompositeImage {
|
||||
public:
|
||||
CompositeImage() = default;
|
||||
~CompositeImage() = default;
|
||||
|
||||
void Load(SDL_Renderer* const, std::string spriteDir, std::list<std::string> nameList);
|
||||
void SetTextures(std::map<std::string, Image>& templateImages);
|
||||
void Free();
|
||||
|
||||
void DrawTo(SDL_Renderer* const, Sint16 x, Sint16 y, double scaleX = 1.0, double scaleY = 1.0);
|
||||
|
||||
//accessors & mutators
|
||||
T* Find(std::string name);
|
||||
|
||||
bool Enable(std::string name);
|
||||
bool Disable(std::string name);
|
||||
void EnableAll();
|
||||
void DisableAll();
|
||||
|
||||
std::map<std::string, std::pair<bool, T>>* GetTemplateImages();
|
||||
|
||||
private:
|
||||
std::map<std::string, std::pair<bool, T>> imageMap;
|
||||
};
|
||||
|
||||
|
||||
template<typename T>
|
||||
void CompositeImage<T>::Load(SDL_Renderer* const renderer, std::string spriteDir, std::list<std::string> nameList) {
|
||||
for (auto& it : nameList) {
|
||||
imageMap[it].first = true;
|
||||
imageMap[it].second.Load(renderer, spriteDir + it);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void CompositeImage<T>::SetTextures(std::map<std::string, Image>& templateImages) {
|
||||
for (auto& it : templateImages) {
|
||||
imageMap[it.first].first = true;
|
||||
imageMap[it.first].second.SetTexture(it.second.GetTexture());
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void CompositeImage<T>::Free() {
|
||||
imageMap.clear();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void CompositeImage<T>::DrawTo(SDL_Renderer* const dest, Sint16 x, Sint16 y, double scaleX, double scaleY) {
|
||||
//draw all members, regardless of internal ordering
|
||||
for (auto& it : imageMap) {
|
||||
if (it.second.first) {
|
||||
it.second.second.DrawTo(dest, x, y, scaleX, scaleY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------
|
||||
//accessors & mutators
|
||||
//-------------------------
|
||||
|
||||
template<typename T>
|
||||
T* CompositeImage<T>::Find(std::string name) {
|
||||
auto it = imageMap.find(name);
|
||||
if (it == imageMap.end()) {
|
||||
return nullptr;
|
||||
}
|
||||
else {
|
||||
return &it->second.second;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool CompositeImage<T>::Enable(std::string name) {
|
||||
auto it = imageMap.find(name);
|
||||
if (it == imageMap.end()) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
imageMap[name].first = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool CompositeImage<T>::Disable(std::string name) {
|
||||
auto it = imageMap.find(name);
|
||||
if (it == imageMap.end()) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
imageMap[name].first = false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void CompositeImage<T>::EnableAll() {
|
||||
for (auto& it : imageMap) {
|
||||
it.second.first = true;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void CompositeImage<T>::DisableAll() {
|
||||
for (auto& it : imageMap) {
|
||||
it.second.first = false;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
std::map<std::string, std::pair<bool, T>>* CompositeImage<T>::GetTemplateImages() {
|
||||
return &imageMap;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
#config
|
||||
INCLUDES+=. ../utilities
|
||||
LIBS+=
|
||||
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
|
||||
|
||||
#source
|
||||
CXXSRC=$(wildcard *.cpp)
|
||||
|
||||
#objects
|
||||
OBJDIR=obj
|
||||
OBJ+=$(addprefix $(OBJDIR)/,$(CXXSRC:.cpp=.o))
|
||||
|
||||
#targets
|
||||
all: $(OBJ) $(OUT)
|
||||
ar -crs $(OUT) $(OBJ)
|
||||
|
||||
$(OBJ): | $(OBJDIR)
|
||||
|
||||
$(OUT): | $(OUTDIR)
|
||||
|
||||
$(OBJDIR):
|
||||
mkdir $(OBJDIR)
|
||||
|
||||
$(OUTDIR):
|
||||
mkdir $(OUTDIR)
|
||||
|
||||
$(OBJDIR)/%.o: %.cpp
|
||||
$(CXX) $(CXXFLAGS) -c -o $@ $<
|
||||
@@ -1,186 +0,0 @@
|
||||
/* Copyright: (c) Kayne Ruse 2013-2016
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
#include "sprite_sheet.hpp"
|
||||
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
|
||||
SpriteSheet& SpriteSheet::operator=(SpriteSheet const& rhs) {
|
||||
//don't screw yourself
|
||||
if (this == &rhs) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
Free();
|
||||
|
||||
//Copy the other SpriteSheet's stuff
|
||||
texture = rhs.texture;
|
||||
clip = rhs.clip;
|
||||
local = false;
|
||||
countX = rhs.countX;
|
||||
countY = rhs.countY;
|
||||
indexX = rhs.indexX;
|
||||
indexY = rhs.indexY;
|
||||
delay = rhs.delay;
|
||||
tick = rhs.tick;
|
||||
}
|
||||
|
||||
SpriteSheet& SpriteSheet::operator=(SpriteSheet&& rhs) {
|
||||
//don't screw yourself
|
||||
if (this == &rhs) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
Free();
|
||||
|
||||
//Steal the other SpriteSheet's stuff
|
||||
texture = rhs.texture;
|
||||
clip = rhs.clip;
|
||||
local = rhs.local;
|
||||
countX = rhs.countX;
|
||||
countY = rhs.countY;
|
||||
indexX = rhs.indexX;
|
||||
indexY = rhs.indexY;
|
||||
delay = rhs.delay;
|
||||
tick = rhs.tick;
|
||||
|
||||
rhs.texture = nullptr;
|
||||
rhs.clip = {0, 0, 0, 0};
|
||||
rhs.local = false;
|
||||
rhs.countX = 0;
|
||||
rhs.countY = 0;
|
||||
rhs.indexX = 0;
|
||||
rhs.indexY = 0;
|
||||
rhs.delay = 0.0;
|
||||
rhs.tick = 0.0;
|
||||
}
|
||||
|
||||
void SpriteSheet::Update(double delta) {
|
||||
//if the delay has passed
|
||||
if (delay && (tick += delta) >= delay) {
|
||||
//if the index is out of bounds
|
||||
if (++indexX >= countX) {
|
||||
indexX = 0;
|
||||
}
|
||||
tick = 0;
|
||||
}
|
||||
//modify area drawn
|
||||
clip.x = indexX * clip.w;
|
||||
clip.y = indexY * clip.h;
|
||||
}
|
||||
|
||||
SDL_Texture* SpriteSheet::Load(SDL_Renderer* r, std::string fname, Uint16 cx, Uint16 cy) {
|
||||
//call the base function
|
||||
Image::Load(r, fname);
|
||||
|
||||
//set the metadata
|
||||
countX = cx;
|
||||
countY = cy;
|
||||
|
||||
//assume clip.x and clip.y were set to the size of the texture
|
||||
//reduce the w & h to the size of one cell
|
||||
clip.w = clip.w / countX;
|
||||
clip.h = clip.h / countY;
|
||||
|
||||
indexX = indexY = 0;
|
||||
delay = tick = 0.0;
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
SDL_Texture* SpriteSheet::Create(SDL_Renderer* r, Uint16 w, Uint16 h, Uint16 cx, Uint16 cy) {
|
||||
//call the base function
|
||||
Image::Create(r, w, h);
|
||||
|
||||
//set the metadata
|
||||
countX = cx;
|
||||
countY = cy;
|
||||
|
||||
//assume clip.x and clip.y were set to the size of the texture
|
||||
//reduce the w & h to the size of one cell
|
||||
clip.w = clip.w / countX;
|
||||
clip.h = clip.h / countY;
|
||||
|
||||
indexX = indexY = 0;
|
||||
delay = tick = 0.0;
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
SDL_Texture* SpriteSheet::SetTexture(SDL_Texture* ptr, Uint16 cx, Uint16 cy) {
|
||||
//call the base function
|
||||
Image::SetTexture(ptr);
|
||||
|
||||
//set the metadata
|
||||
countX = cx;
|
||||
countY = cy;
|
||||
|
||||
//assume clip.x and clip.y were set to the size of the texture
|
||||
//reduce the w & h to the size of one cell
|
||||
clip.w = clip.w / countX;
|
||||
clip.h = clip.h / countY;
|
||||
|
||||
indexX = indexY = 0;
|
||||
delay = tick = 0.0;
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
void SpriteSheet::Free() {
|
||||
Image::Free();
|
||||
countX = countY = 0;
|
||||
indexX = indexY = 0;
|
||||
delay = tick = 0.0;
|
||||
}
|
||||
|
||||
Uint16 SpriteSheet::SetCountX(Uint16 i) {
|
||||
indexX = 0;
|
||||
return countX = i;
|
||||
}
|
||||
|
||||
Uint16 SpriteSheet::SetCountY(Uint16 i) {
|
||||
indexY = 0;
|
||||
return countY = i;
|
||||
}
|
||||
|
||||
Uint16 SpriteSheet::SetIndexX(Uint16 i) {
|
||||
if (i > countX) {
|
||||
std::ostringstream msg;
|
||||
msg << "Cannot set index 'x' to " << i;
|
||||
throw(std::out_of_range(msg.str()));
|
||||
}
|
||||
return indexX = i;
|
||||
}
|
||||
|
||||
Uint16 SpriteSheet::SetIndexY(Uint16 i) {
|
||||
if (i > countY) {
|
||||
std::ostringstream msg;
|
||||
msg << "Cannot set index 'y' to " << i;
|
||||
throw(std::invalid_argument(msg.str()));
|
||||
}
|
||||
return indexY = i;
|
||||
}
|
||||
|
||||
double SpriteSheet::SetDelay(double d) {
|
||||
tick = 0;
|
||||
return delay = d;
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
/* Copyright: (c) Kayne Ruse 2013-2016
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "image.hpp"
|
||||
|
||||
class SpriteSheet : public Image {
|
||||
public:
|
||||
SpriteSheet() = default;
|
||||
SpriteSheet(SpriteSheet const& rhs) { *this = rhs; }
|
||||
SpriteSheet(SpriteSheet&& rhs) { *this = std::move(rhs); }
|
||||
SpriteSheet(SDL_Renderer* r, std::string fname, Uint16 cx, Uint16 cy)
|
||||
{ Load(r, fname, cx, cy); }
|
||||
SpriteSheet(SDL_Renderer* r, Uint16 w, Uint16 h, Uint16 cx, Uint16 cy)
|
||||
{ Create(r, w, h, cx, cy); }
|
||||
SpriteSheet(SDL_Texture* p, Uint16 cx, Uint16 cy)
|
||||
{ SetTexture(p, cx, cy); }
|
||||
~SpriteSheet() = default;
|
||||
|
||||
SpriteSheet& operator=(SpriteSheet const&);
|
||||
SpriteSheet& operator=(SpriteSheet&&);
|
||||
|
||||
void Update(double delta);
|
||||
|
||||
SDL_Texture* Load(SDL_Renderer*, std::string fname, Uint16 cx, Uint16 cy);
|
||||
SDL_Texture* Create(SDL_Renderer*, Uint16 w, Uint16 h, Uint16 cx, Uint16 cy);
|
||||
SDL_Texture* SetTexture(SDL_Texture*, Uint16 cx, Uint16 cy);
|
||||
void Free() override;
|
||||
|
||||
Uint16 SetCountX(Uint16);
|
||||
Uint16 SetCountY(Uint16);
|
||||
Uint16 SetIndexX(Uint16);
|
||||
Uint16 SetIndexY(Uint16);
|
||||
|
||||
Uint16 GetCountX() const { return countX; }
|
||||
Uint16 GetCountY() const { return countY; }
|
||||
Uint16 GetIndexX() const { return indexX; }
|
||||
Uint16 GetIndexY() const { return indexY; }
|
||||
|
||||
double SetDelay(double d);
|
||||
double GetDelay() const { return delay; }
|
||||
|
||||
private:
|
||||
Uint16 countX = 0, countY = 0, indexX = 0, indexY = 0;
|
||||
double delay = 0.0, tick = 0.0;
|
||||
|
||||
//disable access
|
||||
using Image::Load;
|
||||
using Image::Create;
|
||||
using Image::SetTexture;
|
||||
};
|
||||
@@ -1,75 +0,0 @@
|
||||
/* Copyright: (c) Kayne Ruse 2013-2016
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <type_traits>
|
||||
#include <algorithm>
|
||||
|
||||
class BoundingBox {
|
||||
public:
|
||||
//This is explicitly a POD
|
||||
int x, y;
|
||||
int w, h;
|
||||
|
||||
BoundingBox() = default;
|
||||
BoundingBox(int i, int j): x(i), y(j), w(0), h(0) {};
|
||||
BoundingBox(int i, int j, int k, int l): x(i), y(j), w(k), h(l) {};
|
||||
~BoundingBox() = default;
|
||||
BoundingBox& operator=(BoundingBox const&) = default;
|
||||
|
||||
int Size() {
|
||||
return std::max(w*h,0);
|
||||
}
|
||||
|
||||
bool CheckOverlap(BoundingBox rhs) {
|
||||
return !(
|
||||
x >= rhs.x + rhs.w ||
|
||||
y >= rhs.y + rhs.h ||
|
||||
rhs.x >= x + w ||
|
||||
rhs.y >= y + h);
|
||||
}
|
||||
|
||||
BoundingBox CalcOverlap(BoundingBox rhs) {
|
||||
if (!CheckOverlap(rhs)) {
|
||||
return {0, 0, 0, 0};
|
||||
}
|
||||
BoundingBox ret;
|
||||
ret.x = std::max(x, rhs.x);
|
||||
ret.y = std::max(y, rhs.y);
|
||||
ret.w = std::min(x+w, rhs.x+rhs.w) - ret.x;
|
||||
ret.h = std::min(y+h, rhs.y+rhs.h) - ret.y;
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
|
||||
//This is explicitly a POD
|
||||
static_assert(std::is_pod<BoundingBox>::value, "BoundingBox is not a POD");
|
||||
|
||||
#include "vector2.hpp"
|
||||
|
||||
//operators
|
||||
inline BoundingBox operator+(BoundingBox b, Vector2 v) {
|
||||
return {b.x + (int)v.x, b.y + (int)v.y, b.w, b.h};
|
||||
}
|
||||
inline BoundingBox operator+(Vector2 v, BoundingBox b) {
|
||||
return b + v;
|
||||
}
|
||||
@@ -1,111 +0,0 @@
|
||||
/* Copyright: (c) Kayne Ruse 2013-2016
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would be
|
||||
* appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||
* misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <type_traits>
|
||||
#include <stdexcept>
|
||||
#include <cmath>
|
||||
|
||||
class Vector2 {
|
||||
public:
|
||||
double x, y;
|
||||
|
||||
Vector2() = default;
|
||||
Vector2(double i, double j): x(i), y(j) {};
|
||||
~Vector2() = default;
|
||||
Vector2& operator=(Vector2 const&) = default;
|
||||
|
||||
double Length() const {
|
||||
return sqrt(x*x+y*y);
|
||||
}
|
||||
double SquaredLength() const {
|
||||
return x*x+y*y;
|
||||
}
|
||||
void Normalize() {
|
||||
double l = Length();
|
||||
if (l == 0)
|
||||
throw(std::domain_error("Divide by zero"));
|
||||
x /= l;
|
||||
y /= l;
|
||||
}
|
||||
|
||||
//Arithmetic operators
|
||||
Vector2 operator+(Vector2 v) const {
|
||||
Vector2 ret;
|
||||
ret.x = x + v.x;
|
||||
ret.y = y + v.y;
|
||||
return ret;
|
||||
}
|
||||
Vector2 operator-(Vector2 v) const {
|
||||
Vector2 ret;
|
||||
ret.x = x - v.x;
|
||||
ret.y = y - v.y;
|
||||
return ret;
|
||||
}
|
||||
Vector2 operator*(Vector2 v) const {
|
||||
Vector2 ret;
|
||||
ret.x = x * v.x;
|
||||
ret.y = y * v.y;
|
||||
return ret;
|
||||
}
|
||||
Vector2 operator*(double d) const {
|
||||
Vector2 ret;
|
||||
ret.x = x * d;
|
||||
ret.y = y * d;
|
||||
return ret;
|
||||
}
|
||||
|
||||
Vector2 operator/(Vector2 v) {
|
||||
if (!v.x || !v.y)
|
||||
throw(std::domain_error("Divide by zero"));
|
||||
Vector2 ret;
|
||||
ret.x = x / v.x;
|
||||
ret.y = y / v.y;
|
||||
return ret;
|
||||
}
|
||||
Vector2 operator/(double d) {
|
||||
if (!d)
|
||||
throw(std::domain_error("Divide by zero"));
|
||||
Vector2 ret;
|
||||
ret.x = x / d;
|
||||
ret.y = y / d;
|
||||
return ret;
|
||||
}
|
||||
|
||||
//unary operators
|
||||
Vector2 operator-() { return {-x, -y}; }
|
||||
|
||||
//comparison operators
|
||||
bool operator==(Vector2 v) { return (x == v.x && y == v.y); }
|
||||
bool operator!=(Vector2 v) { return (x != v.x || y != v.y); }
|
||||
|
||||
//member templates (curry the above operators)
|
||||
template<typename T> Vector2 operator+=(T t) { return *this = *this + t; }
|
||||
template<typename T> Vector2 operator-=(T t) { return *this = *this - t; }
|
||||
template<typename T> Vector2 operator*=(T t) { return *this = *this * t; }
|
||||
template<typename T> Vector2 operator/=(T t) { return *this = *this / t; }
|
||||
template<typename T> bool operator==(T t) { return (x == t && y == t); }
|
||||
template<typename T> bool operator!=(T t) { return (x != t || y != t); }
|
||||
};
|
||||
|
||||
//This is explicitly a POD
|
||||
static_assert(std::is_pod<Vector2>::value, "Vector2 is not a POD");
|
||||
Reference in New Issue
Block a user