Tiberian Technologies Scripts Reference Revision: 9000
Loading...
Searching...
No Matches
PhysDefClass.h
1/* Renegade Scripts.dll
2 Copyright 2013 Tiberian Technologies
3
4 This file is part of the Renegade scripts.dll
5 The Renegade scripts.dll is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2, or (at your option) any later
8 version. See the file COPYING for more details.
9 In addition, an exemption is given to allow Run Time Dynamic Linking of this code with any closed source module that does not contain code covered by this licence.
10 Only the source code to the module(s) containing the licenced code has to be released.
11*/
12#ifndef TT_INCLUDE__PHYSDEFCLASS_H
13#define TT_INCLUDE__PHYSDEFCLASS_H
14
15#include "engine_common.h"
16#include "engine_vector.h"
17#include "engine_io.h"
18#include "engine_threading.h"
19#include "engine_string.h"
20#include "Definition.h"
21// If you modify this list, be sure to add the friendly name to GetCollisionGroupName
22typedef enum {
23 DEFAULT_COLLISION_GROUP = 0, // collides with everything
24 UNCOLLIDEABLE_GROUP, // collides with nothing
25 TERRAIN_ONLY_COLLISION_GROUP, // collides only with terrain
26 BULLET_COLLISION_GROUP, // collides with everything but itself
27 TERRAIN_AND_BULLET_COLLISION_GROUP, // collides with terrain and bullets
28 BULLET_ONLY_COLLISION_GROUP, // collides only with bullets
29 SOLDIER_COLLISION_GROUP, // collides with everything (but only soldiers use it)
30 SOLDIER_GHOST_COLLISION_GROUP, // behaves like SOLDIER but doesn't collide with unit groups
31
32 // new collision groups here, 8 - 14
33 C4_COLLISION_GROUP, // behaves like DEFAULT but collides with SOLDIER_GHOST and doesn't collide with WATER_EDGE or UNDERGROUND_TRANSITION
34 UNDERGROUND_COLLISION_GROUP, // collides with TERRAIN and itself
35 SOLDIER_ONLY_COLLISION_GROUP, // collides only with SOLDIER and SOLDIER_GHOST
36 SOLDIER_BULLET_COLLISION_GROUP, // collides with C4, BULLET, SOLDIER and SOLDIER_GHOST
37
38 TERRAIN_COLLISION_GROUP = 15, // Terrain must be 15
39
40 // more collision groups here, 16 - 31
41 WATER_SURFACE_COLLISION_GROUP, // collides with NAVAL_UNIT, BEACHING_UNIT, AMBHIBIOUS_UNIT, and BULLET
42 WATER_EDGE_COLLISION_GROUP, // collides with DEFAULT, SOLDIER, and NAVAL_UNIT
43 WATER_EDGE_ALT_COLLISION_GROUP, // collides only with NAVAL_UNIT
44 BEACH_EDGE_COLLISION_GROUP, // collides only with BEACHING_UNIT
45 NAVAL_UNIT_COLLISION_GROUP, // behaves like DEFAULT but collides with WATER_SURFACE and WATER_EDGE
46 BEACHING_UNIT_COLLISION_GROUP, // behaves like DEFAULT but collides with WATER_SURFACE and BEACH_EDGE
47 HOVER_UNIT_COLLISION_GROUP, // behaves like DEFAULT but collides with WATER_SURFACE
48 AMPHIBIOUS_UNIT_COLLISION_GROUP, // behaves like DEFAULT but collides with AMPHIBIOUS_UNIT_FLOOR
49 AMPHIBIOUS_UNIT_FLOOR_COLLISION_GROUP, // collides only with AMPHIBIOUS_UNIT
50 UNDERGROUND_TRANSITION_COLLISION_GROUP, // behaves like DEFAULT but collides with UNDERGROUND
51
52 DEFAULT_AND_SOLDIER_ONLY_COLLISION_GROUP, // collides with DEFAULT, SOLDIER, and SOLDIER_GHOST
53
54 PLAYER_BUILDING_COLLISION_GROUP, // behaves like a mix of TERRAIN/DEFAULT but doesn't collde with PLAYER_BUILDING_GHOST
55 PLAYER_BUILDING_GHOST_COLLISION_GROUP, // behaves like DEFAULT but doesn't collde with PLAYER_BUILDING
56 TRAIN_COLLISION_GROUP, // collides with TRAIN_TRACK, SOLDIER, DEFAULT, BULLET, and C4, (And the other navel unit types)
57 TRAIN_TRACK_COLLISION_GROUP, // collides only with itself
58
59 COLLISION_GROUP_MAX = 32, // not a collision group
60} Collision_Group_Type;
61
62inline const char* GetCollisionGroupName(Collision_Group_Type group)
63{
64 switch(group)
65 {
66 case DEFAULT_COLLISION_GROUP: return "Default";
67 case UNCOLLIDEABLE_GROUP: return "Uncollideable";
68 case TERRAIN_ONLY_COLLISION_GROUP: return "Terrain-only";
69 case BULLET_COLLISION_GROUP: return "Bullet";
70 case TERRAIN_AND_BULLET_COLLISION_GROUP: return "Terrain and Bullet";
71 case BULLET_ONLY_COLLISION_GROUP: return "Bullet-only";
72 case SOLDIER_COLLISION_GROUP: return "Soldier";
73 case SOLDIER_GHOST_COLLISION_GROUP: return "Soldier-ghost";
74 case UNDERGROUND_COLLISION_GROUP: return "Underground";
75 case SOLDIER_ONLY_COLLISION_GROUP: return "Soldier-only";
76 case SOLDIER_BULLET_COLLISION_GROUP: return "Soldier-bullet";
77 case TERRAIN_COLLISION_GROUP: return "Terrain";
78 case WATER_SURFACE_COLLISION_GROUP: return "Water Surface";
79 case WATER_EDGE_COLLISION_GROUP: return "Water Edge (Block)";
80 case WATER_EDGE_ALT_COLLISION_GROUP: return "Water Edge (Allow)";
81 case BEACH_EDGE_COLLISION_GROUP: return "Beach Edge";
82 case NAVAL_UNIT_COLLISION_GROUP: return "Naval Unit";
83 case BEACHING_UNIT_COLLISION_GROUP: return "Beaching Unit";
84 case HOVER_UNIT_COLLISION_GROUP: return "Hover Unit";
85 case AMPHIBIOUS_UNIT_COLLISION_GROUP: return "Amphibious Unit";
86 case AMPHIBIOUS_UNIT_FLOOR_COLLISION_GROUP: return "Amphibious Unit Floor";
87 case UNDERGROUND_TRANSITION_COLLISION_GROUP:return "Underground Transition";
88 case DEFAULT_AND_SOLDIER_ONLY_COLLISION_GROUP: return "Default and Soldier only";
89 case PLAYER_BUILDING_COLLISION_GROUP: return "Player Building";
90 case PLAYER_BUILDING_GHOST_COLLISION_GROUP: return "Player Building Ghost";
91 case TRAIN_COLLISION_GROUP: return "Train";
92 case TRAIN_TRACK_COLLISION_GROUP: return "Train Track";
93 default: return NULL; // NULL == do not add to friendly name list
94 };
95};
96
97typedef enum
98{
99 // visibility mode
100 VISIBILITYMODE_DEFAULT = 0, // visibility is not affected by the collision group of the player controlled object
101 VISIBILITYMODE_IFCOLLIDE, // visible only if the player controlled object can collide with this object
102 VISIBILITYMODE_IFNOCOLLIDE, // visible only if the player controlled object won't collide with this object
103 VISIBILITYMODE_MAX = 3 // not a visibilty mode
104} Visibility_Mode_Type;
105
106class PhysDefClass : public DefinitionClass
107{
108public:
109 PhysDefClass(void);
110 virtual bool Save(ChunkSaveClass &csave);
111 virtual bool Load(ChunkLoadClass &cload);
112 virtual const char * Get_Type_Name(void) { return "PhysDef"; }
113 virtual bool Is_Type(const char *);
114 virtual bool Is_Valid_Config (StringClass &message);
115 const StringClass & Get_Model_Name() { return ModelName; }
116 bool Get_Is_Pre_Lit() { return IsPreLit; }
117#ifdef DDBEDIT
118 virtual void Dump (FileClass &file);
119#endif
120 DECLARE_EDITABLE(PhysDefClass,DefinitionClass);
121protected:
122 StringClass ModelName;
123 bool IsPreLit;
124 friend class PhysClass;
125 friend class PresetDump;
126}; // 36
127
128#endif