diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index 5f5984d33..82a277ec5 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -1458,7 +1458,7 @@ void EditorComponent::Update(float dt) for (size_t i = 0; i < count; ++i) { wiScene::PickResult picked; - picked.entity = scene.Entity_Serialize(clipboard, INVALID_ENTITY, wiRandom::getRandom(1, INT_MAX), false); + picked.entity = scene.Entity_Serialize(clipboard, INVALID_ENTITY, CreateEntity(), false); AddSelected(picked); } } @@ -1486,7 +1486,7 @@ void EditorComponent::Update(float dt) clipboard >> count; for (size_t i = 0; i < count; ++i) { - Entity entity = scene.Entity_Serialize(clipboard, INVALID_ENTITY, wiRandom::getRandom(1, INT_MAX), false); + Entity entity = scene.Entity_Serialize(clipboard, INVALID_ENTITY, CreateEntity(), false); TransformComponent* transform = scene.transforms.GetComponent(entity); if (transform != nullptr) { diff --git a/WickedEngine/BULLET/BulletCollision/CollisionDispatch/btCollisionObject.h b/WickedEngine/BULLET/BulletCollision/CollisionDispatch/btCollisionObject.h index 89cad1682..7f9508ce5 100644 --- a/WickedEngine/BULLET/BulletCollision/CollisionDispatch/btCollisionObject.h +++ b/WickedEngine/BULLET/BulletCollision/CollisionDispatch/btCollisionObject.h @@ -94,8 +94,8 @@ protected: ///users can point to their objects, m_userPointer is not used by Bullet, see setUserPointer/getUserPointer union { - void* m_userObjectPointer; - int m_userIndex; + void* m_userObjectPointer; + long long m_userIndex; }; ///time of impact calculation @@ -448,7 +448,7 @@ public: return m_userObjectPointer; } - int getUserIndex() const + long long getUserIndex() const { return m_userIndex; } @@ -459,7 +459,7 @@ public: } ///users can point to their objects, userPointer is not used by Bullet - void setUserIndex(int index) + void setUserIndex(long long index) { m_userIndex = index; } diff --git a/WickedEngine/wiECS.h b/WickedEngine/wiECS.h index 116ad7bf5..855aaf30d 100644 --- a/WickedEngine/wiECS.h +++ b/WickedEngine/wiECS.h @@ -3,6 +3,7 @@ #include "wiArchive.h" #include "wiRandom.h" +#include "wiHelper.h" #include #include @@ -11,23 +12,23 @@ namespace wiECS { - typedef uint32_t Entity; + using Entity = uint64_t; static const Entity INVALID_ENTITY = 0; // Runtime can create a new entity with this inline Entity CreateEntity() { - return wiRandom::getRandom(1, INT_MAX); + return wiRandom::getRandom(INVALID_ENTITY + 1, ~0ull); } // This is the safe way to serialize an entity - // seed : ensures that entity will be unique after loading (specify seed = 0 to leave entity as-is) - inline void SerializeEntity(wiArchive& archive, Entity& entity, uint32_t seed) + // seed : ensures that entity will be unique after loading (specify seed = INVALID_ENTITY to leave entity as-is) + inline void SerializeEntity(wiArchive& archive, Entity& entity, Entity seed) { if (archive.IsReadMode()) { archive >> entity; if (entity != INVALID_ENTITY && seed > 0) { - entity = ((entity << 1) ^ seed) >> 1; + wiHelper::hash_combine(entity, seed); } } else @@ -90,7 +91,7 @@ namespace wiECS // Read/Write everything to an archive depending on the archive state // seed: needed when serializing from disk which might cause discrepancy in entity uniqueness // propagateSeedDeep: Components can have Entity references inside them, should the seed be propageted to those too? - inline void Serialize(wiArchive& archive, uint32_t seed = 0, bool propagateSeedDeep = true) + inline void Serialize(wiArchive& archive, Entity seed = INVALID_ENTITY, bool propagateSeedDeep = true) { if (archive.IsReadMode()) { diff --git a/WickedEngine/wiEmittedParticle.cpp b/WickedEngine/wiEmittedParticle.cpp index 4e0c63a1f..2853c07e0 100644 --- a/WickedEngine/wiEmittedParticle.cpp +++ b/WickedEngine/wiEmittedParticle.cpp @@ -731,7 +731,7 @@ void wiEmittedParticle::Initialize() } -void wiEmittedParticle::Serialize(wiArchive& archive, uint32_t seed) +void wiEmittedParticle::Serialize(wiArchive& archive, wiECS::Entity seed) { if (archive.IsReadMode()) { diff --git a/WickedEngine/wiEmittedParticle.h b/WickedEngine/wiEmittedParticle.h index 9b2e8feee..126dae034 100644 --- a/WickedEngine/wiEmittedParticle.h +++ b/WickedEngine/wiEmittedParticle.h @@ -120,7 +120,7 @@ public: inline void SetSPHEnabled(bool value) { if (value) { _flags |= SPH_FLUIDSIMULATION; } else { _flags &= ~SPH_FLUIDSIMULATION; } } inline void SetVolumeEnabled(bool value) { if (value) { _flags |= HAS_VOLUME; } else { _flags &= ~HAS_VOLUME; } } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); static void LoadShaders(); static void Initialize(); diff --git a/WickedEngine/wiHairParticle.cpp b/WickedEngine/wiHairParticle.cpp index cc0df93a7..41536cd06 100644 --- a/WickedEngine/wiHairParticle.cpp +++ b/WickedEngine/wiHairParticle.cpp @@ -245,7 +245,7 @@ void wiHairParticle::Draw(const CameraComponent& camera, const MaterialComponent } -void wiHairParticle::Serialize(wiArchive& archive, uint32_t seed) +void wiHairParticle::Serialize(wiArchive& archive, wiECS::Entity seed) { if (archive.IsReadMode()) { diff --git a/WickedEngine/wiHairParticle.h b/WickedEngine/wiHairParticle.h index fbfe99997..f086df156 100644 --- a/WickedEngine/wiHairParticle.h +++ b/WickedEngine/wiHairParticle.h @@ -59,7 +59,7 @@ public: AABB aabb; std::vector indices; // it is dependent on vertex_lengths and contains triangles with non-zero lengths - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); static void LoadShaders(); static void Initialize(); diff --git a/WickedEngine/wiIntersect.cpp b/WickedEngine/wiIntersect.cpp index f1eae2a4b..0f5316eaa 100644 --- a/WickedEngine/wiIntersect.cpp +++ b/WickedEngine/wiIntersect.cpp @@ -162,7 +162,7 @@ AABB AABB::Merge(const AABB& a, const AABB& b) { return AABB(wiMath::Min(a.getMin(), b.getMin()), wiMath::Max(a.getMax(), b.getMax())); } -void AABB::Serialize(wiArchive& archive, uint32_t seed) +void AABB::Serialize(wiArchive& archive, wiECS::Entity seed) { if (archive.IsReadMode()) { diff --git a/WickedEngine/wiIntersect.h b/WickedEngine/wiIntersect.h index 8d3b081ad..1f2c4a580 100644 --- a/WickedEngine/wiIntersect.h +++ b/WickedEngine/wiIntersect.h @@ -56,7 +56,7 @@ struct AABB return XMFLOAT3(0, 0, 0); } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct SPHERE { diff --git a/WickedEngine/wiPhysicsEngine_Bullet.cpp b/WickedEngine/wiPhysicsEngine_Bullet.cpp index 4dea14319..69b6e2119 100644 --- a/WickedEngine/wiPhysicsEngine_Bullet.cpp +++ b/WickedEngine/wiPhysicsEngine_Bullet.cpp @@ -171,7 +171,7 @@ namespace wiPhysicsEngine //rbInfo.m_angularDamping = physicscomponent.damping; btRigidBody* rigidbody = new btRigidBody(rbInfo); - rigidbody->setUserIndex(*(int*)&entity); + rigidbody->setUserIndex(entity); if (physicscomponent.IsKinematic()) { @@ -230,7 +230,7 @@ namespace wiPhysicsEngine if (softbody) { - softbody->setUserIndex(*(int*)&entity); + softbody->setUserIndex(entity); //btSoftBody::Material* pm = softbody->appendMaterial(); btSoftBody::Material* pm = softbody->m_materials[0]; @@ -418,8 +418,7 @@ namespace wiPhysicsEngine for (int i = 0; i < dynamicsWorld->getCollisionObjectArray().size(); ++i) { btCollisionObject* collisionobject = dynamicsWorld->getCollisionObjectArray()[i]; - int userIndex = collisionobject->getUserIndex(); - Entity entity = *(Entity*)&userIndex; + Entity entity = (Entity)collisionobject->getUserIndex(); btRigidBody* rigidbody = btRigidBody::upcast(collisionobject); if (rigidbody != nullptr) diff --git a/WickedEngine/wiRandom.cpp b/WickedEngine/wiRandom.cpp index 2865b9fb0..8862510a6 100644 --- a/WickedEngine/wiRandom.cpp +++ b/WickedEngine/wiRandom.cpp @@ -15,4 +15,24 @@ namespace wiRandom { return getRandom(0, maxValue); } + + uint32_t wiRandom::getRandom(uint32_t minValue, uint32_t maxValue) + { + std::uniform_int_distribution distr(minValue, maxValue); + return distr(generator); + } + uint32_t wiRandom::getRandom(uint32_t maxValue) + { + return getRandom(0u, maxValue); + } + + uint64_t wiRandom::getRandom(uint64_t minValue, uint64_t maxValue) + { + std::uniform_int_distribution distr(minValue, maxValue); + return distr(generator); + } + uint64_t wiRandom::getRandom(uint64_t maxValue) + { + return getRandom(0ull, maxValue); + } } diff --git a/WickedEngine/wiRandom.h b/WickedEngine/wiRandom.h index b1502a2ab..fc9a3b9bc 100644 --- a/WickedEngine/wiRandom.h +++ b/WickedEngine/wiRandom.h @@ -1,8 +1,16 @@ #pragma once +#include + namespace wiRandom { int getRandom(int minValue, int maxValue); int getRandom(int maxValue); + + uint32_t getRandom(uint32_t minValue, uint32_t maxValue); + uint32_t getRandom(uint32_t maxValue); + + uint64_t getRandom(uint64_t minValue, uint64_t maxValue); + uint64_t getRandom(uint64_t maxValue); }; diff --git a/WickedEngine/wiRenderer_BindLua.cpp b/WickedEngine/wiRenderer_BindLua.cpp index 2d6ac296b..a1cefdcdf 100644 --- a/WickedEngine/wiRenderer_BindLua.cpp +++ b/WickedEngine/wiRenderer_BindLua.cpp @@ -85,7 +85,7 @@ namespace wiRenderer_BindLua int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); wiRenderer::AttachCamera(entity); } else diff --git a/WickedEngine/wiScene.cpp b/WickedEngine/wiScene.cpp index ca8a0e91e..29ebe22db 100644 --- a/WickedEngine/wiScene.cpp +++ b/WickedEngine/wiScene.cpp @@ -1278,8 +1278,7 @@ namespace wiScene // Then deserialize with a unique seed: archive.SetReadModeAndResetPos(true); - uint32_t seed = wiRandom::getRandom(1, INT_MAX); - return Entity_Serialize(archive, entity, seed, false); + return Entity_Serialize(archive, entity, CreateEntity(), false); } Entity Scene::Entity_CreateMaterial( const std::string& name diff --git a/WickedEngine/wiScene.h b/WickedEngine/wiScene.h index c818c4014..2b311b3f5 100644 --- a/WickedEngine/wiScene.h +++ b/WickedEngine/wiScene.h @@ -29,7 +29,7 @@ namespace wiScene inline void operator=(std::string&& str) { name = std::move(str); } inline bool operator==(const std::string& str) const { return name.compare(str) == 0; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct LayerComponent @@ -38,7 +38,7 @@ namespace wiScene inline uint32_t GetLayerMask() const { return layerMask; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct TransformComponent @@ -83,7 +83,7 @@ namespace wiScene void Lerp(const TransformComponent& a, const TransformComponent& b, float t); void CatmullRom(const TransformComponent& a, const TransformComponent& b, const TransformComponent& c, const TransformComponent& d, float t); - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct PreviousFrameTransformComponent @@ -91,7 +91,7 @@ namespace wiScene // Non-serialized attributes: XMFLOAT4X4 world_prev; - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct HierarchyComponent @@ -99,7 +99,7 @@ namespace wiScene wiECS::Entity parentID = wiECS::INVALID_ENTITY; uint32_t layerMask_bind; // saved child layermask at the time of binding - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct MaterialComponent @@ -240,7 +240,7 @@ namespace wiScene ShaderMaterial CreateShaderMaterial() const; - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct MeshComponent @@ -329,7 +329,7 @@ namespace wiScene void RecenterToBottom(); SPHERE GetBoundingSphere() const; - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); struct Vertex_POS @@ -468,7 +468,7 @@ namespace wiScene inline void SetDirty(bool value = true) { if (value) { _flags |= DIRTY; } else { _flags &= ~DIRTY; } } inline bool IsDirty() const { return _flags & DIRTY; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct ObjectComponent @@ -555,7 +555,7 @@ namespace wiScene void SaveLightmap(); wiGraphics::FORMAT GetLightmapFormat(); - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct RigidBodyPhysicsComponent @@ -592,7 +592,7 @@ namespace wiScene inline bool IsDisableDeactivation() const { return _flags & DISABLE_DEACTIVATION; } inline bool IsKinematic() const { return _flags & KINEMATIC; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct SoftBodyPhysicsComponent @@ -625,7 +625,7 @@ namespace wiScene // Create physics represenation of graphics mesh void CreateFromMesh(const MeshComponent& mesh); - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct ArmatureComponent @@ -669,7 +669,7 @@ namespace wiScene std::vector boneData; wiGraphics::GPUBuffer boneBuffer; - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct LightComponent @@ -737,7 +737,7 @@ namespace wiScene } inline LightType GetType() const { return type; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct CameraComponent @@ -787,7 +787,7 @@ namespace wiScene inline bool IsDirty() const { return _flags & DIRTY; } inline bool IsCustomProjectionEnabled() const { return _flags & CUSTOM_PROJECTION; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct EnvironmentProbeComponent @@ -812,7 +812,7 @@ namespace wiScene inline bool IsDirty() const { return _flags & DIRTY; } inline bool IsRealTime() const { return _flags & REALTIME; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct ForceFieldComponent @@ -834,7 +834,7 @@ namespace wiScene inline float GetRange() const { return range_global; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct DecalComponent @@ -859,7 +859,7 @@ namespace wiScene inline float GetOpacity() const { return color.w; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct AnimationComponent @@ -928,7 +928,7 @@ namespace wiScene inline void Stop() { Pause(); timer = 0.0f; } inline void SetLooped(bool value = true) { if (value) { _flags |= LOOPED; } else { _flags &= ~LOOPED; } } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct WeatherComponent @@ -995,7 +995,7 @@ namespace wiScene std::string skyMapName; std::shared_ptr skyMap; - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct SoundComponent @@ -1020,7 +1020,7 @@ namespace wiScene inline void Stop() { _flags &= ~PLAYING; } inline void SetLooped(bool value = true) { if (value) { _flags |= LOOPED; } else { _flags &= ~LOOPED; } } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct InverseKinematicsComponent @@ -1039,7 +1039,7 @@ namespace wiScene inline void SetDisabled(bool value = true) { if (value) { _flags |= DISABLED; } else { _flags &= ~DISABLED; } } inline bool IsDisabled() const { return _flags & DISABLED; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct SpringComponent @@ -1072,7 +1072,7 @@ namespace wiScene inline bool IsStretchEnabled() const { return _flags & STRETCH_ENABLED; } inline bool IsGravityEnabled() const { return _flags & GRAVITY_ENABLED; } - void Serialize(wiArchive& archive, uint32_t seed = 0); + void Serialize(wiArchive& archive, wiECS::Entity seed = wiECS::INVALID_ENTITY); }; struct Scene @@ -1126,10 +1126,10 @@ namespace wiScene wiECS::Entity Entity_Duplicate(wiECS::Entity entity); // Serializes entity and all of its components to archive: // You can specify entity = INVALID_ENTITY when the entity needs to be created from archive - // You can specify seed = 0 when the archive is guaranteed to be storing persistent and unique entities + // You can specify seed = INVALID_ENTITY when the archive is guaranteed to be storing persistent and unique entities // propagateDeepSeed : request that entity references inside components should be seeded as well // Returns either the new entity that was read, or the original entity that was written - wiECS::Entity Entity_Serialize(wiArchive& archive, wiECS::Entity entity = wiECS::INVALID_ENTITY, uint32_t seed = 0, bool propagateSeedDeep = true); + wiECS::Entity Entity_Serialize(wiArchive& archive, wiECS::Entity entity = wiECS::INVALID_ENTITY, wiECS::Entity seed = wiECS::INVALID_ENTITY, bool propagateSeedDeep = true); wiECS::Entity Entity_CreateMaterial( const std::string& name diff --git a/WickedEngine/wiScene_BindLua.cpp b/WickedEngine/wiScene_BindLua.cpp index 121178d93..3cee76cb9 100644 --- a/WickedEngine/wiScene_BindLua.cpp +++ b/WickedEngine/wiScene_BindLua.cpp @@ -17,7 +17,7 @@ namespace wiScene_BindLua int CreateEntity_BindLua(lua_State* L) { Entity entity = CreateEntity(); - wiLua::SSetInt(L, (int)entity); + wiLua::SSetLongLong(L, entity); return 1; } @@ -52,7 +52,7 @@ int LoadModel(lua_State* L) } } Entity root = wiScene::LoadModel(*custom_scene->scene, fileName, transform, true); - wiLua::SSetInt(L, int(root)); + wiLua::SSetLongLong(L, root); return 1; } else @@ -79,7 +79,7 @@ int LoadModel(lua_State* L) } } Entity root = wiScene::LoadModel(fileName, transform, true); - wiLua::SSetInt(L, int(root)); + wiLua::SSetLongLong(L, root); return 1; } } @@ -123,7 +123,7 @@ int Pick(lua_State* L) } } auto& pick = wiScene::Pick(ray->ray, renderTypeMask, layerMask, *scene); - wiLua::SSetInt(L, (int)pick.entity); + wiLua::SSetLongLong(L, pick.entity); Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.position))); Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.normal))); wiLua::SSetFloat(L, pick.distance); @@ -173,7 +173,7 @@ int SceneIntersectSphere(lua_State* L) } } auto& pick = wiScene::SceneIntersectSphere(sphere->sphere, renderTypeMask, layerMask, *scene); - wiLua::SSetInt(L, (int)pick.entity); + wiLua::SSetLongLong(L, pick.entity); Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.position))); Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.normal))); wiLua::SSetFloat(L, pick.depth); @@ -223,7 +223,7 @@ int SceneIntersectCapsule(lua_State* L) } } auto& pick = wiScene::SceneIntersectCapsule(capsule->capsule, renderTypeMask, layerMask, *scene); - wiLua::SSetInt(L, (int)pick.entity); + wiLua::SSetLongLong(L, pick.entity); Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.position))); Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.normal))); wiLua::SSetFloat(L, pick.depth); @@ -414,7 +414,7 @@ int Scene_BindLua::Entity_FindByName(lua_State* L) Entity entity = scene->Entity_FindByName(name); - wiLua::SSetInt(L, (int)entity); + wiLua::SSetLongLong(L, entity); return 1; } else @@ -428,7 +428,7 @@ int Scene_BindLua::Entity_Remove(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); scene->Entity_Remove(entity); } @@ -443,11 +443,11 @@ int Scene_BindLua::Entity_Duplicate(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); Entity clone = scene->Entity_Duplicate(entity); - wiLua::SSetInt(L, (int)clone); + wiLua::SSetLongLong(L, clone); return 1; } else @@ -462,7 +462,7 @@ int Scene_BindLua::Component_CreateName(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); NameComponent& component = scene->names.Create(entity); Luna::push(L, new NameComponent_BindLua(&component)); @@ -479,7 +479,7 @@ int Scene_BindLua::Component_CreateLayer(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); LayerComponent& component = scene->layers.Create(entity); Luna::push(L, new LayerComponent_BindLua(&component)); @@ -496,7 +496,7 @@ int Scene_BindLua::Component_CreateTransform(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); TransformComponent& component = scene->transforms.Create(entity); Luna::push(L, new TransformComponent_BindLua(&component)); @@ -513,7 +513,7 @@ int Scene_BindLua::Component_CreateLight(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); scene->aabb_lights.Create(entity); @@ -532,7 +532,7 @@ int Scene_BindLua::Component_CreateObject(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); scene->aabb_objects.Create(entity); @@ -551,7 +551,7 @@ int Scene_BindLua::Component_CreateInverseKinematics(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); InverseKinematicsComponent& component = scene->inverse_kinematics.Create(entity); Luna::push(L, new InverseKinematicsComponent_BindLua(&component)); @@ -568,7 +568,7 @@ int Scene_BindLua::Component_CreateSpring(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); SpringComponent& component = scene->springs.Create(entity); Luna::push(L, new SpringComponent_BindLua(&component)); @@ -586,7 +586,7 @@ int Scene_BindLua::Component_GetName(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); NameComponent* component = scene->names.GetComponent(entity); if (component == nullptr) @@ -608,7 +608,7 @@ int Scene_BindLua::Component_GetLayer(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); LayerComponent* component = scene->layers.GetComponent(entity); if (component == nullptr) @@ -630,7 +630,7 @@ int Scene_BindLua::Component_GetTransform(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); TransformComponent* component = scene->transforms.GetComponent(entity); if (component == nullptr) @@ -652,7 +652,7 @@ int Scene_BindLua::Component_GetCamera(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); CameraComponent* component = scene->cameras.GetComponent(entity); if (component == nullptr) @@ -674,7 +674,7 @@ int Scene_BindLua::Component_GetAnimation(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); AnimationComponent* component = scene->animations.GetComponent(entity); if (component == nullptr) @@ -696,7 +696,7 @@ int Scene_BindLua::Component_GetMaterial(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); MaterialComponent* component = scene->materials.GetComponent(entity); if (component == nullptr) @@ -718,7 +718,7 @@ int Scene_BindLua::Component_GetEmitter(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); wiEmittedParticle* component = scene->emitters.GetComponent(entity); if (component == nullptr) @@ -740,7 +740,7 @@ int Scene_BindLua::Component_GetLight(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); LightComponent* component = scene->lights.GetComponent(entity); if (component == nullptr) @@ -762,7 +762,7 @@ int Scene_BindLua::Component_GetObject(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); ObjectComponent* component = scene->objects.GetComponent(entity); if (component == nullptr) @@ -784,7 +784,7 @@ int Scene_BindLua::Component_GetInverseKinematics(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); InverseKinematicsComponent* component = scene->inverse_kinematics.GetComponent(entity); if (component == nullptr) @@ -806,7 +806,7 @@ int Scene_BindLua::Component_GetSpring(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); SpringComponent* component = scene->springs.GetComponent(entity); if (component == nullptr) @@ -952,7 +952,7 @@ int Scene_BindLua::Entity_GetNameArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->names.GetCount(); ++i) { - wiLua::SSetInt(L, scene->names.GetEntity(i)); + wiLua::SSetLongLong(L, scene->names.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -963,7 +963,7 @@ int Scene_BindLua::Entity_GetLayerArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->layers.GetCount(); ++i) { - wiLua::SSetInt(L, scene->layers.GetEntity(i)); + wiLua::SSetLongLong(L, scene->layers.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -974,7 +974,7 @@ int Scene_BindLua::Entity_GetTransformArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->transforms.GetCount(); ++i) { - wiLua::SSetInt(L, scene->transforms.GetEntity(i)); + wiLua::SSetLongLong(L, scene->transforms.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -985,7 +985,7 @@ int Scene_BindLua::Entity_GetCameraArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->cameras.GetCount(); ++i) { - wiLua::SSetInt(L, scene->cameras.GetEntity(i)); + wiLua::SSetLongLong(L, scene->cameras.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -996,7 +996,7 @@ int Scene_BindLua::Entity_GetAnimationArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->animations.GetCount(); ++i) { - wiLua::SSetInt(L, scene->animations.GetEntity(i)); + wiLua::SSetLongLong(L, scene->animations.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -1007,7 +1007,7 @@ int Scene_BindLua::Entity_GetMaterialArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->materials.GetCount(); ++i) { - wiLua::SSetInt(L, scene->materials.GetEntity(i)); + wiLua::SSetLongLong(L, scene->materials.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -1018,7 +1018,7 @@ int Scene_BindLua::Entity_GetEmitterArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->emitters.GetCount(); ++i) { - wiLua::SSetInt(L, scene->emitters.GetEntity(i)); + wiLua::SSetLongLong(L, scene->emitters.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -1029,7 +1029,7 @@ int Scene_BindLua::Entity_GetLightArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->lights.GetCount(); ++i) { - wiLua::SSetInt(L, scene->lights.GetEntity(i)); + wiLua::SSetLongLong(L, scene->lights.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -1040,7 +1040,7 @@ int Scene_BindLua::Entity_GetObjectArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->objects.GetCount(); ++i) { - wiLua::SSetInt(L, scene->objects.GetEntity(i)); + wiLua::SSetLongLong(L, scene->objects.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -1051,7 +1051,7 @@ int Scene_BindLua::Entity_GetInverseKinematicsArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->inverse_kinematics.GetCount(); ++i) { - wiLua::SSetInt(L, scene->inverse_kinematics.GetEntity(i)); + wiLua::SSetLongLong(L, scene->inverse_kinematics.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -1062,7 +1062,7 @@ int Scene_BindLua::Entity_GetSpringArray(lua_State* L) int newTable = lua_gettop(L); for (size_t i = 0; i < scene->springs.GetCount(); ++i) { - wiLua::SSetInt(L, scene->springs.GetEntity(i)); + wiLua::SSetLongLong(L, scene->springs.GetEntity(i)); lua_rawseti(L, newTable, lua_Integer(i + 1)); } return 1; @@ -1073,8 +1073,8 @@ int Scene_BindLua::Component_Attach(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 1) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); - Entity parent = (Entity)wiLua::SGetInt(L, 2); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); + Entity parent = (Entity)wiLua::SGetLongLong(L, 2); scene->Component_Attach(entity, parent); } @@ -1089,7 +1089,7 @@ int Scene_BindLua::Component_Detach(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); scene->Component_Detach(entity); } @@ -1104,7 +1104,7 @@ int Scene_BindLua::Component_DetachChildren(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity parent = (Entity)wiLua::SGetInt(L, 1); + Entity parent = (Entity)wiLua::SGetLongLong(L, 1); scene->Component_DetachChildren(parent); } @@ -2218,7 +2218,7 @@ ObjectComponent_BindLua::~ObjectComponent_BindLua() int ObjectComponent_BindLua::GetMeshID(lua_State* L) { - wiLua::SSetInt(L, (int)component->meshID); + wiLua::SSetLongLong(L, component->meshID); return 1; } int ObjectComponent_BindLua::GetColor(lua_State* L) @@ -2237,7 +2237,7 @@ int ObjectComponent_BindLua::SetMeshID(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity meshID = (Entity)wiLua::SGetInt(L, 1); + Entity meshID = (Entity)wiLua::SGetLongLong(L, 1); component->meshID = meshID; } else @@ -2325,7 +2325,7 @@ int InverseKinematicsComponent_BindLua::SetTarget(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - Entity entity = (Entity)wiLua::SGetInt(L, 1); + Entity entity = (Entity)wiLua::SGetLongLong(L, 1); component->target = entity; } else @@ -2378,7 +2378,7 @@ int InverseKinematicsComponent_BindLua::SetDisabled(lua_State* L) } int InverseKinematicsComponent_BindLua::GetTarget(lua_State* L) { - wiLua::SSetInt(L, (int)component->target); + wiLua::SSetLongLong(L, component->target); return 1; } int InverseKinematicsComponent_BindLua::GetChainLength(lua_State* L) diff --git a/WickedEngine/wiScene_Serializers.cpp b/WickedEngine/wiScene_Serializers.cpp index e2dfb5546..5f544f538 100644 --- a/WickedEngine/wiScene_Serializers.cpp +++ b/WickedEngine/wiScene_Serializers.cpp @@ -9,7 +9,7 @@ using namespace wiECS; namespace wiScene { - void NameComponent::Serialize(wiArchive& archive, uint32_t seed) + void NameComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -20,7 +20,7 @@ namespace wiScene archive << name; } } - void LayerComponent::Serialize(wiArchive& archive, uint32_t seed) + void LayerComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -31,7 +31,7 @@ namespace wiScene archive << layerMask; } } - void TransformComponent::Serialize(wiArchive& archive, uint32_t seed) + void TransformComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -51,12 +51,12 @@ namespace wiScene archive << translation_local; } } - void PreviousFrameTransformComponent::Serialize(wiArchive& archive, uint32_t seed) + void PreviousFrameTransformComponent::Serialize(wiArchive& archive, Entity seed) { // NOTHING! We just need a serialize function for this to be able serialize with ComponentManager! // This structure has no persistent state! } - void HierarchyComponent::Serialize(wiArchive& archive, uint32_t seed) + void HierarchyComponent::Serialize(wiArchive& archive, Entity seed) { SerializeEntity(archive, parentID, seed); @@ -74,7 +74,7 @@ namespace wiScene archive << layerMask_bind; } } - void MaterialComponent::Serialize(wiArchive& archive, uint32_t seed) + void MaterialComponent::Serialize(wiArchive& archive, Entity seed) { std::string dir = archive.GetSourceDirectory(); @@ -249,7 +249,7 @@ namespace wiScene } } } - void MeshComponent::Serialize(wiArchive& archive, uint32_t seed) + void MeshComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) @@ -338,7 +338,7 @@ namespace wiScene } } - void ImpostorComponent::Serialize(wiArchive& archive, uint32_t seed) + void ImpostorComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -353,7 +353,7 @@ namespace wiScene archive << swapInDistance; } } - void ObjectComponent::Serialize(wiArchive& archive, uint32_t seed) + void ObjectComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -394,7 +394,7 @@ namespace wiScene } } } - void RigidBodyPhysicsComponent::Serialize(wiArchive& archive, uint32_t seed) + void RigidBodyPhysicsComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -415,7 +415,7 @@ namespace wiScene archive << damping; } } - void SoftBodyPhysicsComponent::Serialize(wiArchive& archive, uint32_t seed) + void SoftBodyPhysicsComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -444,7 +444,7 @@ namespace wiScene archive << weights; } } - void ArmatureComponent::Serialize(wiArchive& archive, uint32_t seed) + void ArmatureComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -492,7 +492,7 @@ namespace wiScene } } } - void LightComponent::Serialize(wiArchive& archive, uint32_t seed) + void LightComponent::Serialize(wiArchive& archive, Entity seed) { std::string dir = archive.GetSourceDirectory(); @@ -563,7 +563,7 @@ namespace wiScene archive << lensFlareNames; } } - void CameraComponent::Serialize(wiArchive& archive, uint32_t seed) + void CameraComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -586,7 +586,7 @@ namespace wiScene archive << fov; } } - void EnvironmentProbeComponent::Serialize(wiArchive& archive, uint32_t seed) + void EnvironmentProbeComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -599,7 +599,7 @@ namespace wiScene archive << _flags; } } - void ForceFieldComponent::Serialize(wiArchive& archive, uint32_t seed) + void ForceFieldComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -616,7 +616,7 @@ namespace wiScene archive << range_local; } } - void DecalComponent::Serialize(wiArchive& archive, uint32_t seed) + void DecalComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -627,7 +627,7 @@ namespace wiScene archive << _flags; } } - void AnimationComponent::Serialize(wiArchive& archive, uint32_t seed) + void AnimationComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -695,7 +695,7 @@ namespace wiScene } } } - void WeatherComponent::Serialize(wiArchive& archive, uint32_t seed) + void WeatherComponent::Serialize(wiArchive& archive, Entity seed) { std::string dir = archive.GetSourceDirectory(); @@ -792,7 +792,7 @@ namespace wiScene } } - void SoundComponent::Serialize(wiArchive& archive, uint32_t seed) + void SoundComponent::Serialize(wiArchive& archive, Entity seed) { std::string dir = archive.GetSourceDirectory(); @@ -828,7 +828,7 @@ namespace wiScene archive << soundinstance.type; } } - void InverseKinematicsComponent::Serialize(wiArchive& archive, uint32_t seed) + void InverseKinematicsComponent::Serialize(wiArchive& archive, Entity seed) { SerializeEntity(archive, target, seed); @@ -845,7 +845,7 @@ namespace wiScene archive << iteration_count; } } - void SpringComponent::Serialize(wiArchive& archive, uint32_t seed) + void SpringComponent::Serialize(wiArchive& archive, Entity seed) { if (archive.IsReadMode()) { @@ -879,7 +879,7 @@ namespace wiScene } // With this we will ensure that serialized entities are unique and persistent across the scene: - uint32_t seed = (uint32_t)wiRandom::getRandom(1, INT_MAX); + Entity seed = CreateEntity(); names.Serialize(archive, seed); layers.Serialize(archive, seed); @@ -921,7 +921,7 @@ namespace wiScene } - Entity Scene::Entity_Serialize(wiArchive& archive, Entity entity, uint32_t seed, bool propagateSeedDeep) + Entity Scene::Entity_Serialize(wiArchive& archive, Entity entity, Entity seed, bool propagateSeedDeep) { SerializeEntity(archive, entity, seed); diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index c781cdbb6..89e11355e 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 40; // minor bug fixes, alterations, refactors, updates - const int revision = 4; + const int revision = 5; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);