Click function for tools that aren't continuous. Debug helper for UI components (Ctrl+Shift D when DEBUG is defined), fix add sign window logic

This commit is contained in:
Simon Robertshaw 2012-05-13 17:43:41 +01:00
parent a2e91c247f
commit 4032a0469b
14 changed files with 150 additions and 28 deletions

View File

@ -1,5 +1,5 @@
#include <cmath> #include <cmath>
#include <SDL/SDL.h> #include "SDL.h"
#include <bzlib.h> #include <bzlib.h>
#include <string> #include <string>
#include "Config.h" #include "Config.h"

View File

@ -1,7 +1,7 @@
#ifndef GRAPHICS_H #ifndef GRAPHICS_H
#define GRAPHICS_H #define GRAPHICS_H
#include <SDL/SDL.h> #include "SDL.h"
#include <string> #include <string>
#if defined(OGLR) #if defined(OGLR)
#ifdef MACOSX #ifdef MACOSX

View File

@ -1,8 +1,8 @@
#include <time.h> #include <time.h>
#include <SDL/SDL.h> #include "SDL.h"
#ifdef WIN32 #ifdef WIN32
#include <SDL/SDL_syswm.h> #include "SDL_syswm.h"
#endif #endif
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>

View File

@ -9,7 +9,7 @@
#define KITTY_H_ #define KITTY_H_
#include <string> #include <string>
#include <SDL/SDL.h> #include "SDL.h"
//#include "game/GameModel.h" //#include "game/GameModel.h"
class GameModel; class GameModel;

View File

@ -304,6 +304,16 @@ void GameController::DrawPoints(int toolSelection, queue<ui::Point*> & pointQueu
} }
} }
void GameController::ToolClick(int toolSelection, ui::Point point)
{
Simulation * sim = gameModel->GetSimulation();
Tool * activeTool = gameModel->GetActiveTool(toolSelection);
Brush * cBrush = gameModel->GetBrush();
if(!activeTool || !cBrush)
return;
activeTool->Click(sim, cBrush, PointTranslate(point));
}
void GameController::StampRegion(ui::Point point1, ui::Point point2) void GameController::StampRegion(ui::Point point1, ui::Point point2)
{ {
int saveSize; int saveSize;

View File

@ -63,6 +63,7 @@ public:
void SetZoomPosition(ui::Point position); void SetZoomPosition(ui::Point position);
void AdjustBrushSize(int direction, bool logarithmic = false); void AdjustBrushSize(int direction, bool logarithmic = false);
void AdjustZoomSize(int direction, bool logarithmic = false); void AdjustZoomSize(int direction, bool logarithmic = false);
void ToolClick(int toolSelection, ui::Point point);
void DrawPoints(int toolSelection, queue<ui::Point*> & pointQueue); void DrawPoints(int toolSelection, queue<ui::Point*> & pointQueue);
void DrawRect(int toolSelection, ui::Point point1, ui::Point point2); void DrawRect(int toolSelection, ui::Point point1, ui::Point point2);
void DrawLine(int toolSelection, ui::Point point1, ui::Point point2); void DrawLine(int toolSelection, ui::Point point1, ui::Point point2);

View File

@ -599,6 +599,7 @@ void GameView::OnMouseUp(int x, int y, unsigned button)
} }
if(drawMode == DrawPoints) if(drawMode == DrawPoints)
{ {
c->ToolClick(toolIndex, ui::Point(x, y));
pointQueue.push(new ui::Point(x, y)); pointQueue.push(new ui::Point(x, y));
} }
if(drawModeReset) if(drawModeReset)

View File

@ -27,16 +27,15 @@ public:
void ActionCallback(ui::Button * sender) void ActionCallback(ui::Button * sender)
{ {
ui::Engine::Ref().CloseWindow(); ui::Engine::Ref().CloseWindow();
prompt->SelfDestruct();
if(prompt->signID==-1 && prompt->textField->GetText().length()) if(prompt->signID==-1 && prompt->textField->GetText().length())
{ {
prompt->sim->signs.push_back(sign(prompt->textField->GetText(), prompt->signPosition.X, prompt->signPosition.Y, sign::Left)); prompt->sim->signs.push_back(sign(prompt->textField->GetText(), prompt->signPosition.X, prompt->signPosition.Y, sign::Left));
} }
else else if(prompt->textField->GetText().length())
{ {
prompt->sim->signs[prompt->signID] = sign(sign(prompt->textField->GetText(), prompt->signPosition.X, prompt->signPosition.Y, sign::Left)); prompt->sim->signs[prompt->signID] = sign(sign(prompt->textField->GetText(), prompt->signPosition.X, prompt->signPosition.Y, sign::Left));
} }
prompt->SelfDestruct();
} }
}; };
@ -71,11 +70,7 @@ void SignWindow::OnDraw()
g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 200, 200, 200, 255); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 200, 200, 200, 255);
} }
void SignTool::Draw(Simulation * sim, Brush * brush, ui::Point position) void SignTool::Click(Simulation * sim, Brush * brush, ui::Point position)
{ {
if(!opened) //Ensure the dialogue can only be shown one at a time. new SignWindow(this, sim, -1, position);
{
opened = true;
new SignWindow(this, sim, -1, position);
}
} }

