diff options
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/object/motion/motiondummy.cpp | 62 | ||||
-rw-r--r-- | src/object/motion/motiondummy.h | 32 | ||||
-rw-r--r-- | src/object/object.cpp | 7 | ||||
-rw-r--r-- | src/object/object.h | 1 | ||||
-rw-r--r-- | src/object/robotmain.cpp | 33 |
6 files changed, 128 insertions, 8 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 26c02bc..f4305df 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -120,6 +120,7 @@ object/mainmovie.cpp object/motion/motion.cpp object/motion/motionant.cpp object/motion/motionbee.cpp +object/motion/motiondummy.cpp object/motion/motionhuman.cpp object/motion/motionmother.cpp object/motion/motionspider.cpp diff --git a/src/object/motion/motiondummy.cpp b/src/object/motion/motiondummy.cpp new file mode 100644 index 0000000..68827ff --- /dev/null +++ b/src/object/motion/motiondummy.cpp @@ -0,0 +1,62 @@ +// * This file is part of the COLOBOT source code +// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch +// * +// * This program is free software: you can redistribute it and/or modify +// * it under the terms of the GNU General Public License as published by +// * the Free Software Foundation, either version 3 of the License, or +// * (at your option) any later version. +// * +// * This program is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// * GNU General Public License for more details. +// * +// * You should have received a copy of the GNU General Public License +// * along with this program. If not, see http://www.gnu.org/licenses/. + + +#include "object/motion/motiondummy.h" + +#include "graphics/engine/modelmanager.h" + +#include <stdio.h> +#include <string.h> + + + + + +// Object's constructor. + +CMotionDummy::CMotionDummy(CObject* object) : CMotion(object) +{ +} + +// Object's destructor. + +CMotionDummy::~CMotionDummy() +{ +} + + +// Removes an object. + +void CMotionDummy::DeleteObject(bool bAll) +{ +} + + +// Creates a Dummy traveling any lands on the ground. + +bool CMotionDummy::Create(Math::Vector pos, float angle, ObjectType type, + float power) +{ + m_object->SetType(type); + + // Creates the main base. + int rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object + m_object->SetObjectRank(0, rank); + + return true; +}
\ No newline at end of file diff --git a/src/object/motion/motiondummy.h b/src/object/motion/motiondummy.h new file mode 100644 index 0000000..744df2f --- /dev/null +++ b/src/object/motion/motiondummy.h @@ -0,0 +1,32 @@ +// * This file is part of the COLOBOT source code +// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch +// * +// * This program is free software: you can redistribute it and/or modify +// * it under the terms of the GNU General Public License as published by +// * the Free Software Foundation, either version 3 of the License, or +// * (at your option) any later version. +// * +// * This program is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// * GNU General Public License for more details. +// * +// * You should have received a copy of the GNU General Public License +// * along with this program. If not, see http://www.gnu.org/licenses/. + +// motiondummy.h + +#pragma once + + +#include "object/motion/motion.h" + +class CMotionDummy : public CMotion +{ +public: + CMotionDummy(CObject* object); + ~CMotionDummy(); + + void DeleteObject(bool bAll=false); + bool Create(Math::Vector pos, float angle, ObjectType type, float power); +};
\ No newline at end of file diff --git a/src/object/object.cpp b/src/object/object.cpp index b621ef2..3459644 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -64,6 +64,7 @@ #include "object/motion/motion.h" #include "object/motion/motionant.h" #include "object/motion/motionbee.h" +#include "object/motion/motiondummy.h" #include "object/motion/motionhuman.h" #include "object/motion/motionmother.h" #include "object/motion/motionspider.h" @@ -2145,8 +2146,10 @@ bool CObject::CreateVehicle(Math::Vector pos, float angle, ObjectType type, { m_motion = new CMotionHuman(this); } - else - { + else if ( type == OBJECT_CONTROLLER ) { + m_motion = new CMotionDummy(this); //dummy object + } + else { m_motion = new CMotionVehicle(this); } if ( m_motion == 0 ) return false; diff --git a/src/object/object.h b/src/object/object.h index 4d8cc02..25ea708 100644 --- a/src/object/object.h +++ b/src/object/object.h @@ -156,6 +156,7 @@ enum ObjectType OBJECT_MOBILEsa = 210, //! < submarine OBJECT_MOBILEtg = 211, //! < training target OBJECT_MOBILEdr = 212, //! < robot drawing + OBJECT_CONTROLLER = 213, //! < mission controller OBJECT_WAYPOINT = 250, //! < waypoint OBJECT_FLAGb = 260, //! < blue flag OBJECT_FLAGr = 261, //! < red flag diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 7be1177..ddd6545 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -4351,6 +4351,24 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_beginObject = true; } + if (Cmd(line, "MissionController") && read[0] == 0 && m_version == 3) + { + if (!m_beginObject) { + GetLogger()->Error("Syntax error in file '%s' (line %d): MissionController before BeginObject\n", filename, lineNum); + continue; + } + + CObject* obj = CreateObject(Math::Vector(0.0f, 0.0f, 0.0f), 0.0f, 1.0f, 0.0f, OBJECT_CONTROLLER, 100.0f, false, false, 0); + CBrain* brain = obj->GetBrain(); + if (brain != nullptr) + { + OpString(line, "script", name); + if (name[0] != 0) + brain->SetScriptName(1, name); + brain->SetScriptRun(1); + } + } + if (Cmd(line, "CreateObject") && read[0] == 0) { if (!m_beginObject) { @@ -4672,7 +4690,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_camera->SetFixDirection(OpFloat(line, "fixDirection", 0.25f)*Math::PI); } - if (Cmd(line, "EndMissionTake") && !resetObject) + if (Cmd(line, "EndMissionTake") && !resetObject && m_version<3) { int i = m_endTakeTotal; if (i < 10) @@ -4695,16 +4713,16 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_endTakeTotal ++; } } - if (Cmd(line, "EndMissionDelay") && !resetObject) + if (Cmd(line, "EndMissionDelay") && !resetObject && m_version<3) { m_endTakeWinDelay = OpFloat(line, "win", 2.0f); m_endTakeLostDelay = OpFloat(line, "lost", 2.0f); } - if (Cmd(line, "EndMissionResearch") && !resetObject) + if (Cmd(line, "EndMissionResearch") && !resetObject && m_version<3) { m_endTakeResearch |= OpResearch(line, "type"); } - if (Cmd(line, "EndMissionNever") && !resetObject && m_version >= 2) + if (Cmd(line, "EndMissionNever") && !resetObject && m_version == 2) { m_endTakeNever = true; } @@ -5134,7 +5152,8 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_MOBILEwt || type == OBJECT_MOBILEit || type == OBJECT_MOBILEdr || - type == OBJECT_APOLLO2 ) + type == OBJECT_APOLLO2 || + type == OBJECT_CONTROLLER ) { object = new CObject(); object->SetOption(option); @@ -6690,6 +6709,8 @@ void CRobotMain::UpdateAudio(bool frame) //! Checks if the mission is over Error CRobotMain::CheckEndMission(bool frame) { + if (m_version >= 3) return ERR_MISSION_NOTERM; //disabled. TODO: Control from program + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); for (int t = 0; t < m_endTakeTotal; t++) @@ -6769,7 +6790,7 @@ Error CRobotMain::CheckEndMission(bool frame) } if (nb < m_endTake[t].min || nb > m_endTake[t].max || - m_endTakeNever) + m_endTakeNever ) { m_displayText->SetEnable(true); return ERR_MISSION_NOTERM; |