Browse Source

Scene: Moving the scene node now moves the body as well

Panagiotis Christopoulos Charitos 2 weeks ago
parent
commit
3c7e273fc7

+ 28 - 2
AnKi/Importer/GltfImporter.cpp

@@ -245,6 +245,29 @@ static Error getExtra(const ImporterHashMap<CString, ImporterString>& extras, CS
 	return Error::kNone;
 }
 
+static Bool isNodeValid(const cgltf_node& node)
+{
+	if(node.mesh == nullptr)
+	{
+		return false;
+	}
+
+	if(node.mesh->primitives_count == 0)
+	{
+		return false;
+	}
+
+	for(U32 i = 0; i < node.mesh->primitives_count; ++i)
+	{
+		if(node.mesh->primitives[i].material == nullptr)
+		{
+			return false;
+		}
+	}
+
+	return true;
+}
+
 GltfImporter::GltfImporter()
 {
 }
@@ -805,7 +828,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 			const Transform localTrf = Transform(tsl, rot, scale);
 			ANKI_CHECK(writeTransform(parentTrf.combineTransformations(localTrf)));
 		}
-		else
+		else if(isNodeValid(node))
 		{
 			// Mesh+Material node
 
@@ -847,10 +870,13 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 					const ImporterString meshFname = computeMeshResourceFilename(*node.mesh);
 
 					ANKI_CHECK(m_sceneFile.writeText("comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)\n"));
-					ANKI_CHECK(m_sceneFile.writeText("comp:teleportTo(trf:getOrigin(), trf:getRotation())\n"));
 				}
 			}
 		}
