summaryrefslogtreecommitdiffstats
path: root/src/object
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2013-12-29 15:03:21 +0100
committerkrzys-h <krzys_h@interia.pl>2013-12-29 15:03:21 +0100
commita36450a6dae20912ba89a9c49e8b951a20a32bfb (patch)
tree2733f24e02bf56118919340b0fc5afbf4967e849 /src/object
parentdc81cda4b1f27af6fe8abcd566ffac03255f2642 (diff)
downloadcolobot-a36450a6dae20912ba89a9c49e8b951a20a32bfb.tar.gz
colobot-a36450a6dae20912ba89a9c49e8b951a20a32bfb.tar.bz2
colobot-a36450a6dae20912ba89a9c49e8b951a20a32bfb.zip
Added tool= i drive=
Diffstat (limited to 'src/object')
-rw-r--r--src/object/object.cpp67
-rw-r--r--src/object/object.h77
-rw-r--r--src/object/robotmain.cpp20
-rw-r--r--src/object/robotmain.h4
4 files changed, 138 insertions, 30 deletions
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;