View File

@ -28,6 +28,7 @@ public:
} }
string GetName() { return toolName; } string GetName() { return toolName; }
virtual ~Tool() {} virtual ~Tool() {}
virtual void Click(Simulation * sim, Brush * brush, ui::Point position) { }
virtual void Draw(Simulation * sim, Brush * brush, ui::Point position) { virtual void Draw(Simulation * sim, Brush * brush, ui::Point position) {
sim->ToolBrush(position.X, position.Y, toolID, brush); sim->ToolBrush(position.X, position.Y, toolID, brush);
} }
@ -45,18 +46,15 @@ class SignTool: public Tool
{ {
public: public:
SignTool(): SignTool():
Tool(0, "SIGN", 0, 0, 0), Tool(0, "SIGN", 0, 0, 0)
opened(false)
{ {
} }
virtual ~SignTool() {} virtual ~SignTool() {}
virtual void Draw(Simulation * sim, Brush * brush, ui::Point position); virtual void Click(Simulation * sim, Brush * brush, ui::Point position);
virtual void Draw(Simulation * sim, Brush * brush, ui::Point position) { }
virtual void DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { } virtual void DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { }
virtual void DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { } virtual void DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { }
virtual void DrawFill(Simulation * sim, Brush * brush, ui::Point position) { } virtual void DrawFill(Simulation * sim, Brush * brush, ui::Point position) { }
void SetClosed() { opened = false; }
protected:
bool opened;
}; };
class PropertyTool: public Tool class PropertyTool: public Tool

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
#include <stack> #include <stack>
#include <SDL/SDL.h> #include "SDL.h"
#include "Singleton.h" #include "Singleton.h"
#include "Platform.h" #include "Platform.h"
#include "Graphics.h" #include "Graphics.h"

View File

