summaryrefslogtreecommitdiffstats
path: root/src/object
diff options
context:
space:
mode:
Diffstat (limited to 'src/object')
-rw-r--r--src/object/auto/autofactory.cpp25
-rw-r--r--src/object/auto/autofactory.h6
-rw-r--r--src/object/brain.cpp17
-rw-r--r--src/object/brain.h1
-rw-r--r--src/object/robotmain.cpp2
5 files changed, 48 insertions, 3 deletions
diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp
index 6aca426..fb82497 100644
--- a/src/object/auto/autofactory.cpp
+++ b/src/object/auto/autofactory.cpp
@@ -24,6 +24,7 @@
#include "math/geometry.h"
#include "object/robotmain.h"
+#include "object/brain.h"
#include "physics/physics.h"
@@ -103,6 +104,8 @@ void CAutoFactory::Init()
m_fretPos = m_object->GetPosition(0);
+ m_program = nullptr;
+
CAuto::Init();
}
@@ -149,6 +152,15 @@ Error CAutoFactory::StartAction(int param)
}
+// Sets program for created robot
+
+void CAutoFactory::SetProgram(const char* program)
+{
+ m_program = new char[strlen(program)+1];
+ strcpy(m_program, program);
+}
+
+
// Management of an event.
bool CAutoFactory::EventProcess(const Event &event)
@@ -377,7 +389,7 @@ bool CAutoFactory::EventProcess(const Event &event)
delete fret;
}
- vehicle = SearchVehicle();
+ m_vehicle = vehicle = SearchVehicle();
if ( vehicle != 0 )
{
physics = vehicle->GetPhysics();
@@ -476,6 +488,17 @@ bool CAutoFactory::EventProcess(const Event &event)
m_object->SetZoomZ(10+i, 0.30f);
}
+ if ( m_program != nullptr )
+ {
+ CBrain* brain = m_vehicle->GetBrain();
+ if ( brain != nullptr )
+ {
+ brain->SendProgram(0, const_cast<const char*>(m_program));
+ brain->SetScriptRun(0);
+ brain->RunProgram(0);
+ }
+ }
+
SetBusy(false);
UpdateInterface();
diff --git a/src/object/auto/autofactory.h b/src/object/auto/autofactory.h
index e5a415b..d9350e6 100644
--- a/src/object/auto/autofactory.h
+++ b/src/object/auto/autofactory.h
@@ -49,6 +49,7 @@ public:
bool EventProcess(const Event &event);
Error StartAction(int param);
+ void SetProgram(const char* program);
bool CreateInterface(bool bSelect);
@@ -71,7 +72,10 @@ protected:
float m_progress;
float m_speed;
float m_lastParticle;
- Math::Vector m_fretPos;
+ Math::Vector m_fretPos;
int m_channelSound;
+
+ CObject* m_vehicle;
+ char* m_program;
};
diff --git a/src/object/brain.cpp b/src/object/brain.cpp
index 266a8ac..56221b1 100644
--- a/src/object/brain.cpp
+++ b/src/object/brain.cpp
@@ -2720,6 +2720,23 @@ bool CBrain::ReadSoluce(char* filename)
return true;
}
+// Load a script from text buffer.
+
+bool CBrain::SendProgram(int rank, const char* buffer)
+{
+ if ( m_script[rank] == 0 )
+ {
+ m_script[rank] = new CScript(m_object, &m_secondaryTask);
+ }
+
+ if ( m_script[rank]->SendScript(buffer) ) return true;
+
+ delete m_script[rank];
+ m_script[rank] = 0;
+
+ return false;
+}
+
// Load a script with a text file.
bool CBrain::ReadProgram(int rank, const char* filename)
diff --git a/src/object/brain.h b/src/object/brain.h
index eba8004..38fb96f 100644
--- a/src/object/brain.h
+++ b/src/object/brain.h
@@ -114,6 +114,7 @@ public:
char* GetScriptName(int rank);
void SetSoluceName(char *name);
char* GetSoluceName();
+ bool SendProgram(int rank, const char* buffer);
bool ReadSoluce(char* filename);
bool ReadProgram(int rank, const char* filename);
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index 2957799..b959d44 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -874,7 +874,7 @@ CRobotMain::CRobotMain(CApplication* app, bool loadProfile)
bc->AddItem("load", CBotTypResult(CBotTypPointer, "object"), PR_READ);
bc->AddItem("id", CBotTypResult(CBotTypInt), PR_READ);
bc->AddFunction("busy", CScript::rBusy, CScript::cBusy);
- bc->AddFunction("factory", CScript::rFactory, CScript::cClassOneFloat);
+ bc->AddFunction("factory", CScript::rFactory, CScript::cFactory);
bc->AddFunction("destroy", CScript::rDestroy, CScript::cClassNull);
// Initializes the class FILE.