git repos / blockattack-game

blame: source/code/DialogBox.cpp

normal view · raw

59dcb571 sago007 2016-02-14 15:34 1
/*
7a956470 sago007 2016-02-14 17:09 2
===========================================================================
7a956470 sago007 2016-02-14 17:09 3
blockattack - Block Attack - Rise of the Blocks
7a956470 sago007 2016-02-14 17:09 4
Copyright (C) 2005-2016 Poul Sander
7a956470 sago007 2016-02-14 17:09 5
7a956470 sago007 2016-02-14 17:09 6
This program is free software: you can redistribute it and/or modify
7a956470 sago007 2016-02-14 17:09 7
it under the terms of the GNU General Public License as published by
7a956470 sago007 2016-02-14 17:09 8
the Free Software Foundation, either version 2 of the License, or
7a956470 sago007 2016-02-14 17:09 9
(at your option) any later version.
7a956470 sago007 2016-02-14 17:09 10
7a956470 sago007 2016-02-14 17:09 11
This program is distributed in the hope that it will be useful,
7a956470 sago007 2016-02-14 17:09 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
7a956470 sago007 2016-02-14 17:09 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7a956470 sago007 2016-02-14 17:09 14
GNU General Public License for more details.
7a956470 sago007 2016-02-14 17:09 15
7a956470 sago007 2016-02-14 17:09 16
You should have received a copy of the GNU General Public License
7a956470 sago007 2016-02-14 17:09 17
along with this program.  If not, see http://www.gnu.org/licenses/
7a956470 sago007 2016-02-14 17:09 18
7a956470 sago007 2016-02-14 17:09 19
Source information and contacts persons can be found at
7a956470 sago007 2016-02-14 17:09 20
http://www.blockattack.net
7a956470 sago007 2016-02-14 17:09 21
===========================================================================
7a956470 sago007 2016-02-14 17:09 22
*/
59dcb571 sago007 2016-02-14 15:34 23
59dcb571 sago007 2016-02-14 15:34 24
#include "DialogBox.hpp"
59dcb571 sago007 2016-02-14 15:34 25
#include "global.hpp"
59dcb571 sago007 2016-02-14 15:34 26
#include "common.h"
59dcb571 sago007 2016-02-14 15:34 27
#include "ReadKeyboard.h"
59dcb571 sago007 2016-02-14 15:34 28
59dcb571 sago007 2016-02-14 15:34 29
static void NFont_Write(SDL_Renderer* target, int x, int y, const std::string& text) {
59dcb571 sago007 2016-02-14 15:34 30
	nf_standard_blue_font.draw(target, x, y, "%s", text.c_str());
59dcb571 sago007 2016-02-14 15:34 31
}
59dcb571 sago007 2016-02-14 15:34 32
59dcb571 sago007 2016-02-14 15:34 33
bool OpenDialogbox(int x, int y, std::string& name) {
59dcb571 sago007 2016-02-14 15:34 34
	DialogBox d(x, y, name);
59dcb571 sago007 2016-02-14 15:34 35
	RunGameState(d);
59dcb571 sago007 2016-02-14 15:34 36
	if (d.IsUpdated()) {
59dcb571 sago007 2016-02-14 15:34 37
		name = d.GetName();
59dcb571 sago007 2016-02-14 15:34 38
		return true;
59dcb571 sago007 2016-02-14 15:34 39
	}
59dcb571 sago007 2016-02-14 15:34 40
	return false;
59dcb571 sago007 2016-02-14 15:34 41
}
59dcb571 sago007 2016-02-14 15:34 42
59dcb571 sago007 2016-02-14 15:34 43
DialogBox::DialogBox(int x, int y, const std::string& name) {
59dcb571 sago007 2016-02-14 15:34 44
	this->x = x;
59dcb571 sago007 2016-02-14 15:34 45
	this->y = y;
59dcb571 sago007 2016-02-14 15:34 46
	SetName(name);
59dcb571 sago007 2016-02-14 15:34 47
}
59dcb571 sago007 2016-02-14 15:34 48
59dcb571 sago007 2016-02-14 15:34 49
59dcb571 sago007 2016-02-14 15:34 50
DialogBox::~DialogBox() {
59dcb571 sago007 2016-02-14 15:34 51
}
59dcb571 sago007 2016-02-14 15:34 52
59dcb571 sago007 2016-02-14 15:34 53
bool DialogBox::IsActive() {
59dcb571 sago007 2016-02-14 15:34 54
	return isActive;
59dcb571 sago007 2016-02-14 15:34 55
}
59dcb571 sago007 2016-02-14 15:34 56
59dcb571 sago007 2016-02-14 15:34 57
59dcb571 sago007 2016-02-14 15:34 58
void DialogBox::Draw(SDL_Renderer* target) {
59dcb571 sago007 2016-02-14 15:34 59
	backgroundImage.Draw(screen, SDL_GetTicks(), 0, 0);
59dcb571 sago007 2016-02-14 15:34 60
	dialogBox.Draw(screen, SDL_GetTicks(), x, y);
59dcb571 sago007 2016-02-14 15:34 61
	NFont_Write(screen, x+40,y+76,rk->GetString());
59dcb571 sago007 2016-02-14 15:34 62
	std::string strHolder = rk->GetString();
59dcb571 sago007 2016-02-14 15:34 63
	strHolder.erase((int)rk->CharsBeforeCursor());
59dcb571 sago007 2016-02-14 15:34 64
59dcb571 sago007 2016-02-14 15:34 65
	if (((SDL_GetTicks()/600)%2)==1) {
59dcb571 sago007 2016-02-14 15:34 66
		NFont_Write(screen, x+40+nf_standard_blue_font.getWidth( "%s", strHolder.c_str()),y+76,"|");
59dcb571 sago007 2016-02-14 15:34 67
	}
59dcb571 sago007 2016-02-14 15:34 68
}
59dcb571 sago007 2016-02-14 15:34 69
c7f2082f sago007 2016-03-13 11:48 70
void DialogBox::ProcessInput(const SDL_Event& event, bool& processed) {
59dcb571 sago007 2016-02-14 15:34 71
	if (event.type == SDL_TEXTINPUT) {
59dcb571 sago007 2016-02-14 15:34 72
		if ((rk->ReadKey(event))&&(SoundEnabled)&&(!NoSound)) {
59dcb571 sago007 2016-02-14 15:34 73
			Mix_PlayChannel(1, typingChunk, 0);
59dcb571 sago007 2016-02-14 15:34 74
		}
59dcb571 sago007 2016-02-14 15:34 75
	}
59dcb571 sago007 2016-02-14 15:34 76
59dcb571 sago007 2016-02-14 15:34 77
	if ( event.type == SDL_KEYDOWN ) {
59dcb571 sago007 2016-02-14 15:34 78
		if ( (event.key.keysym.sym == SDLK_RETURN)||(event.key.keysym.sym == SDLK_KP_ENTER) ) {
59dcb571 sago007 2016-02-14 15:34 79
			name = rk->GetString();
59dcb571 sago007 2016-02-14 15:34 80
			updated = true;
59dcb571 sago007 2016-02-14 15:34 81
			isActive = false;
59dcb571 sago007 2016-02-14 15:34 82
		}
59dcb571 sago007 2016-02-14 15:34 83
		else if ( (event.key.keysym.sym == SDLK_ESCAPE) ) {
59dcb571 sago007 2016-02-14 15:34 84
			isActive = false;
59dcb571 sago007 2016-02-14 15:34 85
		}
59dcb571 sago007 2016-02-14 15:34 86
		else {
59dcb571 sago007 2016-02-14 15:34 87
			if ((rk->ReadKey(event))&&(SoundEnabled)&&(!NoSound)) {
59dcb571 sago007 2016-02-14 15:34 88
				Mix_PlayChannel(1,typingChunk,0);
59dcb571 sago007 2016-02-14 15:34 89
			}
59dcb571 sago007 2016-02-14 15:34 90
		}
59dcb571 sago007 2016-02-14 15:34 91
	}
7a956470 sago007 2016-02-14 17:09 92
	processed = true;
59dcb571 sago007 2016-02-14 15:34 93
}
59dcb571 sago007 2016-02-14 15:34 94
59dcb571 sago007 2016-02-14 15:34 95
void DialogBox::SetName(const std::string& name) {
59dcb571 sago007 2016-02-14 15:34 96
	this->name = name;
59dcb571 sago007 2016-02-14 15:34 97
	rk = std::make_shared<ReadKeyboard>(name.c_str());
59dcb571 sago007 2016-02-14 15:34 98
}
59dcb571 sago007 2016-02-14 15:34 99
59dcb571 sago007 2016-02-14 15:34 100
std::string DialogBox::GetName() const {
59dcb571 sago007 2016-02-14 15:34 101
	return name;
59dcb571 sago007 2016-02-14 15:34 102
}
59dcb571 sago007 2016-02-14 15:34 103
59dcb571 sago007 2016-02-14 15:34 104
bool DialogBox::IsUpdated() const {
59dcb571 sago007 2016-02-14 15:34 105
	return updated;
59dcb571 sago007 2016-02-14 15:34 106
}