summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-08-06 17:57:25 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-08-06 19:54:37 (GMT)
commit622f2246ef31a05eb38e8f2ab3ac9c1bd9264920 (patch)
treefb9009f6803f395c9da457039a823a0ffcdfc98a /src
parentf75a3c264235d5edf162fd0f7bf6e04d629704f9 (diff)
downloadpowder-622f2246ef31a05eb38e8f2ab3ac9c1bd9264920.zip
powder-622f2246ef31a05eb38e8f2ab3ac9c1bd9264920.tar.gz
Fix TPTScript 'set' function
Diffstat (limited to 'src')
-rw-r--r--src/cat/LuaScriptInterface.cpp7
-rw-r--r--src/cat/TPTScriptInterface.cpp22
-rw-r--r--src/console/ConsoleView.cpp4
-rw-r--r--src/interface/Label.cpp30
-rw-r--r--src/interface/Label.h2
-rw-r--r--src/interface/Textbox.cpp5
-rw-r--r--src/interface/Textbox.h3
7 files changed, 50 insertions, 23 deletions
diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp
index 5aa6a73..40bcc08 100644
--- a/src/cat/LuaScriptInterface.cpp
+++ b/src/cat/LuaScriptInterface.cpp
@@ -310,7 +310,12 @@ int LuaScriptInterface::Command(std::string command)
std::string LuaScriptInterface::FormatCommand(std::string command)
{
- return command;
+ if(command[0] == '!')
+ {
+ return "!"+legacy->FormatCommand(command.substr(1));
+ }
+ else
+ return command;
}
LuaScriptInterface::~LuaScriptInterface() {
diff --git a/src/cat/TPTScriptInterface.cpp b/src/cat/TPTScriptInterface.cpp
index 3e4e5f1..d37bff3 100644
--- a/src/cat/TPTScriptInterface.cpp
+++ b/src/cat/TPTScriptInterface.cpp
@@ -194,6 +194,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque<std::string> * words)
AnyType value = eval(words);
Simulation * sim = m->GetSimulation();
+ unsigned char * partsBlock = (unsigned char*)&sim->parts[0];
int returnValue = 0;
@@ -205,10 +206,10 @@ AnyType TPTScriptInterface::tptS_set(std::deque<std::string> * words)
//Selector
int newValue;
- if(selector.GetType() == TypeNumber)
- newValue = ((NumberType)selector).Value();
- else if(selector.GetType() == TypeString)
- newValue = GetParticleType(((StringType)selector).Value());
+ if(value.GetType() == TypeNumber)
+ newValue = ((NumberType)value).Value();
+ else if(value.GetType() == TypeString)
+ newValue = GetParticleType(((StringType)value).Value());
else
throw GeneralException("Invalid value for assignment");
@@ -230,10 +231,10 @@ AnyType TPTScriptInterface::tptS_set(std::deque<std::string> * words)
switch(propertyFormat)
{
case FormatInt:
- *((int*)(((unsigned char*)&sim->parts[partIndex])+propertyOffset)) = newValue;
+ *((int*)(partsBlock+(partIndex*sizeof(Particle))+propertyOffset)) = newValue;
break;
case FormatFloat:
- *((float*)(((unsigned char*)&sim->parts[partIndex])+propertyOffset)) = newValue;
+ *((float*)(partsBlock+(partIndex*sizeof(Particle))+propertyOffset)) = newValue;
break;
}
returnValue = 1;
@@ -248,7 +249,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque<std::string> * words)
if(sim->parts[j].type)
{
returnValue++;
- *((int*)(((unsigned char*)&sim->parts[j])+propertyOffset)) = newValue;
+ *((int*)(partsBlock+(j*sizeof(Particle))+propertyOffset)) = newValue;
}
}
break;
@@ -258,7 +259,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque<std::string> * words)
if(sim->parts[j].type)
{
returnValue++;
- *((float*)(((unsigned char*)&sim->parts[j])+propertyOffset)) = newValue;
+ *((float*)(partsBlock+(j*sizeof(Particle))+propertyOffset)) = newValue;
}
}
break;
@@ -274,6 +275,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque<std::string> * words)
if(type<0 || type>=PT_NUM)
throw GeneralException("Invalid particle type");
+ std::cout << propertyOffset << std::endl;
switch(propertyFormat)
{
case FormatInt:
@@ -282,7 +284,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque<std::string> * words)
if(sim->parts[j].type == type)
{
returnValue++;
- *((int*)(((unsigned char*)&sim->parts[j])+propertyOffset)) = newValue;
+ *((int*)(partsBlock+(j*sizeof(Particle))+propertyOffset)) = newValue;
}
}
break;
@@ -292,7 +294,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque<std::string> * words)
if(sim->parts[j].type == type)
{
returnValue++;
- *((float*)(((unsigned char*)&sim->parts[j])+propertyOffset)) = newValue;
+ *((float*)(partsBlock+(j*sizeof(Particle))+propertyOffset)) = newValue;
}
}
break;
diff --git a/src/console/ConsoleView.cpp b/src/console/ConsoleView.cpp
index 32b366c..67c83de 100644
--- a/src/console/ConsoleView.cpp
+++ b/src/console/ConsoleView.cpp
@@ -17,7 +17,7 @@ ConsoleView::ConsoleView():
ConsoleView * v;
public:
CommandHighlighter(ConsoleView * v_) { v = v_; }
- void TextChangedCallback(ui::Textbox * sender)
+ virtual void TextChangedCallback(ui::Textbox * sender)
{
sender->SetDisplayText(v->c->FormatCommand(sender->GetText()));
}
@@ -43,6 +43,7 @@ void ConsoleView::DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, b
case KEY_ENTER:
c->EvaluateCommand(commandField->GetText());
commandField->SetText("");
+ commandField->SetDisplayText("");
break;
case KEY_DOWN:
c->NextCommand();
@@ -88,6 +89,7 @@ void ConsoleView::NotifyPreviousCommandsChanged(ConsoleModel * sender)
void ConsoleView::NotifyCurrentCommandChanged(ConsoleModel * sender)
{
commandField->SetText(sender->GetCurrentCommand().Command);
+ commandField->SetDisplayText(c->FormatCommand(commandField->GetText()));
}
diff --git a/src/interface/Label.cpp b/src/interface/Label.cpp
index 8a8055e..ee52fd8 100644
--- a/src/interface/Label.cpp
+++ b/src/interface/Label.cpp
@@ -266,6 +266,11 @@ void Label::updateSelection()
}
}
+void Label::SetDisplayText(std::string newText)
+{
+ displayText = newText;
+}
+
void Label::Draw(const Point& screenPos)
{
if(!drawn)
@@ -282,6 +287,23 @@ void Label::Draw(const Point& screenPos)
}
Graphics * g = Engine::Ref().g;
+ std::string cDisplayText = displayText;
+
+ if(!cDisplayText.length())
+ {
+ if(selectionXL != -1 && selectionXH != -1)
+ {
+ cDisplayText = textFragments;
+ }
+ else
+ {
+ if(multiline)
+ cDisplayText = textLines;
+ else
+ cDisplayText = text;
+ }
+ }
+
if(multiline)
{
if(selectionXL != -1 && selectionXH != -1)
@@ -298,21 +320,21 @@ void Label::Draw(const Point& screenPos)
} else {
g->fillrect(screenPos.X+textPosition.X+selectionXL, screenPos.Y+selectionYL+textPosition.Y-1, selectionXH-(selectionXL), 10, 255, 255, 255, 255);
}
- g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, textFragments, textColour.Red, textColour.Green, textColour.Blue, 255);
+ g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, cDisplayText, textColour.Red, textColour.Green, textColour.Blue, 255);
}
else
{
- g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, textLines, textColour.Red, textColour.Green, textColour.Blue, 255);
+ g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, cDisplayText, textColour.Red, textColour.Green, textColour.Blue, 255);
}
} else {
if(selectionXL != -1 && selectionXH != -1)
{
g->fillrect(screenPos.X+textPosition.X+selectionXL, screenPos.Y+textPosition.Y-1, selectionXH-(selectionXL), 10, 255, 255, 255, 255);
- g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, textFragments, textColour.Red, textColour.Green, textColour.Blue, 255);
+ g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, cDisplayText, textColour.Red, textColour.Green, textColour.Blue, 255);
}
else
{
- g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, text, textColour.Red, textColour.Green, textColour.Blue, 255);
+ g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, cDisplayText, textColour.Red, textColour.Green, textColour.Blue, 255);
}
}
}
diff --git a/src/interface/Label.h b/src/interface/Label.h
index 1fa7148..77c28d6 100644
--- a/src/interface/Label.h
+++ b/src/interface/Label.h
@@ -14,6 +14,7 @@ namespace ui
protected:
std::string textFragments;
std::string textLines;
+ std::string displayText;
std::string text;
Colour textColour;
@@ -48,6 +49,7 @@ namespace ui
virtual void SetMultiline(bool status);
virtual void SetText(std::string text);
+ virtual void SetDisplayText(std::string newText);
virtual std::string GetText();
virtual bool HasSelection();
diff --git a/src/interface/Textbox.cpp b/src/interface/Textbox.cpp
index a57d69a..71a485e 100644
--- a/src/interface/Textbox.cpp
+++ b/src/interface/Textbox.cpp
@@ -99,11 +99,6 @@ size_t Textbox::GetLimit()
return limit;
}
-void Textbox::SetDisplayText(std::string newText)
-{
- Label::SetText(text);
-}
-
std::string Textbox::GetText()
{
return backingText;
diff --git a/src/interface/Textbox.h b/src/interface/Textbox.h
index 2bc959d..a43a7e5 100644
--- a/src/interface/Textbox.h
+++ b/src/interface/Textbox.h
@@ -24,7 +24,6 @@ public:
Textbox(Point position, Point size, std::string textboxText = "", std::string textboxPlaceholder = "");
virtual ~Textbox();
- virtual void SetDisplayText(std::string text);
virtual void SetText(std::string text);
virtual std::string GetText();
@@ -44,7 +43,7 @@ public:
//Determines if the given character is valid given the input type
bool CharacterValid(Uint16 character);
- virtual void Tick(float dt);
+ virtual void Tick(float dt);
virtual void OnContextMenuAction(int item);
virtual void OnMouseClick(int x, int y, unsigned button);
virtual void OnMouseUp(int x, int y, unsigned button);