diff options
Diffstat (limited to 'src/object')
-rw-r--r-- | src/object/auto/autofactory.cpp | 25 | ||||
-rw-r--r-- | src/object/auto/autofactory.h | 6 | ||||
-rw-r--r-- | src/object/brain.cpp | 17 | ||||
-rw-r--r-- | src/object/brain.h | 1 | ||||
-rw-r--r-- | src/object/robotmain.cpp | 2 |
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. |