Imported updates from Codebase

This commit is contained in:
Kayne Ruse
2013-05-15 19:49:27 +10:00
parent 9f76b19a3c
commit 613d9cec08
13 changed files with 383 additions and 50 deletions
+96
View File
@@ -0,0 +1,96 @@
/* Copyright: (c) Kayne Ruse 2013
*
* 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 "button.hpp"
#include <stdexcept>
Button::Button():
Button(0,0, nullptr, nullptr)
{
}
Button::Button(Sint16 i, Sint16 j, SDL_Surface* imageSurface, SDL_Surface* fontSurface, std::string s) {
x = i;
y = j;
state = State::NORMAL;
//graphical stuff
image.SetSurface(imageSurface);
image.SetClipH(image.GetClipH() / 3); //3 phases
font.SetSurface(fontSurface);
SetText(s);
}
Button::State Button::MouseMotion(SDL_MouseMotionEvent& motion) {
if (motion.state & SDL_BUTTON_LMASK) {
return CalcState(motion.x, motion.y, true);
}
else {
return CalcState(motion.x, motion.y, false);
}
return state;
}
Button::State Button::MouseButtonDown(SDL_MouseButtonEvent& button) {
if (button.button == SDL_BUTTON_LEFT) {
return CalcState(button.x, button.y, true);
}
return state;
}
Button::State Button::MouseButtonUp(SDL_MouseButtonEvent& button) {
if (button.button == SDL_BUTTON_LEFT) {
return CalcState(button.x, button.y, false);
}
return state;
}
void Button::DrawTo(SDL_Surface* const dest) {
image.DrawTo(dest, x, y);
font.DrawStringTo(text, dest, textX, textY);
}
std::string Button::SetText(std::string s) {
//one line
text = s;
textX = (image.GetClipW() / 2 + x) - (font.GetClipW() * text.size() / 2);
textY = (image.GetClipH() / 2 + y) - (font.GetClipH() / 2);
return text;
}
Button::State Button::CalcState(Sint16 i, Sint16 j, bool leftPressed) {
if (i < x || i > (x + image.GetClipW()) ||
j < y || j > (y + image.GetClipH())
) {
image.SetClipY(0);
return state = State::NORMAL;
}
if (leftPressed) {
image.SetClipY(image.GetClipH()*2);
return state = State::PRESSED;
}
else {
image.SetClipY(image.GetClipH());
return state = State::HOVER;
}
}
+78
View File
@@ -0,0 +1,78 @@
/* Copyright: (c) Kayne Ruse 2013
*
* 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.
*/
#ifndef BUTTON_HPP_
#define BUTTON_HPP_
#include "image.hpp"
#include "raster_font.hpp"
#include <string>
//3-phases, no toggle, centred text
class Button {
public:
enum class State {
NORMAL, HOVER, PRESSED
};
Button();
Button(Sint16 x, Sint16 y, SDL_Surface* imageSurface, SDL_Surface* fontSurface, std::string text = "");
//return the current state
State MouseMotion(SDL_MouseMotionEvent&);
State MouseButtonDown(SDL_MouseButtonEvent&);
State MouseButtonUp(SDL_MouseButtonEvent&);
State GetState() const {
return state;
}
//yet another draw function
void DrawTo(SDL_Surface* const);
//simple accessors and mutators
Sint16 SetX(Sint16 i) { return x = i; }
Sint16 SetY(Sint16 i) { return y = i; }
Sint16 GetX() const { return x; }
Sint16 GetY() const { return y; }
std::string SetText(std::string s);
std::string GetText() const { return text; }
//raw access, be careful
Image* GetImage() { return &image; }
RasterFont* GetFont() { return &font; }
//debug
Sint16 GetTextX() const { return textX; }
Sint16 GetTextY() const { return textY; }
private:
State CalcState(Sint16 x, Sint16 y, bool leftPressed);
Sint16 x, y;
Sint16 textX, textY; //prevent recalc every loop
Image image;
RasterFont font;
State state;
std::string text;
};
#endif
+13 -1
View File
@@ -21,6 +21,10 @@
*/
#include "image.hpp"
Image::Image() {
SetSurface(nullptr);
}
Image::Image(SDL_Surface* p) {
SetSurface(p);
}
@@ -31,7 +35,12 @@ Image::Image(SDL_Surface* p, SDL_Rect r) {
SDL_Surface* Image::SetSurface(SDL_Surface* p) {
surface = p;
clip = {0, 0, (Uint16)surface->w, (Uint16)surface->h};
if (!surface) {
clip = {0, 0, 0, 0};
}
else {
clip = {0, 0, (Uint16)surface->w, (Uint16)surface->h};
}
return surface;
}
@@ -46,6 +55,9 @@ SDL_Surface* Image::GetSurface() const {
}
void Image::DrawTo(SDL_Surface* dest, Sint16 x, Sint16 y) {
if (!surface) {
return;
}
SDL_Rect sclip = clip, dclip = {x,y};
SDL_BlitSurface(surface, &sclip, dest, &dclip);
+16 -15
View File
@@ -26,30 +26,31 @@
class Image {
public:
Image();
Image(SDL_Surface*);
Image(SDL_Surface*, SDL_Rect);
virtual ~Image() {}
SDL_Surface* SetSurface(SDL_Surface*);
SDL_Surface* SetSurface(SDL_Surface*, SDL_Rect);
SDL_Surface* GetSurface() const;
virtual SDL_Surface* SetSurface(SDL_Surface*);
virtual SDL_Surface* SetSurface(SDL_Surface*, SDL_Rect);
virtual SDL_Surface* GetSurface() const;
void DrawTo(SDL_Surface* const, Sint16 x, Sint16 y);
virtual void DrawTo(SDL_Surface* const, Sint16 x, Sint16 y);
//Clip handlers
SDL_Rect SetClip(SDL_Rect r) { return clip = r; }
SDL_Rect GetClip() const { return clip; }
virtual SDL_Rect SetClip(SDL_Rect r) { return clip = r; }
virtual SDL_Rect GetClip() const { return clip; }
Sint16 SetClipX(Sint16 x) { return clip.x = x; }
Sint16 SetClipY(Sint16 y) { return clip.y = y; }
Uint16 SetClipW(Uint16 w) { return clip.w = w; }
Uint16 SetClipH(Uint16 h) { return clip.h = h; }
virtual Sint16 SetClipX(Sint16 x) { return clip.x = x; }
virtual Sint16 SetClipY(Sint16 y) { return clip.y = y; }
virtual Uint16 SetClipW(Uint16 w) { return clip.w = w; }
virtual Uint16 SetClipH(Uint16 h) { return clip.h = h; }
Sint16 GetClipX() const { return clip.x; }
Sint16 GetClipY() const { return clip.y; }
Uint16 GetClipW() const { return clip.w; }
Uint16 GetClipH() const { return clip.h; }
private:
virtual Sint16 GetClipX() const { return clip.x; }
virtual Sint16 GetClipY() const { return clip.y; }
virtual Uint16 GetClipW() const { return clip.w; }
virtual Uint16 GetClipH() const { return clip.h; }
protected:
SDL_Surface* surface;
SDL_Rect clip;
};
+22 -1
View File
@@ -1,3 +1,24 @@
/* Copyright: (c) Kayne Ruse 2013
*
* 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 "scene_manager.hpp"
#include <stdexcept>
@@ -9,8 +30,8 @@ int main(int, char**) {
#ifdef DEBUG
cout << "Beginning program" << endl;
#endif
SceneManager app;
try {
SceneManager app;
app.Init();
app.Proc();
app.Quit();
+3 -19
View File
@@ -3,23 +3,7 @@ CXXFLAGS+=-std=c++11 -DDEBUG
LIB=-lmingw32 -lSDLmain -lSDL -lwsock32 -lWS2_32
#source
SRC=base_scene.cpp \
scene_manager.cpp \
test_systems.cpp \
splash.cpp \
main_menu.cpp \
in_game.cpp \
lobby.cpp \
combat.cpp \
surface_manager.cpp \
image.cpp \
sprite_sheet.cpp \
player.cpp \
player_manager.cpp \
config_utility.cpp \
network.cpp \
network_tcp.cpp \
main.cpp
SRC=$(filter-out unit.cpp, $(wildcard *.cpp))
#objects
OBJDIR=obj
@@ -27,7 +11,7 @@ OBJ=$(addprefix $(OBJDIR)/,$(SRC:.cpp=.o))
#output
OUTDIR=out
OUT=$(addprefix $(OUTDIR)/,a)
OUT=$(addprefix $(OUTDIR)/,client)
#targets
all: $(OBJ) $(OUT)
@@ -44,7 +28,7 @@ $(OUTDIR):
mkdir $(OUTDIR)
$(OBJDIR)/%.o: %.cpp
$(CXX) $(CXXFLAGS) -c -o $(@) $<
$(CXX) $(CXXFLAGS) -c -o $@ $<
clean:
$(RM) *.o *.a *.exe
+23
View File
@@ -0,0 +1,23 @@
/* Copyright: (c) Kayne Ruse 2013
*
* 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 "network.hpp"
+53
View File
@@ -0,0 +1,53 @@
/* Copyright: (c) Kayne Ruse 2013
*
* 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 "raster_font.hpp"
void RasterFont::DrawStringTo(std::string s, SDL_Surface* const dest, Sint16 x, Sint16 y) {
if (!surface) {
return;
}
//character size won't change here
const Sint16 w = surface->w/16;
const Sint16 h = surface->h/16;
SDL_Rect sclip, dclip = {x,y,0,0};
for (auto c : s) {
//TODO: inefficient
sclip = {Sint16(c%w*w), Sint16(c/h*h), clip.w, clip.h};
// sclip.x = c % w;
// sclip.h = c / h;
// sclip.w = clip.w;
// sclip.h = clip.h;
SDL_BlitSurface(surface, &sclip, dest, &dclip);
dclip.x += w;
}
}
SDL_Surface* RasterFont::SetSurface(SDL_Surface* p) {
surface = p;
if (!surface) {
clip = {0, 0, 0, 0};
}
else {
clip = {0, 0, Uint16(surface->w/16), Uint16(surface->h/16)};
}
return surface;
}
+43
View File
@@ -0,0 +1,43 @@
/* Copyright: (c) Kayne Ruse 2013
*
* 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.
*/
#ifndef RASTERFONT_HPP_
#define RASTERFONT_HPP_
#include "image.hpp"
#include <string>
class RasterFont : protected Image {
public:
RasterFont() {}
RasterFont(SDL_Surface* p) {SetSurface(p);}
virtual ~RasterFont() {}
virtual void DrawStringTo(std::string, SDL_Surface* const, Sint16 x, Sint16 y);
virtual SDL_Surface* SetSurface(SDL_Surface*) override;
using Image::GetSurface;
using Image::GetClip;
using Image::GetClipW;
using Image::GetClipH;
};
#endif
+1 -1
View File
@@ -39,7 +39,7 @@ void SceneManager::Init() {
if (SDL_Init(SDL_INIT_VIDEO))
throw(std::runtime_error("Failed to initialize SDL"));
GetSingletonPtr<ConfigUtility>()->Load("rsc\\config.cfg");
GetSingletonPtr<ConfigUtility>()->Load("rsc/config.cfg");
//set the screen from the config file
int flags = SDL_HWSURFACE|SDL_DOUBLEBUF;
+4 -4
View File
@@ -6,10 +6,10 @@ screen.h = 600
screen.f = false
#directories
fonts = rsc\graphics\fonts
logos = rsc\graphics\logos
sprites = rsc\graphics\sprites
tilesets = rsc\graphics\tilesets
fonts = rsc/graphics/fonts
logos = rsc/graphics/logos
sprites = rsc/graphics/sprites
tilesets = rsc/graphics/tilesets
#debugging
debug = true
+8 -9
View File
@@ -2,20 +2,19 @@
CXXFLAGS+=-std=c++11 -DDEBUG
LIB=-lwsock32 -lWS2_32
#source
SRC=$(filter-out unit.cpp main.cpp, $(wildcard *.cpp))
#objects
OBJDIR=obj
OBJ=$(addprefix $(OBJDIR)/,config_utility.o network.o network_tcp.o)
OBJ=$(addprefix $(OBJDIR)/,$(SRC:.cpp=.o))
#output
OUTDIR=out
OUT=$(addprefix $(OUTDIR)/,server)
#source
SRC=server.cpp main.cpp
#targets
all: $(OBJ) $(OUT)
$(CXX) $(CXXFLAGS) -o $(OUT) $(SRC) $(OBJ) $(LIB)
$(CXX) $(CXXFLAGS) -o $(OUTDIR)/server main.cpp $(OBJ) $(LIB)
$(OBJ): | $(OBJDIR)
@@ -28,12 +27,12 @@ $(OUTDIR):
mkdir $(OUTDIR)
$(OBJDIR)/%.o: %.cpp
$(CXX) $(CXXFLAGS) -c -o $(@) $<
$(CXX) $(CXXFLAGS) -c -o $@ $<
clean:
$(RM) *.o *.a *.exe
rebuild: clean all
rebuild: clean all unit
unit:
unit: $(OBJ) $(OUT)
$(CXX) $(CXXFLAGS) -o $(OUTDIR)\unit unit.cpp $(OBJ) $(LIB)
+23
View File
@@ -0,0 +1,23 @@
/* Copyright: (c) Kayne Ruse 2013
*
* 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 "network.hpp"