mirror of
https://github.com/love2d/love.git
synced 2026-08-18 11:44:15 +02:00
Build type information on first use (load-time), instead of using a hardcoded list
--HG-- branch : dynamiccore2
This commit is contained in:
+20
-97
@@ -23,115 +23,38 @@
|
||||
|
||||
// STD
|
||||
#include <bitset>
|
||||
#include <vector>
|
||||
|
||||
namespace love
|
||||
{
|
||||
|
||||
enum Type
|
||||
void addTypeName(uint32_t type, const char *name);
|
||||
bool getTypeName(const char *in, uint32_t &out);
|
||||
bool getTypeName(uint32_t in, const char *&out);
|
||||
|
||||
class Type
|
||||
{
|
||||
INVALID_ID = 0,
|
||||
// Cross-module types.
|
||||
OBJECT_ID,
|
||||
DATA_ID,
|
||||
MODULE_ID,
|
||||
STREAM_ID,
|
||||
public:
|
||||
static const uint32_t MAX_TYPES = 128;
|
||||
|
||||
// Filesystem.
|
||||
FILESYSTEM_FILE_ID,
|
||||
FILESYSTEM_DROPPED_FILE_ID,
|
||||
FILESYSTEM_FILE_DATA_ID,
|
||||
// TODO: Type-checking templated constructor
|
||||
Type(Type *parent);
|
||||
|
||||
// Font
|
||||
FONT_GLYPH_DATA_ID,
|
||||
FONT_RASTERIZER_ID,
|
||||
uint32_t getId();
|
||||
bool isa(const uint32_t &other);
|
||||
bool isa(Type &other);
|
||||
|
||||
// Graphics
|
||||
GRAPHICS_DRAWABLE_ID,
|
||||
GRAPHICS_TEXTURE_ID,
|
||||
GRAPHICS_IMAGE_ID,
|
||||
GRAPHICS_QUAD_ID,
|
||||
GRAPHICS_FONT_ID,
|
||||
GRAPHICS_PARTICLE_SYSTEM_ID,
|
||||
GRAPHICS_SPRITE_BATCH_ID,
|
||||
GRAPHICS_CANVAS_ID,
|
||||
GRAPHICS_SHADER_ID,
|
||||
GRAPHICS_MESH_ID,
|
||||
GRAPHICS_TEXT_ID,
|
||||
GRAPHICS_VIDEO_ID,
|
||||
private:
|
||||
static uint32_t nextId;
|
||||
void init();
|
||||
|
||||
// Image
|
||||
IMAGE_IMAGE_DATA_ID,
|
||||
IMAGE_COMPRESSED_IMAGE_DATA_ID,
|
||||
bool inited;
|
||||
Type *parent;
|
||||
|
||||
// Joystick
|
||||
JOYSTICK_JOYSTICK_ID,
|
||||
|
||||
// Math
|
||||
MATH_RANDOM_GENERATOR_ID,
|
||||
MATH_BEZIER_CURVE_ID,
|
||||
MATH_COMPRESSED_DATA_ID,
|
||||
|
||||
// Audio
|
||||
AUDIO_SOURCE_ID,
|
||||
|
||||
// Sound
|
||||
SOUND_SOUND_DATA_ID,
|
||||
SOUND_DECODER_ID,
|
||||
|
||||
// Mouse
|
||||
MOUSE_CURSOR_ID,
|
||||
|
||||
// Physics
|
||||
PHYSICS_WORLD_ID,
|
||||
PHYSICS_CONTACT_ID,
|
||||
PHYSICS_BODY_ID,
|
||||
PHYSICS_FIXTURE_ID,
|
||||
PHYSICS_SHAPE_ID,
|
||||
PHYSICS_CIRCLE_SHAPE_ID,
|
||||
PHYSICS_POLYGON_SHAPE_ID,
|
||||
PHYSICS_EDGE_SHAPE_ID,
|
||||
PHYSICS_CHAIN_SHAPE_ID,
|
||||
PHYSICS_JOINT_ID,
|
||||
PHYSICS_MOUSE_JOINT_ID,
|
||||
PHYSICS_DISTANCE_JOINT_ID,
|
||||
PHYSICS_PRISMATIC_JOINT_ID,
|
||||
PHYSICS_REVOLUTE_JOINT_ID,
|
||||
PHYSICS_PULLEY_JOINT_ID,
|
||||
PHYSICS_GEAR_JOINT_ID,
|
||||
PHYSICS_FRICTION_JOINT_ID,
|
||||
PHYSICS_WELD_JOINT_ID,
|
||||
PHYSICS_ROPE_JOINT_ID,
|
||||
PHYSICS_WHEEL_JOINT_ID,
|
||||
PHYSICS_MOTOR_JOINT_ID,
|
||||
|
||||
// Thread
|
||||
THREAD_THREAD_ID,
|
||||
THREAD_CHANNEL_ID,
|
||||
|
||||
// Video
|
||||
VIDEO_VIDEO_STREAM_ID,
|
||||
|
||||
// The modules themselves. Only add abstracted modules here.
|
||||
MODULE_FILESYSTEM_ID,
|
||||
MODULE_GRAPHICS_ID,
|
||||
MODULE_IMAGE_ID,
|
||||
MODULE_SOUND_ID,
|
||||
|
||||
// Count the number of bits needed.
|
||||
TYPE_MAX_ENUM
|
||||
uint32_t id;
|
||||
std::bitset<MAX_TYPES> bits;
|
||||
};
|
||||
|
||||
typedef std::bitset<TYPE_MAX_ENUM> TypeBits;
|
||||
|
||||
/**
|
||||
* Array of length TYPE_MAX_ENUM containing the flags for each love Type.
|
||||
**/
|
||||
extern const TypeBits *typeFlags;
|
||||
|
||||
void addTypeName(Type type, const char *name);
|
||||
bool getTypeName(const char *in, Type &out);
|
||||
bool getTypeName(Type in, const char *&out);
|
||||
|
||||
} // love
|
||||
|
||||
#endif // LOVE_TYPES_H
|
||||
|
||||
Reference in New Issue
Block a user