+		else
+		{
+			ANKI_IMPORTER_LOGV("Ignoring invalid node: %s", getNodeName(node).cstr());
+		}
 	}
 	else
 	{

+ 3 - 3
AnKi/Resource/ResourceFilesystem.cpp

@@ -432,7 +432,7 @@ Error ResourceFilesystem::addNewPath(CString filepath, const ResourceStringList&
 
 	if(false && m_paths.getSize())
 	{
-		for(const File& s : m_paths.getFront().m_files)
+		for(const FileInfo& s : m_paths.getFront().m_files)
 		{
 			printf("%s\n", s.m_filename.cstr());
 		}
@@ -470,7 +470,7 @@ Error ResourceFilesystem::openFileInternal(const ResourceFilename& filename, Res
 	// Search for the fname in reverse order
 	for(const Path& p : m_paths)
 	{
-		for(const File& fsfile : p.m_files)
+		for(const FileInfo& fsfile : p.m_files)
 		{
 			if(filenameHash != fsfile.m_filenameHash)
 			{
@@ -550,7 +550,7 @@ ResourceString ResourceFilesystem::getFileFullPath(ResourceFilename filename) co
 	Bool found = false;
 	for(const Path& p : m_paths)
 	{
-		for(const File& fsfile : p.m_files)
+		for(const FileInfo& fsfile : p.m_files)
 		{
 			if(filenameHash != fsfile.m_filenameHash)
 			{

+ 3 - 3
AnKi/Resource/ResourceFilesystem.h

@@ -109,7 +109,7 @@ public:
 	{
 		for(const Path& path : m_paths)
 		{
-			for(const File& file : path.m_files)
+			for(const FileInfo& file : path.m_files)
 			{
 				if(func(file.m_filename.toCString()) == FunctorContinue::kStop)
 				{
@@ -136,7 +136,7 @@ public:
 #if !ANKI_TESTS
 private:
 #endif
-	class File
+	class FileInfo
 	{
 	public:
 		ResourceString m_filename;
@@ -146,7 +146,7 @@ private:
 	class Path
 	{
 	public:
-		ResourceDynamicArray<File> m_files; // Files inside the directory.
+		ResourceDynamicArray<FileInfo> m_files; // Files inside the directory.
 		ResourceString m_path; // A directory or an archive.
 		Bool m_isArchive = false;
 		Bool m_isSpecial = false;

+ 25 - 26
AnKi/Scene/Components/BodyComponent.cpp

@@ -25,17 +25,6 @@ BodyComponent::~BodyComponent()
 {
 }
 
-void BodyComponent::teleportTo(Vec3 position, const Mat3& rotation)
-{
-	m_teleportPosition = position;
-	m_teleportedRotation = rotation;
-	m_teleported = true;
-
-	// Set those just to be sure
-	m_node->setLocalOrigin(position);
-	m_node->setLocalRotation(rotation);
-}
-
 Bool BodyComponent::isValid() const
 {
 	return m_shapeType != BodyComponentCollisionShapeType::kFromMeshComponent || (m_mesh.m_meshc && m_mesh.m_meshc->hasMeshResource());
@@ -50,24 +39,34 @@ void BodyComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 		return;
 	}
 
-	const Bool shapeDirty = !m_body.isCreated()
-							|| (m_shapeType == BodyComponentCollisionShapeType::kFromMeshComponent
-								&& m_mesh.m_meshc->getMeshResource().getUuid() != m_mesh.m_meshResourceUuid);
+	// Find if the shape is dirty
+	Bool shapeDirty = false;
+	if(!m_body.isCreated())
+	{
+		shapeDirty = true;
+	}
+
+	if(!shapeDirty
+	   && (m_shapeType == BodyComponentCollisionShapeType::kFromMeshComponent
+		   && m_mesh.m_meshc->getMeshResource().getUuid() != m_mesh.m_meshResourceUuid))
+	{
+		shapeDirty = true;
+	}
+
+	if(!shapeDirty && (info.m_node->isLocalTransformDirty() && info.m_node->getLocalScale() != m_creationScale))
+	{
+		shapeDirty = true;
+	}
+
 	if(shapeDirty)
 	{
+		// Re-create the body
+
 		updated = true;
 
 		PhysicsBodyInitInfo init;
 		init.m_mass = m_mass;
-		if(m_teleported)
-		{
-			init.m_transform = Transform(m_teleportPosition, m_teleportedRotation, m_node->getLocalTransform().getScale().xyz());
-			m_teleported = false; // Cancel teleportation since the body was re-created
-		}
-		else
-		{
-			init.m_transform = m_node->getLocalTransform();
-		}
+		init.m_transform = m_node->getLocalTransform();
 
 		const Bool isStatic = m_mass == 0.0f;
 		if(isStatic)
@@ -104,13 +103,13 @@ void BodyComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
 
 		m_body = PhysicsWorld::getSingleton().newPhysicsBody(init);
 		m_body->setUserData(this);
+		m_creationScale = init.m_transform.getScale().xyz();
 	}
 
-	if(m_teleported)
+	if(info.m_node->isLocalTransformDirty())
 	{
 		updated = true;
-		m_teleported = false;
-		m_body->setPositionAndRotation(m_teleportPosition, m_teleportedRotation);
+		m_body->setPositionAndRotation(info.m_node->getLocalOrigin(), info.m_node->getLocalRotation());
 	}
 
 	U32 version;

+ 3 - 14
AnKi/Scene/Components/BodyComponent.h

@@ -11,13 +11,9 @@
 
 namespace anki {
 
-/// @addtogroup scene
-/// @{
-
-/// @memberof BodyComponent
 enum class BodyComponentCollisionShapeType : U8
 {
-	kFromMeshComponent, ///< Set the collision shape by looking at the MeshComponent's mesh.
+	kFromMeshComponent, // Set the collision shape by looking at the MeshComponent's mesh.
 	kAabb,
 	kSphere,
 
@@ -29,7 +25,7 @@ ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(BodyComponentCollisionShapeType)
 inline constexpr Array<const Char*, U32(BodyComponentCollisionShapeType::kCount)> kBodyComponentCollisionShapeTypeNames = {"Mesh Component", "AABB",
 																														   "Sphere"};
 
-/// Rigid body component.
+// Rigid body component.
 class BodyComponent : public SceneComponent
 {
 	ANKI_SCENE_COMPONENT(BodyComponent)
@@ -112,8 +108,6 @@ public:
 		m_forcePosition = relativePosition;
 	}
 
-	void teleportTo(Vec3 position, const Mat3& rotation);
-
 	SceneNode& getSceneNode()
 	{
 		return *m_node;
@@ -124,6 +118,7 @@ public:
 private:
 	SceneNode* m_node = nullptr;
 	PhysicsBodyPtr m_body;
+	Vec3 m_creationScale = Vec3(0.0f); // Track the scale the body was created with
 
 	PhysicsCollisionShapePtr m_collisionShape;
 
@@ -148,16 +143,11 @@ private:
 
 	F32 m_mass = 0.0f;
 
-	Vec3 m_teleportPosition;
-	Mat3 m_teleportedRotation;
-
 	Vec3 m_force = Vec3(0.0f);
 	Vec3 m_forcePosition = Vec3(0.0f);
 
 	U32 m_transformVersion = 0;
 
-	Bool m_teleported = false;
-
 	BodyComponentCollisionShapeType m_shapeType = BodyComponentCollisionShapeType::kAabb;
 
 	void update(SceneComponentUpdateInfo& info, Bool& updated) override;
@@ -166,6 +156,5 @@ private:
 
 	void cleanup();
 };
-/// @}
 
 } // end namespace anki

+ 5 - 0
AnKi/Scene/SceneNode.h

@@ -390,6 +390,11 @@ public:
 
 	// Returns true if the transform got updated
 	ANKI_INTERNAL Bool updateTransform();
+
+	ANKI_INTERNAL Bool isLocalTransformDirty() const
+	{
+		return m_localTransformDirty;
+	}
 	/// @}
 
 private:

+ 28 - 86
AnKi/Script/Scene.cpp

@@ -40,7 +40,7 @@ static EventManager* getEventManager(lua_State* l)
 
 using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightComponentType = {-7935311710457115582, "LightComponentType", 0, nullptr, nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoLightComponentType = {4532403887317039538, "LightComponentType", 0, nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<LightComponentType>()
@@ -75,7 +75,7 @@ static inline void wrapLightComponentType(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponentCollisionShapeType = {-6452927450529928858, "BodyComponentCollisionShapeType", 0, nullptr,
+LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponentCollisionShapeType = {4470093177538643508, "BodyComponentCollisionShapeType", 0, nullptr,
 																		  nullptr};
 
 template<>
@@ -119,7 +119,7 @@ static inline void wrapBodyComponentCollisionShapeType(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoParticleGeometryType = {-6651421986415273858, "ParticleGeometryType", 0, nullptr, nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoParticleGeometryType = {-3533356577819980855, "ParticleGeometryType", 0, nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ParticleGeometryType>()
@@ -150,7 +150,7 @@ static inline void wrapParticleGeometryType(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoWeakArraySceneNodePtr = {
-	-6570277489760403898, "WeakArraySceneNodePtr", LuaUserData::computeSizeForGarbageCollected<WeakArraySceneNodePtr>(), nullptr, nullptr};
+	2464121244389431688, "WeakArraySceneNodePtr", LuaUserData::computeSizeForGarbageCollected<WeakArraySceneNodePtr>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<WeakArraySceneNodePtr>()
@@ -268,7 +268,7 @@ static inline void wrapWeakArraySceneNodePtr(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightComponent = {-1234985205334974016, "LightComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoLightComponent = {-7431981389325420182, "LightComponent",
 														 LuaUserData::computeSizeForGarbageCollected<LightComponent>(), nullptr, nullptr};
 
 template<>
@@ -879,7 +879,7 @@ static inline void wrapLightComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoDecalComponent = {3572385597973591882, "DecalComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoDecalComponent = {5322848705844839913, "DecalComponent",
 														 LuaUserData::computeSizeForGarbageCollected<DecalComponent>(), nullptr, nullptr};
 
 template<>
@@ -1001,7 +1001,7 @@ static inline void wrapDecalComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLensFlareComponent = {8232163886767182661, "LensFlareComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoLensFlareComponent = {3888123168919468284, "LensFlareComponent",
 															 LuaUserData::computeSizeForGarbageCollected<LensFlareComponent>(), nullptr, nullptr};
 
 template<>
@@ -1164,7 +1164,7 @@ static inline void wrapLensFlareComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponent = {3436372105959746747, "BodyComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoBodyComponent = {-343836415453467876, "BodyComponent",
 														LuaUserData::computeSizeForGarbageCollected<BodyComponent>(), nullptr, nullptr};
 
 template<>
@@ -1403,64 +1403,6 @@ static int wrapBodyComponentgetSphereRadius(lua_State* l)
 	return 0;
 }
 
-/// Pre-wrap method BodyComponent::teleportTo.
-static inline int pwrapBodyComponentteleportTo(lua_State* l)
-{
-	[[maybe_unused]] LuaUserData* ud;
-	[[maybe_unused]] void* voidp;
-	[[maybe_unused]] PtrSize size;
-
-	if(LuaBinder::checkArgsCount(l, 3)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	// Get "this" as "self"
-	if(LuaBinder::checkUserData(l, 1, luaUserDataTypeInfoBodyComponent, ud))
-	{
-		return -1;
-	}
-
-	BodyComponent* self = ud->getData<BodyComponent>();
-
-	// Pop arguments
-	extern LuaUserDataTypeInfo luaUserDataTypeInfoVec3;
-	if(LuaBinder::checkUserData(l, 2, luaUserDataTypeInfoVec3, ud)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	Vec3* iarg0 = ud->getData<Vec3>();
-	Vec3 arg0(*iarg0);
-
-	extern LuaUserDataTypeInfo luaUserDataTypeInfoMat3;
-	if(LuaBinder::checkUserData(l, 3, luaUserDataTypeInfoMat3, ud)) [[unlikely]]
-	{
-		return -1;
-	}
-
-	Mat3* iarg1 = ud->getData<Mat3>();
-	const Mat3& arg1(*iarg1);
-
-	// Call the method
-	self->teleportTo(arg0, arg1);
-
-	return 0;
-}
-
-/// Wrap method BodyComponent::teleportTo.
-static int wrapBodyComponentteleportTo(lua_State* l)
-{
-	int res = pwrapBodyComponentteleportTo(l);
-	if(res >= 0)
-	{
-		return res;
-	}
-
-	lua_error(l);
-	return 0;
-}
-
 /// Wrap class BodyComponent.
 static inline void wrapBodyComponent(lua_State* l)
 {
@@ -1470,11 +1412,10 @@ static inline void wrapBodyComponent(lua_State* l)
 	LuaBinder::pushLuaCFuncMethod(l, "getBoxExtend", wrapBodyComponentgetBoxExtend);
 	LuaBinder::pushLuaCFuncMethod(l, "setSphereRadius", wrapBodyComponentsetSphereRadius);
 	LuaBinder::pushLuaCFuncMethod(l, "getSphereRadius", wrapBodyComponentgetSphereRadius);
-	LuaBinder::pushLuaCFuncMethod(l, "teleportTo", wrapBodyComponentteleportTo);
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoTriggerComponent = {-637235777084362275, "TriggerComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoTriggerComponent = {5096014183680642195, "TriggerComponent",
 														   LuaUserData::computeSizeForGarbageCollected<TriggerComponent>(), nullptr, nullptr};
 
 template<>
@@ -1588,7 +1529,7 @@ static inline void wrapTriggerComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoFogDensityComponent = {-4092288911858199348, "FogDensityComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoFogDensityComponent = {-7466471661958614833, "FogDensityComponent",
 															  LuaUserData::computeSizeForGarbageCollected<FogDensityComponent>(), nullptr, nullptr};
 
 template<>
@@ -1694,7 +1635,7 @@ static inline void wrapFogDensityComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoCameraComponent = {-6027153626166735474, "CameraComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoCameraComponent = {-3216155222963723411, "CameraComponent",
 														  LuaUserData::computeSizeForGarbageCollected<CameraComponent>(), nullptr, nullptr};
 
 template<>
@@ -1776,7 +1717,7 @@ static inline void wrapCameraComponent(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoGlobalIlluminationProbeComponent = {
-	4359740656525283227, "GlobalIlluminationProbeComponent", LuaUserData::computeSizeForGarbageCollected<GlobalIlluminationProbeComponent>(), nullptr,
+	6884218034315920743, "GlobalIlluminationProbeComponent", LuaUserData::computeSizeForGarbageCollected<GlobalIlluminationProbeComponent>(), nullptr,
 	nullptr};
 
 template<>
@@ -1973,7 +1914,7 @@ static inline void wrapGlobalIlluminationProbeComponent(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoReflectionProbeComponent = {
-	874677183184041293, "ReflectionProbeComponent", LuaUserData::computeSizeForGarbageCollected<ReflectionProbeComponent>(), nullptr, nullptr};
+	1564765767124758652, "ReflectionProbeComponent", LuaUserData::computeSizeForGarbageCollected<ReflectionProbeComponent>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ReflectionProbeComponent>()
@@ -1989,7 +1930,7 @@ static inline void wrapReflectionProbeComponent(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoParticleEmitterComponent = {
-	-7674261632339767656, "ParticleEmitterComponent", LuaUserData::computeSizeForGarbageCollected<ParticleEmitterComponent>(), nullptr, nullptr};
+	7763800148178987573, "ParticleEmitterComponent", LuaUserData::computeSizeForGarbageCollected<ParticleEmitterComponent>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ParticleEmitterComponent>()
@@ -2052,7 +1993,7 @@ static inline void wrapParticleEmitterComponent(lua_State* l)
 }
 
 LuaUserDataTypeInfo luaUserDataTypeInfoParticleEmitter2Component = {
-	4026385621985606641, "ParticleEmitter2Component", LuaUserData::computeSizeForGarbageCollected<ParticleEmitter2Component>(), nullptr, nullptr};
+	-2778563867772111510, "ParticleEmitter2Component", LuaUserData::computeSizeForGarbageCollected<ParticleEmitter2Component>(), nullptr, nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<ParticleEmitter2Component>()
@@ -2268,7 +2209,7 @@ static inline void wrapParticleEmitter2Component(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoMeshComponent = {765718402160253406, "MeshComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoMeshComponent = {-7868945406240496972, "MeshComponent",
 														LuaUserData::computeSizeForGarbageCollected<MeshComponent>(), nullptr, nullptr};
 
 template<>
@@ -2338,7 +2279,7 @@ static inline void wrapMeshComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoMaterialComponent = {-2632604496657572041, "MaterialComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoMaterialComponent = {-5004656681018537886, "MaterialComponent",
 															LuaUserData::computeSizeForGarbageCollected<MaterialComponent>(), nullptr, nullptr};
 
 template<>
@@ -2462,7 +2403,7 @@ static inline void wrapMaterialComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSkinComponent = {-7843347177782249556, "SkinComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoSkinComponent = {4623458381248132711, "SkinComponent",
 														LuaUserData::computeSizeForGarbageCollected<SkinComponent>(), nullptr, nullptr};
 
 template<>
@@ -2532,7 +2473,7 @@ static inline void wrapSkinComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSkyboxComponent = {7263075652224327197, "SkyboxComponent",
+LuaUserDataTypeInfo luaUserDataTypeInfoSkyboxComponent = {8671147433215706849, "SkyboxComponent",
 														  LuaUserData::computeSizeForGarbageCollected<SkyboxComponent>(), nullptr, nullptr};
 
 template<>
@@ -3023,7 +2964,7 @@ static inline void wrapSkyboxComponent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSceneNode = {708885366167547571, "SceneNode", LuaUserData::computeSizeForGarbageCollected<SceneNode>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoSceneNode = {-7535874578005667884, "SceneNode", LuaUserData::computeSizeForGarbageCollected<SceneNode>(),
 													nullptr, nullptr};
 
 template<>
@@ -5019,7 +4960,7 @@ static inline void wrapSceneNode(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoSceneGraph = {-4485856384874379004, "SceneGraph", LuaUserData::computeSizeForGarbageCollected<SceneGraph>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoSceneGraph = {8155951631986580025, "SceneGraph", LuaUserData::computeSizeForGarbageCollected<SceneGraph>(),
 													 nullptr, nullptr};
 
 template<>
@@ -5205,7 +5146,8 @@ static inline void wrapSceneGraph(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoEvent = {7902328748119275930, "Event", LuaUserData::computeSizeForGarbageCollected<Event>(), nullptr, nullptr};
+LuaUserDataTypeInfo luaUserDataTypeInfoEvent = {-7046006180812006934, "Event", LuaUserData::computeSizeForGarbageCollected<Event>(), nullptr,
+												nullptr};
 
 template<>
 const LuaUserDataTypeInfo& LuaUserData::getDataTypeInfoFor<Event>()
@@ -5269,7 +5211,7 @@ static inline void wrapEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoLightEvent = {-8216857979350950798, "LightEvent", LuaUserData::computeSizeForGarbageCollected<LightEvent>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoLightEvent = {6622282419558863425, "LightEvent", LuaUserData::computeSizeForGarbageCollected<LightEvent>(),
 													 nullptr, nullptr};
 
 template<>
@@ -5388,7 +5330,7 @@ static inline void wrapLightEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoScriptEvent = {-8576621386868305190, "ScriptEvent", LuaUserData::computeSizeForGarbageCollected<ScriptEvent>(),
+LuaUserDataTypeInfo luaUserDataTypeInfoScriptEvent = {-7547155634778058128, "ScriptEvent", LuaUserData::computeSizeForGarbageCollected<ScriptEvent>(),
 													  nullptr, nullptr};
 
 template<>
@@ -5404,7 +5346,7 @@ static inline void wrapScriptEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoJitterMoveEvent = {4518035724113084530, "JitterMoveEvent",
+LuaUserDataTypeInfo luaUserDataTypeInfoJitterMoveEvent = {7851684185082215378, "JitterMoveEvent",
 														  LuaUserData::computeSizeForGarbageCollected<JitterMoveEvent>(), nullptr, nullptr};
 
 template<>
@@ -5479,7 +5421,7 @@ static inline void wrapJitterMoveEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoAnimationEvent = {7005396797961362166, "AnimationEvent",
+LuaUserDataTypeInfo luaUserDataTypeInfoAnimationEvent = {-2174497549954687122, "AnimationEvent",
 														 LuaUserData::computeSizeForGarbageCollected<AnimationEvent>(), nullptr, nullptr};
 
 template<>
@@ -5495,7 +5437,7 @@ static inline void wrapAnimationEvent(lua_State* l)
 	lua_settop(l, 0);
 }
 
-LuaUserDataTypeInfo luaUserDataTypeInfoEventManager = {-731589689497747375, "EventManager",
+LuaUserDataTypeInfo luaUserDataTypeInfoEventManager = {7361045909507297608, "EventManager",
 													   LuaUserData::computeSizeForGarbageCollected<EventManager>(), nullptr, nullptr};
 
 template<>

+ 0 - 6
AnKi/Script/Scene.xml

@@ -196,12 +196,6 @@ using WeakArraySceneNodePtr = WeakArray<SceneNode*>;
 				<method name="getSphereRadius">
 					<return>F32</return>
 				</method>
-				<method name="teleportTo">
-					<args>
-						<arg>Vec3</arg>
-						<arg>const Mat3&amp;</arg>
-					</args>
-				</method>
 			</methods>
 		</class>
 

+ 0 - 8
AnKi/Shaders/CMakeLists.txt

@@ -26,14 +26,6 @@ else()
 	set(extra_compiler_args "-DANKI_PLATFORM_MOBILE=0")
 endif()
 
-if(ANKI_SHADER_FULL_PRECISION)
-	message("++ Forcing full shader precision")
-	set(extra_compiler_args ${extra_compiler_args} "-DANKI_FORCE_FULL_FP_PRECISION=1")
-else()
-	message("++ Leaving default shader precision")
-	set(extra_compiler_args ${extra_compiler_args} "-DANKI_FORCE_FULL_FP_PRECISION=0")
-endif()
-
 if(VULKAN)
 	message("++ Compiling shaders in SPIR-V")
 	set(extra_compiler_args ${extra_compiler_args} "-spirv")

+ 2 - 0
AnKi/Util/CVarSet.cpp

@@ -18,7 +18,9 @@ void CVar::validateSetValue() const
 
 void CVarSet::registerCVar(CVar* cvar)
 {
+#if ANKI_ASSERTIONS_ENABLED
 	m_mainThreadHandle = Thread::getCurrentThreadId();
+#endif
 
 	for([[maybe_unused]] CVar& it : m_cvars)
 	{

+ 0 - 58
Samples/PhysicsPlayground/Assets/Scene.lua

@@ -14,7 +14,6 @@ trf:setScale(Vec3.new(1.912920, 1.912920, 1.912920))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Icosphere")
 node:newMeshComponent():setMeshFilename("Assets/Icosphere_834d64c142beaa13.ankimesh")
@@ -28,7 +27,6 @@ trf:setScale(Vec3.new(1.264235, 1.264235, 1.264235))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.019")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -42,7 +40,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.018")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -56,7 +53,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.017")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -70,7 +66,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.016")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -84,7 +79,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.015")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -98,7 +92,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.014")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -112,7 +105,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.013")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -126,7 +118,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.012")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -140,7 +131,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.011")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -154,7 +144,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.010")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -168,7 +157,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.009")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -182,7 +170,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.008")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -196,7 +183,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.007")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -210,7 +196,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.006")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -224,7 +209,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.005")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -238,7 +222,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.004")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -252,7 +235,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.003")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -266,7 +248,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.002")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -280,7 +261,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Suzanne")
 node:newMeshComponent():setMeshFilename("Assets/Suzanne_e3526e1428c0763c.ankimesh")
@@ -294,7 +274,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube")
 node:newMeshComponent():setMeshFilename("Assets/floor_71cbd2644e53ab8c.ankimesh")
@@ -308,7 +287,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Lamp")
 lcomp = node:newLightComponent()
@@ -347,7 +325,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.022")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -361,7 +338,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.023")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -375,7 +351,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.024")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -389,7 +364,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.025")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -403,7 +377,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.026")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -417,7 +390,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.027")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -431,7 +403,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.028")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -445,7 +416,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.029")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -459,7 +429,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.030")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -473,7 +442,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.031")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -487,7 +455,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.032")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -501,7 +468,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.033")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -515,7 +481,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.034")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -529,7 +494,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.035")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -543,7 +507,6 @@ trf:setScale(Vec3.new(0.995130, 0.995130, 0.995130))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.036")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -557,7 +520,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.038")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -571,7 +533,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.039")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -585,7 +546,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.037")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -599,7 +559,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.040")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -613,7 +572,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.041")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -627,7 +585,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.042")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -641,7 +598,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.043")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -655,7 +611,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.044")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -669,7 +624,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.001")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -683,7 +637,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.046")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -697,7 +650,6 @@ trf:setScale(Vec3.new(1.000000, 1.000000, 1.000000))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.049")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -711,7 +663,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.050")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -725,7 +676,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.051")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -739,7 +689,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.052")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -753,7 +702,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.053")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -767,7 +715,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.054")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -781,7 +728,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.047")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -795,7 +741,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.048")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -809,7 +754,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.055")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -823,7 +767,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("Cube.056")
 node:newMeshComponent():setMeshFilename("Assets/wall_87565b500719f7c4.ankimesh")
@@ -837,7 +780,6 @@ trf:setScale(Vec3.new(0.419062, 0.419062, 0.799866))
 node:setLocalTransform(trf)
 comp = node:newBodyComponent()
 comp:setCollisionShapeType(BodyComponentCollisionShapeType.kFromMeshComponent)
-comp:teleportTo(trf:getOrigin(), trf:getRotation())
 
 node = scene:newSceneNode("grenade")
 node:newMeshComponent():setMeshFilename("Assets/MESH_grenade_818651700502e14b.ankimesh")

+ 2 - 1
Samples/PhysicsPlayground/FpsCharacterNode.cpp

@@ -270,7 +270,8 @@ void FpsCharacter::fireGrenade()
 	camTrf.setOrigin(newPos.xyz0());
 
 	SceneNode* grenade = SceneGraph::getSingleton().newSceneNode<GrenadeNode>("");
+	grenade->setLocalOrigin(camTrf.getOrigin().xyz());
+	grenade->setLocalRotation(camTrf.getRotation().getRotationPart());
 	BodyComponent& bodyc = grenade->getFirstComponentOfType<BodyComponent>();
-	bodyc.teleportTo(camTrf.getOrigin().xyz(), camTrf.getRotation().getRotationPart());
 	bodyc.applyForce(camTrf.getRotation().getZAxis().xyz() * -1200.0f, Vec3(0.0f, 0.0f, 0.0f));
 }

+ 5 - 4
Samples/PhysicsPlayground/Main.cpp

@@ -53,7 +53,7 @@ Error MyApp::sampleExtraInit()
 		BodyComponent* bodyc = base->newComponent<BodyComponent>();
 		bodyc->setBoxExtend(Vec3(0.1f));
 		bodyc->setCollisionShapeType(BodyComponentCollisionShapeType::kAabb);
-		bodyc->teleportTo(Vec3(-0.0f, 5.0f, -3.0f), Mat3::getIdentity());
+		base->setLocalOrigin(Vec3(-0.0f, 5.0f, -3.0f));
 
 		SceneNode* joint = SceneGraph::getSingleton().newSceneNode<SceneNode>("hinge");
 		JointComponent* jointc = joint->newComponent<JointComponent>();
@@ -70,8 +70,8 @@ Error MyApp::sampleExtraInit()
 
 		bodyc = monkey->newComponent<BodyComponent>();
 		bodyc->setCollisionShapeType(BodyComponentCollisionShapeType::kFromMeshComponent);
-		bodyc->teleportTo(Vec3(-0.0f, 4.8f - height / 2.0f, -3.0f), Mat3::getIdentity());
 		bodyc->setMass(2.0f);
+		monkey->setLocalOrigin(Vec3(-0.0f, 4.8f - height / 2.0f, -3.0f));
 
 		joint->addChild(monkey);
 	}
@@ -87,7 +87,7 @@ Error MyApp::sampleExtraInit()
 		BodyComponent* bodyc = base->newComponent<BodyComponent>();
 		bodyc->setBoxExtend(Vec3(0.1f));
 		bodyc->setCollisionShapeType(BodyComponentCollisionShapeType::kAabb);
-		bodyc->teleportTo(trf.getOrigin().xyz(), trf.getRotation().getRotationPart());
+		base->setLocalOrigin(trf.getOrigin().xyz());
 
 		trf.setOrigin(trf.getOrigin() - Vec4(0.0f, 0.5f, 0.0f, 0.0f));
 
@@ -111,9 +111,10 @@ Error MyApp::sampleExtraInit()
 
 			BodyComponent* bodyc = monkey->newComponent<BodyComponent>();
 			bodyc->setCollisionShapeType(BodyComponentCollisionShapeType::kFromMeshComponent);
-			bodyc->teleportTo(trf.getOrigin().xyz(), trf.getRotation().getRotationPart());
 			bodyc->setMass(1.0f);
 			joint->addChild(monkey);
+			monkey->setLocalOrigin(trf.getOrigin().xyz());
+			monkey->setLocalRotation(trf.getRotation().getRotationPart());
 
 			trf.setOrigin(trf.getOrigin() - Vec4(0.0f, height / 2.0f + 0.1f, 0.0f, 0.0f));
 

+ 1 - 1
Tests/Gr/Gr.cpp

@@ -1220,7 +1220,7 @@ static void drawOffscreenDrawcalls([[maybe_unused]] GrManager& gr, ShaderProgram
 }
 #endif
 
-static void drawOffscreen(GrManager& gr)
+static void drawOffscreen([[maybe_unused]] GrManager& gr)
 {
 #if 0
 	//