Use enum for object movement type
This commit is contained in:
parent
4497812674
commit
0c219e596e
|
@ -19,6 +19,13 @@
|
|||
|
||||
struct bitmap_index;
|
||||
|
||||
namespace dcx {
|
||||
|
||||
// Movement types
|
||||
enum movement_type_t : uint8_t;
|
||||
|
||||
}
|
||||
|
||||
constexpr std::size_t MAX_OBJECTS = 350;
|
||||
#ifdef dsx
|
||||
namespace dsx {
|
||||
|
@ -62,12 +69,6 @@ constexpr control_type_t CT_LIGHT = 14; // doesn't actually do anything
|
|||
constexpr control_type_t CT_REMOTE = 15; // controlled by another net player
|
||||
constexpr control_type_t CT_CNTRLCEN = 16; // the control center/main reactor
|
||||
|
||||
// Movement types
|
||||
typedef unsigned movement_type_t;
|
||||
constexpr movement_type_t MT_NONE = 0; // doesn't move
|
||||
constexpr movement_type_t MT_PHYSICS = 1; // moves by physics
|
||||
constexpr movement_type_t MT_SPINNING = 3; // this object doesn't move, just sits and spins
|
||||
|
||||
// Render types
|
||||
typedef unsigned render_type_t;
|
||||
constexpr render_type_t RT_NONE = 0; // does not render
|
||||
|
|
|
@ -75,6 +75,13 @@ enum object_type_t : uint8_t
|
|||
OBJ_MARKER = 15, // a map marker
|
||||
};
|
||||
|
||||
enum movement_type_t : uint8_t
|
||||
{
|
||||
MT_NONE = 0, // doesn't move
|
||||
MT_PHYSICS = 1, // moves by physics
|
||||
MT_SPINNING = 3, // this object doesn't move, just sits and spins
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
namespace dsx {
|
||||
|
@ -371,7 +378,7 @@ struct object_base
|
|||
ubyte id; // which form of object...which powerup, robot, etc.
|
||||
objnum_t next,prev; // id of next and previous connected object in Objects, -1 = no connection
|
||||
ubyte control_type; // how this object is controlled
|
||||
ubyte movement_type; // how this object moves
|
||||
movement_type_t movement_type; // how this object moves
|
||||
ubyte render_type; // how this object renders
|
||||
ubyte flags; // misc flags
|
||||
segnum_t segnum; // segment number containing object
|
||||
|
@ -516,6 +523,18 @@ struct obj_position
|
|||
dxx_object_type_ref.type = static_cast<object_type_t>(dxx_object_type_value); \
|
||||
} DXX_END_COMPOUND_STATEMENT )
|
||||
|
||||
#define set_object_movement_type(O,T) \
|
||||
( DXX_BEGIN_COMPOUND_STATEMENT { \
|
||||
object_base &dxx_object_movement_type_ref = (O); \
|
||||
const uint8_t &dxx_object_movement_type_value = (T); \
|
||||
assert( \
|
||||
dxx_object_movement_type_value == MT_NONE || \
|
||||
dxx_object_movement_type_value == MT_PHYSICS || \
|
||||
dxx_object_movement_type_value == MT_SPINNING \
|
||||
); \
|
||||
dxx_object_movement_type_ref.movement_type = static_cast<movement_type_t>(dxx_object_movement_type_value); \
|
||||
} DXX_END_COMPOUND_STATEMENT )
|
||||
|
||||
}
|
||||
|
||||
#define Highest_object_index (Objects.get_count() - 1)
|
||||
|
|
|
@ -364,7 +364,7 @@ static void read_object(const vobjptr_t obj,PHYSFS_File *f,int version)
|
|||
}
|
||||
#endif
|
||||
obj->control_type = PHYSFSX_readByte(f);
|
||||
obj->movement_type = PHYSFSX_readByte(f);
|
||||
set_object_movement_type(*obj, PHYSFSX_readByte(f));
|
||||
obj->render_type = PHYSFSX_readByte(f);
|
||||
obj->flags = PHYSFSX_readByte(f);
|
||||
|
||||
|
|
|
@ -254,7 +254,7 @@ void do_morph_frame(const vobjptr_t obj)
|
|||
if (!md->n_submodels_active) { //done morphing!
|
||||
|
||||
md->obj->control_type = md->morph_save_control_type;
|
||||
md->obj->movement_type = md->morph_save_movement_type;
|
||||
set_object_movement_type(*md->obj, md->morph_save_movement_type);
|
||||
|
||||
md->obj->render_type = RT_POLYOBJ;
|
||||
|
||||
|
|
|
@ -5792,7 +5792,7 @@ void multi_object_rw_to_object(object_rw *obj_rw, const vobjptr_t obj)
|
|||
obj->next = obj_rw->next;
|
||||
obj->prev = obj_rw->prev;
|
||||
obj->control_type = obj_rw->control_type;
|
||||
obj->movement_type = obj_rw->movement_type;
|
||||
set_object_movement_type(*obj, obj_rw->movement_type);
|
||||
obj->render_type = obj_rw->render_type;
|
||||
obj->flags = obj_rw->flags;
|
||||
obj->segnum = obj_rw->segnum;
|
||||
|
@ -5820,6 +5820,8 @@ void multi_object_rw_to_object(object_rw *obj_rw, const vobjptr_t obj)
|
|||
|
||||
switch (obj->movement_type)
|
||||
{
|
||||
case MT_NONE:
|
||||
break;
|
||||
case MT_PHYSICS:
|
||||
obj->mtype.phys_info.velocity.x = obj_rw->mtype.phys_info.velocity.x;
|
||||
obj->mtype.phys_info.velocity.y = obj_rw->mtype.phys_info.velocity.y;
|
||||
|
|
|
@ -617,7 +617,11 @@ static void nd_read_object(const vobjptridx_t obj)
|
|||
|
||||
case OBJ_POWERUP:
|
||||
obj->control_type = CT_POWERUP;
|
||||
nd_read_byte(&obj->movement_type); // might have physics movement
|
||||
{
|
||||
uint8_t movement_type;
|
||||
nd_read_byte(&movement_type); // might have physics movement
|
||||
set_object_movement_type(*obj, movement_type);
|
||||
}
|
||||
obj->size = Powerup_info[get_powerup_id(obj)].size;
|
||||
break;
|
||||
|
||||
|
@ -639,7 +643,11 @@ static void nd_read_object(const vobjptridx_t obj)
|
|||
|
||||
default:
|
||||
nd_read_byte(&obj->control_type);
|
||||
nd_read_byte(&obj->movement_type);
|
||||
{
|
||||
uint8_t movement_type;
|
||||
nd_read_byte(&movement_type);
|
||||
set_object_movement_type(*obj, movement_type);
|
||||
}
|
||||
nd_read_fix(&(obj->size));
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1132,7 +1132,7 @@ objptridx_t obj_create(object_type_t type, ubyte id,vsegptridx_t segnum,const vm
|
|||
obj->orient = orient?*orient:vmd_identity_matrix;
|
||||
|
||||
obj->control_type = ctype;
|
||||
obj->movement_type = mtype;
|
||||
set_object_movement_type(*obj, mtype);
|
||||
obj->render_type = rtype;
|
||||
obj->contains_type = -1;
|
||||
obj->contains_id = -1;
|
||||
|
|
|
@ -298,7 +298,7 @@ static void state_object_rw_to_object(const object_rw *const obj_rw, const vobjp
|
|||
obj->next = obj_rw->next;
|
||||
obj->prev = obj_rw->prev;
|
||||
obj->control_type = obj_rw->control_type;
|
||||
obj->movement_type = obj_rw->movement_type;
|
||||
set_object_movement_type(*obj, obj_rw->movement_type);
|
||||
obj->render_type = obj_rw->render_type;
|
||||
obj->flags = obj_rw->flags;
|
||||
obj->segnum = obj_rw->segnum;
|
||||
|
@ -326,6 +326,8 @@ static void state_object_rw_to_object(const object_rw *const obj_rw, const vobjp
|
|||
|
||||
switch (obj->movement_type)
|
||||
{
|
||||
case MT_NONE:
|
||||
break;
|
||||
case MT_PHYSICS:
|
||||
obj->mtype.phys_info.velocity.x = obj_rw->mtype.phys_info.velocity.x;
|
||||
obj->mtype.phys_info.velocity.y = obj_rw->mtype.phys_info.velocity.y;
|
||||
|
@ -1027,7 +1029,7 @@ int state_save_all_sub(const char *filename, const char *desc)
|
|||
md = find_morph_data(objp);
|
||||
if (md) {
|
||||
md->obj->control_type = md->morph_save_control_type;
|
||||
md->obj->movement_type = md->morph_save_movement_type;
|
||||
set_object_movement_type(*md->obj, md->morph_save_movement_type);
|
||||
md->obj->render_type = RT_POLYOBJ;
|
||||
md->obj->mtype.phys_info = md->morph_save_phys_info;
|
||||
md->obj = NULL;
|
||||
|
|
Loading…
Reference in a new issue