Removed manual memory management in CBrain and CObjectInterface

master
krzys-h 2015-08-10 17:17:02 +02:00
parent a3fa3487b2
commit 726cfbda77
4 changed files with 30 additions and 34 deletions

View File

@ -79,18 +79,13 @@ CBrain::CBrain(COldObject* object)
m_scriptRun = nullptr;
m_soluceName[0] = 0;
m_bTraceRecord = false;
m_traceRecordBuffer = nullptr;
m_traceRecord = false;
}
// Object's destructor.
CBrain::~CBrain()
{
m_program.clear();
delete[] m_traceRecordBuffer;
m_traceRecordBuffer = nullptr;
}
void CBrain::SetPhysics(CPhysics* physics)
@ -273,7 +268,7 @@ bool CBrain::EventFrame(const Event &event)
}
}
if ( m_bTraceRecord ) // registration of the design in progress?
if ( m_traceRecord ) // registration of the design in progress?
{
TraceRecordFrame();
}
@ -518,10 +513,15 @@ bool CBrain::WriteStack(FILE *file)
void CBrain::TraceRecordStart()
{
if (m_traceRecord)
{
TraceRecordStop();
}
CMotionVehicle* motionVehicle = dynamic_cast<CMotionVehicle*>(m_motion);
assert(motionVehicle != nullptr);
m_bTraceRecord = true;
m_traceRecord = true;
m_traceOper = TO_STOP;
@ -537,8 +537,7 @@ void CBrain::TraceRecordStart()
m_traceColor = TraceColor::Default;
}
delete[] m_traceRecordBuffer;
m_traceRecordBuffer = new TraceRecord[MAXTRACERECORD];
m_traceRecordBuffer = MakeUniqueArray<TraceRecord>(MAXTRACERECORD);
m_traceRecordIndex = 0;
}
@ -601,7 +600,7 @@ void CBrain::TraceRecordStop()
TraceOper lastOper, curOper;
float lastParam, curParam;
m_bTraceRecord = false;
m_traceRecord = false;
std::stringstream buffer;
buffer << "extern void object::AutoDraw()\n{\n";
@ -633,8 +632,7 @@ void CBrain::TraceRecordStop()
}
TraceRecordPut(buffer, lastOper, lastParam);
delete[] m_traceRecordBuffer;
m_traceRecordBuffer = nullptr;
m_traceRecordBuffer.reset();
buffer << "}\n";
@ -694,7 +692,7 @@ bool CBrain::TraceRecordPut(std::stringstream& buffer, TraceOper oper, float par
bool CBrain::IsTraceRecord()
{
return m_bTraceRecord;
return m_traceRecord;
}
Program* CBrain::AddProgram()

View File

@ -160,11 +160,11 @@ protected:
float m_time;
float m_burnTime;
bool m_bTraceRecord;
bool m_traceRecord;
TraceOper m_traceOper;
Math::Vector m_tracePos;
float m_traceAngle;
TraceColor m_traceColor;
int m_traceRecordIndex;
TraceRecord* m_traceRecordBuffer;
std::unique_ptr<TraceRecord[]> m_traceRecordBuffer;
};

View File

@ -65,6 +65,9 @@ CObjectInterface::CObjectInterface(COldObject* object)
assert(object->Implements(ObjectInterfaceType::Programmable));
m_brain = dynamic_cast<CProgrammableObject*>(m_object)->GetBrain();
m_physics = m_object->GetPhysics();
m_motion = m_object->GetMotion();
m_engine = Gfx::CEngine::GetInstancePointer();
m_water = m_engine->GetWater();
m_particle = m_engine->GetParticle();
@ -73,9 +76,6 @@ CObjectInterface::CObjectInterface(COldObject* object)
m_camera = m_main->GetCamera();
m_interface = m_main->GetInterface();
m_sound = CApplication::GetInstancePointer()->GetSound();
m_physics = m_object->GetPhysics();
m_motion = m_object->GetMotion();
m_studio = nullptr;
m_time = 0.0f;
m_lastUpdateTime = 0.0f;
@ -93,8 +93,6 @@ CObjectInterface::CObjectInterface(COldObject* object)
CObjectInterface::~CObjectInterface()
{
delete m_studio;
m_studio = nullptr;
}
@ -109,7 +107,7 @@ void CObjectInterface::DeleteObject(bool all)
m_soundChannelAlarm = -1;
}
if ( m_studio != 0 ) // current edition?
if ( m_studio != nullptr ) // current edition?
{
StopEditScript(true);
}
@ -222,7 +220,7 @@ bool CObjectInterface::EventProcess(const Event &event)
}
if ( m_object->GetSelect() && // robot selected?
m_studio != 0 ) // current issue?
m_studio != nullptr ) // current issue?
{
m_studio->EventProcess(event);
@ -731,7 +729,7 @@ bool CObjectInterface::EventFrame(const Event &event)
m_sound->Position(m_soundChannelAlarm, m_object->GetPosition());
}
if ( m_studio != 0 ) // current edition?
if ( m_studio != nullptr ) // current edition?
{
m_studio->EventProcess(event);
}
@ -747,7 +745,7 @@ void CObjectInterface::StartEditScript(Program* program, char* name)
{
CreateInterface(false); // removes the control buttons
m_studio = new CStudio();
m_studio = MakeUnique<CStudio>();
m_studio->StartEditScript(program->script.get(), name, program);
}
@ -755,12 +753,10 @@ void CObjectInterface::StartEditScript(Program* program, char* name)
void CObjectInterface::StopEditScript(bool bCancel)
{
if ( !bCancel ) m_brain->SetActiveVirus(false);
if ( !m_studio->StopEditScript(bCancel) ) return;
m_studio.reset();
delete m_studio;
m_studio = 0;
if ( !bCancel ) m_brain->SetActiveVirus(false);
CreateInterface(true); // puts the control buttons
}

View File

@ -70,7 +70,7 @@ protected:
void GroundFlat();
void ColorFlag(int color);
void UpdateScript(Ui::CWindow *pw);
void UpdateScript(CWindow *pw);
int GetSelScript();
void SetSelScript(int index);
void BlinkScript(bool bEnable);
@ -86,15 +86,17 @@ protected:
Gfx::CWater* m_water;
Gfx::CCamera* m_camera;
Gfx::CParticle* m_particle;
CRobotMain* m_main;
Ui::CInterface* m_interface;
CSoundInterface* m_sound;
COldObject* m_object;
CTaskExecutorObject* m_taskExecutor;
CBrain* m_brain;
CPhysics* m_physics;
CMotion* m_motion;
Ui::CInterface* m_interface;
CRobotMain* m_main;
Ui::CStudio* m_studio;
CSoundInterface* m_sound;
std::unique_ptr<CStudio> m_studio;
int m_selScript; // rank of the selected script