@ -11,6 +11,9 @@ Window::Window(Point _position, Point _size):
AllowExclusiveDrawing(true), AllowExclusiveDrawing(true),
halt(false), halt(false),
destruct(false) destruct(false)
#ifdef DEBUG
,debugMode(false)
#endif
{ {
} }
@ -125,12 +128,55 @@ void Window::DoDraw()
Components[i]->Draw( Point(scrpos) ); Components[i]->Draw( Point(scrpos) );
} }
} }
#ifdef DEBUG
if(debugMode)
{
if(focusedComponent_==Components[i])
{
ui::Engine::Ref().g->fillrect(Components[i]->Position.X+Position.X, Components[i]->Position.Y+Position.Y, Components[i]->Size.X, Components[i]->Size.Y, 0, 255, 0, 90);
}
else
{
ui::Engine::Ref().g->fillrect(Components[i]->Position.X+Position.X, Components[i]->Position.Y+Position.Y, Components[i]->Size.X, Components[i]->Size.Y, 255, 0, 0, 90);
}
}
#endif
} }
#ifdef DEBUG
if(debugMode)
{
if(focusedComponent_)
{
int xPos = focusedComponent_->Position.X+focusedComponent_->Size.X+5+Position.X;
Graphics * g = ui::Engine::Ref().g;
char tempString[512];
char tempString2[512];
sprintf(tempString, "Position: L %d, R %d, T: %d, B: %d", focusedComponent_->Position.X, Size.X-(focusedComponent_->Position.X+focusedComponent_->Size.X), focusedComponent_->Position.Y, Size.Y-(focusedComponent_->Position.Y+focusedComponent_->Size.Y));
sprintf(tempString2, "Size: %d, %d", focusedComponent_->Size.X, focusedComponent_->Size.Y);
if(Graphics::textwidth(tempString)+xPos > XRES+BARSIZE)
xPos = XRES+BARSIZE-(Graphics::textwidth(tempString)+5);
if(Graphics::textwidth(tempString2)+xPos > XRES+BARSIZE)
xPos = XRES+BARSIZE-(Graphics::textwidth(tempString2)+5);
g->drawtext(xPos, focusedComponent_->Position.Y+Position.Y+1, tempString, 0, 0, 0, 200);
g->drawtext(xPos, focusedComponent_->Position.Y+Position.Y, tempString, 255, 255, 255, 255);
g->drawtext(xPos, focusedComponent_->Position.Y+Position.Y+13, tempString2, 0, 0, 0, 200);
g->drawtext(xPos, focusedComponent_->Position.Y+Position.Y+12, tempString2, 255, 255, 255, 255);
}
return;
}
#endif
} }
void Window::DoTick(float dt) void Window::DoTick(float dt)
{ {
#ifdef DEBUG
if(debugMode)
return;
#endif
//on mouse hover //on mouse hover
for(int i = Components.size() - 1; i >= 0 && !halt; --i) for(int i = Components.size() - 1; i >= 0 && !halt; --i)
{ {
@ -161,6 +207,50 @@ void Window::DoTick(float dt)
void Window::DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) void Window::DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
{ {
#ifdef DEBUG
if(character = 'd' && ctrl && shift)
debugMode = !debugMode;
if(debugMode)
{
if(focusedComponent_!=NULL)
{
if(shift)
{
if(key == KEY_UP)
focusedComponent_->Size.Y--;
if(key == KEY_DOWN)
focusedComponent_->Size.Y++;
if(key == KEY_LEFT)
focusedComponent_->Size.X--;
if(key == KEY_RIGHT)
focusedComponent_->Size.X++;
}
if(ctrl)
{
if(key == KEY_UP)
focusedComponent_->Size.Y++;
if(key == KEY_DOWN)
focusedComponent_->Size.Y--;
if(key == KEY_LEFT)
focusedComponent_->Size.X++;
if(key == KEY_RIGHT)
focusedComponent_->Size.X--;
}
if(!shift)
{
if(key == KEY_UP)
focusedComponent_->Position.Y--;
if(key == KEY_DOWN)
focusedComponent_->Position.Y++;
if(key == KEY_LEFT)
focusedComponent_->Position.X--;
if(key == KEY_RIGHT)
focusedComponent_->Position.X++;
}
}
return;
}
#endif
//on key press //on key press
if(focusedComponent_ != NULL) if(focusedComponent_ != NULL)
{ {
@ -175,6 +265,10 @@ void Window::DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool a
void Window::DoKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt) void Window::DoKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt)
{ {
#ifdef DEBUG
if(debugMode)
return;
#endif
//on key unpress //on key unpress
if(focusedComponent_ != NULL) if(focusedComponent_ != NULL)
{ {
@ -200,6 +294,9 @@ void Window::DoMouseDown(int x_, int y_, unsigned button)
if(x >= Components[i]->Position.X && y >= Components[i]->Position.Y && x < Components[i]->Position.X + Components[i]->Size.X && y < Components[i]->Position.Y + Components[i]->Size.Y) if(x >= Components[i]->Position.X && y >= Components[i]->Position.Y && x < Components[i]->Position.X + Components[i]->Size.X && y < Components[i]->Position.Y + Components[i]->Size.Y)
{ {
FocusComponent(Components[i]); FocusComponent(Components[i]);
#ifdef DEBUG
if(!debugMode)
#endif
Components[i]->OnMouseClick(x - Components[i]->Position.X, y - Components[i]->Position.Y, button); Components[i]->OnMouseClick(x - Components[i]->Position.X, y - Components[i]->Position.Y, button);
clickState = true; clickState = true;
break; break;
@ -210,6 +307,11 @@ void Window::DoMouseDown(int x_, int y_, unsigned button)
if(!clickState) if(!clickState)
FocusComponent(NULL); FocusComponent(NULL);
#ifdef DEBUG
if(debugMode)
return;
#endif
//on mouse down //on mouse down
for(int i = Components.size() - 1; i > -1 && !halt; --i) for(int i = Components.size() - 1; i > -1 && !halt; --i)
{ {
@ -227,6 +329,10 @@ void Window::DoMouseMove(int x_, int y_, int dx, int dy)
//on mouse move (if true, and inside) //on mouse move (if true, and inside)
int x = x_ - Position.X; int x = x_ - Position.X;
int y = y_ - Position.Y; int y = y_ - Position.Y;
#ifdef DEBUG
if(debugMode)
return;
#endif
for(int i = Components.size() - 1; i > -1 && !halt; --i) for(int i = Components.size() - 1; i > -1 && !halt; --i)
{ {
if(!Components[i]->Locked && Components[i]->Visible) if(!Components[i]->Locked && Components[i]->Visible)
@ -277,6 +383,10 @@ void Window::DoMouseUp(int x_, int y_, unsigned button)
{ {
int x = x_ - Position.X; int x = x_ - Position.X;
int y = y_ - Position.Y; int y = y_ - Position.Y;
#ifdef DEBUG
if(debugMode)
return;
#endif
//on mouse unclick //on mouse unclick
for(int i = Components.size() - 1; i >= 0 && !halt; --i) for(int i = Components.size() - 1; i >= 0 && !halt; --i)
{ {
@ -306,6 +416,10 @@ void Window::DoMouseWheel(int x_, int y_, int d)
{ {
int x = x_ - Position.X; int x = x_ - Position.X;
int y = y_ - Position.Y; int y = y_ - Position.Y;
#ifdef DEBUG
if(debugMode)
return;
#endif
//on mouse wheel focused //on mouse wheel focused
for(int i = Components.size() - 1; i >= 0 && !halt; --i) for(int i = Components.size() - 1; i >= 0 && !halt; --i)
{ {

View File

@ -86,6 +86,9 @@ enum ChromeStyle
void finalise(); void finalise();
bool halt; bool halt;
bool destruct; bool destruct;
#ifdef DEBUG
bool debugMode;
#endif
}; };

View File

@ -388,15 +388,15 @@ void Gravity::update_grav(void)
for (x = 0; x < XRES / CELL; x++) { for (x = 0; x < XRES / CELL; x++) {
if (x == j && y == i)//Ensure it doesn't calculate with itself if (x == j && y == i)//Ensure it doesn't calculate with itself
continue; continue;
distance = sqrt(pow(j - x, 2) + pow(i - y, 2)); distance = sqrt(pow(j - x, 2.0f) + pow(i - y, 2.0f));
#ifdef GRAV_DIFF #ifdef GRAV_DIFF
val = th_gravmap[i*(XRES/CELL)+j] - th_ogravmap[i*(XRES/CELL)+j]; val = th_gravmap[i*(XRES/CELL)+j] - th_ogravmap[i*(XRES/CELL)+j];
#else #else
val = th_gravmap[i*(XRES/CELL)+j]; val = th_gravmap[i*(XRES/CELL)+j];
#endif #endif
th_gravx[y*(XRES/CELL)+x] += M_GRAV * val * (j - x) / pow(distance, 3); th_gravx[y*(XRES/CELL)+x] += M_GRAV * val * (j - x) / pow(distance, 3.0f);
th_gravy[y*(XRES/CELL)+x] += M_GRAV * val * (i - y) / pow(distance, 3); th_gravy[y*(XRES/CELL)+x] += M_GRAV * val * (i - y) / pow(distance, 3.0f);
th_gravp[y*(XRES/CELL)+x] += M_GRAV * val / pow(distance, 2); th_gravp[y*(XRES/CELL)+x] += M_GRAV * val / pow(distance, 2.0f);
} }
} }
} }

View File

@ -1138,7 +1138,7 @@ void *Simulation::transform_save(void *odata, int *size, matrix2d transform, vec
return ndata; return ndata;
} }
void Simulation::orbitalparts_get(int block1, int block2, int resblock1[], int resblock2[]) inline void Simulation::orbitalparts_get(int block1, int block2, int resblock1[], int resblock2[])
{ {
resblock1[0] = (block1&0x000000FF); resblock1[0] = (block1&0x000000FF);
resblock1[1] = (block1&0x0000FF00)>>8; resblock1[1] = (block1&0x0000FF00)>>8;
@ -1151,7 +1151,7 @@ void Simulation::orbitalparts_get(int block1, int block2, int resblock1[], int r
resblock2[3] = (block2&0xFF000000)>>24; resblock2[3] = (block2&0xFF000000)>>24;
} }
void Simulation::orbitalparts_set(int *block1, int *block2, int resblock1[], int resblock2[]) inline void Simulation::orbitalparts_set(int *block1, int *block2, int resblock1[], int resblock2[])
{ {
int block1tmp = 0; int block1tmp = 0;
int block2tmp = 0; int block2tmp = 0;