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 <SDL/SDL.h>
#include "SDL.h"
#include <bzlib.h>
#include <string>
#include "Config.h"

View File

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

View File

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

View File

@ -9,7 +9,7 @@
#define KITTY_H_
#include <string>
#include <SDL/SDL.h>
#include "SDL.h"
//#include "game/GameModel.h"
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)
{
int saveSize;

View File

@ -63,6 +63,7 @@ public:
void SetZoomPosition(ui::Point position);
void AdjustBrushSize(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 DrawRect(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)
{
c->ToolClick(toolIndex, ui::Point(x, y));
pointQueue.push(new ui::Point(x, y));
}
if(drawModeReset)

View File

@ -26,17 +26,16 @@ public:
OkayAction(SignWindow * prompt_) { prompt = prompt_; }
void ActionCallback(ui::Button * sender)
{
ui::Engine::Ref().CloseWindow();
prompt->SelfDestruct();
ui::Engine::Ref().CloseWindow();
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));
}
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->SelfDestruct();
}
};
@ -71,11 +70,7 @@ void SignWindow::OnDraw()
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.
{
opened = true;
new SignWindow(this, sim, -1, position);
}
new SignWindow(this, sim, -1, position);
}

View File

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

View File

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

View File

@ -11,6 +11,9 @@ Window::Window(Point _position, Point _size):
AllowExclusiveDrawing(true),
halt(false),
destruct(false)
#ifdef DEBUG
,debugMode(false)
#endif
{
}
@ -125,12 +128,55 @@ void Window::DoDraw()
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)
{
#ifdef DEBUG
if(debugMode)
return;
#endif
//on mouse hover
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)
{
#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
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)
{
#ifdef DEBUG
if(debugMode)
return;
#endif
//on key unpress
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)
{
FocusComponent(Components[i]);
#ifdef DEBUG
if(!debugMode)
#endif
Components[i]->OnMouseClick(x - Components[i]->Position.X, y - Components[i]->Position.Y, button);
clickState = true;
break;
@ -209,6 +306,11 @@ void Window::DoMouseDown(int x_, int y_, unsigned button)
if(!clickState)
FocusComponent(NULL);
#ifdef DEBUG
if(debugMode)
return;
#endif
//on mouse down
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)
int x = x_ - Position.X;
int y = y_ - Position.Y;
#ifdef DEBUG
if(debugMode)
return;
#endif
for(int i = Components.size() - 1; i > -1 && !halt; --i)
{
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 y = y_ - Position.Y;
#ifdef DEBUG
if(debugMode)
return;
#endif
//on mouse unclick
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 y = y_ - Position.Y;
#ifdef DEBUG
if(debugMode)
return;
#endif
//on mouse wheel focused
for(int i = Components.size() - 1; i >= 0 && !halt; --i)
{

View File

@ -86,6 +86,9 @@ enum ChromeStyle
void finalise();
bool halt;
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++) {
if (x == j && y == i)//Ensure it doesn't calculate with itself
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
val = th_gravmap[i*(XRES/CELL)+j] - th_ogravmap[i*(XRES/CELL)+j];
#else
val = th_gravmap[i*(XRES/CELL)+j];
#endif
th_gravx[y*(XRES/CELL)+x] += M_GRAV * val * (j - x) / pow(distance, 3);
th_gravy[y*(XRES/CELL)+x] += M_GRAV * val * (i - y) / pow(distance, 3);
th_gravp[y*(XRES/CELL)+x] += M_GRAV * val / pow(distance, 2);
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.0f);
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;
}
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[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;
}
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 block2tmp = 0;