From a36450a6dae20912ba89a9c49e8b951a20a32bfb Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 29 Dec 2013 15:03:21 +0100 Subject: Added tool= i drive= --- src/object/object.cpp | 67 +++++++++++++++++++++++++++++++++++++++++ src/object/object.h | 77 ++++++++++++++++++++++++++++++------------------ src/object/robotmain.cpp | 20 +++++++++++-- src/object/robotmain.h | 4 +++ 4 files changed, 138 insertions(+), 30 deletions(-) (limited to 'src/object') diff --git a/src/object/object.cpp b/src/object/object.cpp index f1de424..2c32da0 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -7390,3 +7390,70 @@ void CObject::SetTraceWidth(float width) mv->SetTraceWidth(width); } +DriveType CObject::GetDriveFromObject(ObjectType type) +{ + switch(type) { + case OBJECT_MOBILEwt: + case OBJECT_MOBILEwa: + case OBJECT_MOBILEwc: + case OBJECT_MOBILEwi: + case OBJECT_MOBILEws: + return DRIVE_WHEELED; + + case OBJECT_MOBILEtt: + case OBJECT_MOBILEta: + case OBJECT_MOBILEtc: + case OBJECT_MOBILEti: + case OBJECT_MOBILEts: + return DRIVE_TRACKED; + + case OBJECT_MOBILEft: + case OBJECT_MOBILEfa: + case OBJECT_MOBILEfc: + case OBJECT_MOBILEfi: + case OBJECT_MOBILEfs: + return DRIVE_WINGED; + + case OBJECT_MOBILEit: + case OBJECT_MOBILEia: + case OBJECT_MOBILEic: + case OBJECT_MOBILEii: + case OBJECT_MOBILEis: + return DRIVE_LEGGED; + + default: + return DRIVE_OTHER; + } +} + +ToolType CObject::GetToolFromObject(ObjectType type) +{ + switch(type) { + case OBJECT_MOBILEwa: + case OBJECT_MOBILEta: + case OBJECT_MOBILEfa: + case OBJECT_MOBILEia: + return TOOL_GRABBER; + + case OBJECT_MOBILEws: + case OBJECT_MOBILEts: + case OBJECT_MOBILEfs: + case OBJECT_MOBILEis: + return TOOL_SNIFFER; + + case OBJECT_MOBILEwc: + case OBJECT_MOBILEtc: + case OBJECT_MOBILEfc: + case OBJECT_MOBILEic: + return TOOL_SHOOTER; + + case OBJECT_MOBILEwi: + case OBJECT_MOBILEti: + case OBJECT_MOBILEfi: + case OBJECT_MOBILEii: + return TOOL_ORGASHOOTER; + + default: + return TOOL_OTHER; + } +} diff --git a/src/object/object.h b/src/object/object.h index b5c0385..64689eb 100644 --- a/src/object/object.h +++ b/src/object/object.h @@ -125,34 +125,34 @@ enum ObjectType OBJECT_TREE7 = 97, //! < tree 7 OBJECT_TREE8 = 98, //! < tree 8 OBJECT_TREE9 = 99, //! < tree 9 - OBJECT_MOBILEwt = 100, //! < wheel-trainer - OBJECT_MOBILEtt = 101, //! < track-trainer - OBJECT_MOBILEft = 102, //! < fly-trainer - OBJECT_MOBILEit = 103, //! < insect-trainer - OBJECT_MOBILEwa = 110, //! < wheel-arm - OBJECT_MOBILEta = 111, //! < track-arm - OBJECT_MOBILEfa = 112, //! < fly-arm - OBJECT_MOBILEia = 113, //! < insect-arm - OBJECT_MOBILEwc = 120, //! < wheel-cannon - OBJECT_MOBILEtc = 121, //! < track-cannon - OBJECT_MOBILEfc = 122, //! < fly-cannon - OBJECT_MOBILEic = 123, //! < insect-cannon - OBJECT_MOBILEwi = 130, //! < wheel-insect-cannon - OBJECT_MOBILEti = 131, //! < track-insect-cannon - OBJECT_MOBILEfi = 132, //! < fly-insect-cannon - OBJECT_MOBILEii = 133, //! < insect-insect-cannon - OBJECT_MOBILEws = 140, //! < wheel-search - OBJECT_MOBILEts = 141, //! < track-search - OBJECT_MOBILEfs = 142, //! < fly-search - OBJECT_MOBILEis = 143, //! < insect-search - OBJECT_MOBILErt = 200, //! < roller-terraform - OBJECT_MOBILErc = 201, //! < roller-canon - OBJECT_MOBILErr = 202, //! < roller-recover - OBJECT_MOBILErs = 203, //! < roller-shield - OBJECT_MOBILEsa = 210, //! < submarine - OBJECT_MOBILEtg = 211, //! < training target - OBJECT_MOBILEdr = 212, //! < robot drawing - OBJECT_CONTROLLER = 213, //! < mission controller + OBJECT_MOBILEwt = 100, //! < PracticeBot + OBJECT_MOBILEtt = 101, //! < track-trainer (unused) + OBJECT_MOBILEft = 102, //! < fly-trainer (unused) + OBJECT_MOBILEit = 103, //! < insect-trainer (unused) + OBJECT_MOBILEwa = 110, //! < WheeledGrabber + OBJECT_MOBILEta = 111, //! < TrackedGrabber + OBJECT_MOBILEfa = 112, //! < WingedGrabber + OBJECT_MOBILEia = 113, //! < LeggedGrabber + OBJECT_MOBILEwc = 120, //! < WheeledShooter + OBJECT_MOBILEtc = 121, //! < TrackedShooter + OBJECT_MOBILEfc = 122, //! < WingedShooter + OBJECT_MOBILEic = 123, //! < LeggedShooter + OBJECT_MOBILEwi = 130, //! < WheeledOrgaShooter + OBJECT_MOBILEti = 131, //! < TrackedOrgaShooter + OBJECT_MOBILEfi = 132, //! < WingedOrgaShooter + OBJECT_MOBILEii = 133, //! < LeggedOrgaShooter + OBJECT_MOBILEws = 140, //! < WheeledSniffer + OBJECT_MOBILEts = 141, //! < TrackedSniffer + OBJECT_MOBILEfs = 142, //! < WingedSniffer + OBJECT_MOBILEis = 143, //! < LeggedSniffer + OBJECT_MOBILErt = 200, //! < Thumper + OBJECT_MOBILErc = 201, //! < PhazerShooter + OBJECT_MOBILErr = 202, //! < Recycler + OBJECT_MOBILErs = 203, //! < Shielder + OBJECT_MOBILEsa = 210, //! < Subber + OBJECT_MOBILEtg = 211, //! < TargetBot + OBJECT_MOBILEdr = 212, //! < Scribbler + OBJECT_CONTROLLER = 213, //! < MissionController OBJECT_WAYPOINT = 250, //! < waypoint OBJECT_FLAGb = 260, //! < blue flag OBJECT_FLAGr = 261, //! < red flag @@ -311,6 +311,24 @@ enum ObjectMaterial OM_MINERAL = 5, // stone }; +enum DriveType +{ + DRIVE_OTHER = 0, + DRIVE_WHEELED, + DRIVE_TRACKED, + DRIVE_WINGED, + DRIVE_LEGGED, +}; + +enum ToolType +{ + TOOL_OTHER = 0, + TOOL_GRABBER, + TOOL_SNIFFER, + TOOL_SHOOTER, + TOOL_ORGASHOOTER, +}; + struct ObjectPart { char bUsed; @@ -659,6 +677,9 @@ public: void SetTraceWidth(float width); std::string GetModelDirName(); + + static DriveType GetDriveFromObject(ObjectType type); + static ToolType GetToolFromObject(ObjectType type); protected: bool EventFrame(const Event &event); diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index af463c7..0852df0 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -4131,6 +4131,8 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_audioChange[i].max = OpInt(line, "max", 9999); m_audioChange[i].powermin = OpFloat(line, "powermin", -1); m_audioChange[i].powermax = OpFloat(line, "powermax", 100); + m_audioChange[i].tool = OpTool(line, "tool"); + m_audioChange[i].drive = OpDrive(line, "drive"); OpString(line, "filename", m_audioChange[i].music); m_audioChange[i].repeat = OpInt(line, "repeat", 1); m_audioChange[i].changed = false; @@ -4928,11 +4930,15 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) { m_endTake[i].powermin = OpFloat(line, "powermin", -1); m_endTake[i].powermax = OpFloat(line, "powermax", 100); + m_endTake[i].tool = OpTool(line, "tool"); + m_endTake[i].drive = OpDrive(line, "drive"); } else { m_endTake[i].powermin = -1; m_endTake[i].powermax = 100; + m_endTake[i].tool = TOOL_OTHER; + m_endTake[i].drive = DRIVE_OTHER; } m_endTake[i].lost = OpInt(line, "lost", -1); m_endTake[i].immediat = OpInt(line, "immediat", 0); @@ -6594,8 +6600,13 @@ void CRobotMain::UpdateAudio(bool frame) { type = OBJECT_SCRAP1; } + + ToolType tool = CObject::GetToolFromObject(type); + DriveType drive = CObject::GetDriveFromObject(type); + if (m_audioChange[t].tool != TOOL_OTHER) if(tool != m_audioChange[t].tool) continue; + if (m_audioChange[t].drive != DRIVE_OTHER) if(drive != m_audioChange[t].drive) continue; - if (type != m_audioChange[t].type) continue; + if (m_audioChange[t].tool == TOOL_OTHER && m_audioChange[t].drive == DRIVE_OTHER) if (type != m_audioChange[t].type) continue; float energyLevel = -1; CObject* power = obj->GetPower(); @@ -6699,7 +6710,12 @@ Error CRobotMain::CheckEndMission(bool frame) type = OBJECT_SCRAP1; } - if (type != m_endTake[t].type) continue; + ToolType tool = CObject::GetToolFromObject(type); + DriveType drive = CObject::GetDriveFromObject(type); + if (m_endTake[t].tool != TOOL_OTHER) if(tool != m_endTake[t].tool) continue; + if (m_endTake[t].drive != DRIVE_OTHER) if(drive != m_endTake[t].drive) continue; + + if (m_endTake[t].tool == TOOL_OTHER && m_endTake[t].drive == DRIVE_OTHER) if (type != m_endTake[t].type) continue; float energyLevel = -1; CObject* power = obj->GetPower(); diff --git a/src/object/robotmain.h b/src/object/robotmain.h index c300b5a..8d58adb 100644 --- a/src/object/robotmain.h +++ b/src/object/robotmain.h @@ -103,6 +103,8 @@ struct EndTake int lost; // lost if <= float powermin; // wins if energy cell >= float powermax; // wins if energy cell <= + ToolType tool; + DriveType drive; bool immediat; char message[100]; }; @@ -116,6 +118,8 @@ struct AudioChange int max; // change if < float powermin; // change if energy cell >= float powermax; // change if energy cell <= + ToolType tool; + DriveType drive; char music[100]; bool repeat; bool changed; -- cgit v1.2.3-1-g7c22