git repos / blockattack-game

blame: source/code/DialogBox.cpp

normal view · raw

59dcb571 sago007 2016-02-14 15:34 1
/*
59dcb571 sago007 2016-02-14 15:34 2
 * To change this license header, choose License Headers in Project Properties.
59dcb571 sago007 2016-02-14 15:34 3
 * To change this template file, choose Tools | Templates
59dcb571 sago007 2016-02-14 15:34 4
 * and open the template in the editor.
59dcb571 sago007 2016-02-14 15:34 5
 */
59dcb571 sago007 2016-02-14 15:34 6
59dcb571 sago007 2016-02-14 15:34 7
/* 
59dcb571 sago007 2016-02-14 15:34 8
 * File:   DialogBox.cpp
59dcb571 sago007 2016-02-14 15:34 9
 * Author: poul
59dcb571 sago007 2016-02-14 15:34 10
 * 
59dcb571 sago007 2016-02-14 15:34 11
 * Created on 14. februar 2016, 14:56
59dcb571 sago007 2016-02-14 15:34 12
 */
59dcb571 sago007 2016-02-14 15:34 13
59dcb571 sago007 2016-02-14 15:34 14
#include "DialogBox.hpp"
59dcb571 sago007 2016-02-14 15:34 15
#include "global.hpp"
59dcb571 sago007 2016-02-14 15:34 16
#include "common.h"
59dcb571 sago007 2016-02-14 15:34 17
#include "ReadKeyboard.h"
59dcb571 sago007 2016-02-14 15:34 18
59dcb571 sago007 2016-02-14 15:34 19
static void NFont_Write(SDL_Renderer* target, int x, int y, const std::string& text) {
59dcb571 sago007 2016-02-14 15:34 20
	nf_standard_blue_font.draw(target, x, y, "%s", text.c_str());
59dcb571 sago007 2016-02-14 15:34 21
}
59dcb571 sago007 2016-02-14 15:34 22
59dcb571 sago007 2016-02-14 15:34 23
#if 0
59dcb571 sago007 2016-02-14 15:34 24
bool OpenDialogbox(int x, int y, std::string& name) {
59dcb571 sago007 2016-02-14 15:34 25
	bool done = false;     //We are done!
59dcb571 sago007 2016-02-14 15:34 26
	bool accept = false;   //New name is accepted! (not Cancelled)
59dcb571 sago007 2016-02-14 15:34 27
	SDL_TextInput textInputScope;
59dcb571 sago007 2016-02-14 15:34 28
	ReadKeyboard rk = ReadKeyboard(name.c_str());
59dcb571 sago007 2016-02-14 15:34 29
	std::string strHolder;
59dcb571 sago007 2016-02-14 15:34 30
	backgroundImage.Draw(screen, SDL_GetTicks(), 0, 0);
59dcb571 sago007 2016-02-14 15:34 31
	while (!done && !Config::getInstance()->isShuttingDown()) {
59dcb571 sago007 2016-02-14 15:34 32
		dialogBox.Draw(screen, SDL_GetTicks(), x, y);
59dcb571 sago007 2016-02-14 15:34 33
		NFont_Write(screen, x+40,y+76,rk.GetString());
59dcb571 sago007 2016-02-14 15:34 34
		strHolder = rk.GetString();
59dcb571 sago007 2016-02-14 15:34 35
		strHolder.erase((int)rk.CharsBeforeCursor());
59dcb571 sago007 2016-02-14 15:34 36
59dcb571 sago007 2016-02-14 15:34 37
		if (((SDL_GetTicks()/600)%2)==1) {
59dcb571 sago007 2016-02-14 15:34 38
			NFont_Write(screen, x+40+nf_standard_blue_font.getWidth( "%s", strHolder.c_str()),y+76,"|");
59dcb571 sago007 2016-02-14 15:34 39
		}
59dcb571 sago007 2016-02-14 15:34 40
59dcb571 sago007 2016-02-14 15:34 41
		SDL_Event event;
59dcb571 sago007 2016-02-14 15:34 42
59dcb571 sago007 2016-02-14 15:34 43
		while ( SDL_PollEvent(&event) ) {
59dcb571 sago007 2016-02-14 15:34 44
			if ( event.type == SDL_QUIT ) {
59dcb571 sago007 2016-02-14 15:34 45
				Config::getInstance()->setShuttingDown(5);
59dcb571 sago007 2016-02-14 15:34 46
				done = true;
59dcb571 sago007 2016-02-14 15:34 47
				accept = false;
59dcb571 sago007 2016-02-14 15:34 48
			}
59dcb571 sago007 2016-02-14 15:34 49
59dcb571 sago007 2016-02-14 15:34 50
			
59dcb571 sago007 2016-02-14 15:34 51
59dcb571 sago007 2016-02-14 15:34 52
		}   //while(event)
59dcb571 sago007 2016-02-14 15:34 53
59dcb571 sago007 2016-02-14 15:34 54
		SDL_RenderPresent(screen); //Update screen
59dcb571 sago007 2016-02-14 15:34 55
	}   //while(!done)
59dcb571 sago007 2016-02-14 15:34 56
	name = rk.GetString();
59dcb571 sago007 2016-02-14 15:34 57
	return accept;
59dcb571 sago007 2016-02-14 15:34 58
}
59dcb571 sago007 2016-02-14 15:34 59
#endif
59dcb571 sago007 2016-02-14 15:34 60
59dcb571 sago007 2016-02-14 15:34 61
bool OpenDialogbox(int x, int y, std::string& name) {
59dcb571 sago007 2016-02-14 15:34 62
	DialogBox d(x, y, name);
59dcb571 sago007 2016-02-14 15:34 63
	RunGameState(d);
59dcb571 sago007 2016-02-14 15:34 64
	if (d.IsUpdated()) {
59dcb571 sago007 2016-02-14 15:34 65
		name = d.GetName();
59dcb571 sago007 2016-02-14 15:34 66
		return true;
59dcb571 sago007 2016-02-14 15:34 67
	}
59dcb571 sago007 2016-02-14 15:34 68
	return false;
59dcb571 sago007 2016-02-14 15:34 69
}
59dcb571 sago007 2016-02-14 15:34 70
59dcb571 sago007 2016-02-14 15:34 71
DialogBox::DialogBox(int x, int y, const std::string& name) {
59dcb571 sago007 2016-02-14 15:34 72
	this->x = x;
59dcb571 sago007 2016-02-14 15:34 73
	this->y = y;
59dcb571 sago007 2016-02-14 15:34 74
	SetName(name);
59dcb571 sago007 2016-02-14 15:34 75
}
59dcb571 sago007 2016-02-14 15:34 76
59dcb571 sago007 2016-02-14 15:34 77
59dcb571 sago007 2016-02-14 15:34 78
DialogBox::~DialogBox() {
59dcb571 sago007 2016-02-14 15:34 79
}
59dcb571 sago007 2016-02-14 15:34 80
59dcb571 sago007 2016-02-14 15:34 81
bool DialogBox::IsActive() {
59dcb571 sago007 2016-02-14 15:34 82
	return isActive;
59dcb571 sago007 2016-02-14 15:34 83
}
59dcb571 sago007 2016-02-14 15:34 84
59dcb571 sago007 2016-02-14 15:34 85
59dcb571 sago007 2016-02-14 15:34 86
void DialogBox::Draw(SDL_Renderer* target) {
59dcb571 sago007 2016-02-14 15:34 87
	backgroundImage.Draw(screen, SDL_GetTicks(), 0, 0);
59dcb571 sago007 2016-02-14 15:34 88
	dialogBox.Draw(screen, SDL_GetTicks(), x, y);
59dcb571 sago007 2016-02-14 15:34 89
	NFont_Write(screen, x+40,y+76,rk->GetString());
59dcb571 sago007 2016-02-14 15:34 90
	std::string strHolder = rk->GetString();
59dcb571 sago007 2016-02-14 15:34 91
	strHolder.erase((int)rk->CharsBeforeCursor());
59dcb571 sago007 2016-02-14 15:34 92
59dcb571 sago007 2016-02-14 15:34 93
	if (((SDL_GetTicks()/600)%2)==1) {
59dcb571 sago007 2016-02-14 15:34 94
		NFont_Write(screen, x+40+nf_standard_blue_font.getWidth( "%s", strHolder.c_str()),y+76,"|");
59dcb571 sago007 2016-02-14 15:34 95
	}
59dcb571 sago007 2016-02-14 15:34 96
}
59dcb571 sago007 2016-02-14 15:34 97
59dcb571 sago007 2016-02-14 15:34 98
void DialogBox::ProcessInput(const SDL_Event& event, bool &processed) {
59dcb571 sago007 2016-02-14 15:34 99
	if (event.type == SDL_TEXTINPUT) {
59dcb571 sago007 2016-02-14 15:34 100
		if ((rk->ReadKey(event))&&(SoundEnabled)&&(!NoSound)) {
59dcb571 sago007 2016-02-14 15:34 101
			Mix_PlayChannel(1, typingChunk, 0);
59dcb571 sago007 2016-02-14 15:34 102
		}
59dcb571 sago007 2016-02-14 15:34 103
	}
59dcb571 sago007 2016-02-14 15:34 104
59dcb571 sago007 2016-02-14 15:34 105
	if ( event.type == SDL_KEYDOWN ) {
59dcb571 sago007 2016-02-14 15:34 106
		if ( (event.key.keysym.sym == SDLK_RETURN)||(event.key.keysym.sym == SDLK_KP_ENTER) ) {
59dcb571 sago007 2016-02-14 15:34 107
			name = rk->GetString();
59dcb571 sago007 2016-02-14 15:34 108
			updated = true;
59dcb571 sago007 2016-02-14 15:34 109
			isActive = false;
59dcb571 sago007 2016-02-14 15:34 110
		}
59dcb571 sago007 2016-02-14 15:34 111
		else if ( (event.key.keysym.sym == SDLK_ESCAPE) ) {
59dcb571 sago007 2016-02-14 15:34 112
			isActive = false;
59dcb571 sago007 2016-02-14 15:34 113
		}
59dcb571 sago007 2016-02-14 15:34 114
		else {
59dcb571 sago007 2016-02-14 15:34 115
			if ((rk->ReadKey(event))&&(SoundEnabled)&&(!NoSound)) {
59dcb571 sago007 2016-02-14 15:34 116
				Mix_PlayChannel(1,typingChunk,0);
59dcb571 sago007 2016-02-14 15:34 117
			}
59dcb571 sago007 2016-02-14 15:34 118
		}
59dcb571 sago007 2016-02-14 15:34 119
	}
59dcb571 sago007 2016-02-14 15:34 120
}
59dcb571 sago007 2016-02-14 15:34 121
59dcb571 sago007 2016-02-14 15:34 122
void DialogBox::SetName(const std::string& name) {
59dcb571 sago007 2016-02-14 15:34 123
	this->name = name;
59dcb571 sago007 2016-02-14 15:34 124
	rk = std::make_shared<ReadKeyboard>(name.c_str());
59dcb571 sago007 2016-02-14 15:34 125
}
59dcb571 sago007 2016-02-14 15:34 126
59dcb571 sago007 2016-02-14 15:34 127
std::string DialogBox::GetName() const {
59dcb571 sago007 2016-02-14 15:34 128
	return name;
59dcb571 sago007 2016-02-14 15:34 129
}
59dcb571 sago007 2016-02-14 15:34 130
59dcb571 sago007 2016-02-14 15:34 131
bool DialogBox::IsUpdated() const {
59dcb571 sago007 2016-02-14 15:34 132
	return updated;
59dcb571 sago007 2016-02-14 15:34 133
}