Browse Source

Make everything compile

Panagiotis Christopoulos Charitos 2 years ago
parent
commit
2b4890b02d

+ 34 - 39
AnKi/Importer/GltfImporter.cpp

@@ -566,11 +566,10 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 				gpuParticles = true;
 			}
 
-			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:new%sParticleEmitterNode(\"%s\")\n",
-											  (gpuParticles) ? "Gpu" : "", getNodeName(node).cstr()));
+			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
 
-			ANKI_CHECK(m_sceneFile.writeTextf("comp = node:getSceneNodeBase():get%sParticleEmitterComponent()\n",
-											  (gpuParticles) ? "Gpu" : ""));
+			ANKI_CHECK(
+				m_sceneFile.writeTextf("comp = node:new%sParticleEmitterComponent()\n", (gpuParticles) ? "Gpu" : ""));
 			ANKI_CHECK(m_sceneFile.writeTextf("comp:loadParticleEmitterResource(\"%s\")\n", fname.cstr()));
 
 			Transform localTrf;
@@ -582,8 +581,8 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 		{
 			// Atmosphere
 
-			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSkyboxNode(\"%s\")\n", getNodeName(node).cstr()));
-			ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():getSkyboxComponent()\n"));
+			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
+			ANKI_CHECK(m_sceneFile.writeText("comp = node:newSkyboxComponent()\n"));
 
 			if((it = extras.find("skybox_solid_color")) != extras.getEnd())
 			{
@@ -615,7 +614,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 			}
 			else if((it = extras.find("skybox_image")) != extras.getEnd())
 			{
-				ANKI_CHECK(m_sceneFile.writeTextf("comp:setImage(\"%s\")\n", it->cstr()));
+				ANKI_CHECK(m_sceneFile.writeTextf("comp:loadImageResource(\"%s\")\n", it->cstr()));
 			}
 
 			if((it = extras.find("fog_min_density")) != extras.getEnd())
@@ -652,10 +651,9 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 		}
 		else if((it = extras.find("collision")) != extras.getEnd() && (*it == "true" || *it == "1"))
 		{
-			ANKI_CHECK(
-				m_sceneFile.writeTextf("\nnode = scene:newStaticCollisionNode(\"%s\")\n", getNodeName(node).cstr()));
+			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
 
-			ANKI_CHECK(m_sceneFile.writeText("comp = scene:getSceneNodeBase():getBodyComponent()\n"));
+			ANKI_CHECK(m_sceneFile.writeText("comp = scene:newBodyComponent()\n"));
 			const StringRaii meshFname = computeMeshResourceFilename(*node.mesh);
 			ANKI_CHECK(m_sceneFile.writeTextf("comp:loadMeshResource(\"%s%s\")\n", m_rpath.cstr(), meshFname.cstr()));
 
@@ -672,10 +670,9 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 
 			const Vec3 boxSize = scale * 2.0f;
 
-			ANKI_CHECK(
-				m_sceneFile.writeTextf("\nnode = scene:newReflectionProbeNode(\"%s\")\n", getNodeName(node).cstr()));
+			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
 
-			ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():getReflectionProbeComponent()\n"));
+			ANKI_CHECK(m_sceneFile.writeText("comp = node:newReflectionProbeComponent()\n"));
 			ANKI_CHECK(m_sceneFile.writeTextf("comp:setBoxVolumeSize(Vec3.new(%f, %f, %f))\n", boxSize.x(), boxSize.y(),
 											  boxSize.z()));
 
@@ -703,9 +700,8 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 				ANKI_CHECK(it->toNumber(cellSize));
 			}
 
-			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newGlobalIlluminationProbeNode(\"%s\")\n",
-											  getNodeName(node).cstr()));
-			ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():getGlobalIlluminationProbeComponent()\n"));
+			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
+			ANKI_CHECK(m_sceneFile.writeText("comp = node:newGlobalIlluminationProbeComponent()\n"));
 			ANKI_CHECK(m_sceneFile.writeTextf("comp:setBoxVolumeSize(Vec3.new(%f, %f, %f))\n", boxSize.x(), boxSize.y(),
 											  boxSize.z()));
 
@@ -760,19 +756,19 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 				ANKI_CHECK(it->toNumber(specularRougnessMetallicFactor));
 			}
 
-			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newDecalNode(\"%s\")\n", getNodeName(node).cstr()));
-			ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():getDecalComponent()\n"));
+			ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
+			ANKI_CHECK(m_sceneFile.writeText("comp = node:newDecalComponent()\n"));
 			if(diffuseAtlas)
 			{
-				ANKI_CHECK(m_sceneFile.writeTextf("comp:setDiffuseDecal(\"%s\", \"%s\", %f)\n", diffuseAtlas.cstr(),
-												  diffuseSubtexture.cstr(), diffuseFactor));
+				ANKI_CHECK(m_sceneFile.writeTextf("comp:loadDiffuseImageResource(\"%s\", %f)\n", diffuseAtlas.cstr(),
+												  diffuseFactor));
 			}
 
 			if(specularRougnessMetallicAtlas)
 			{
-				ANKI_CHECK(m_sceneFile.writeTextf(
-					"comp:setSpecularRoughnessDecal(\"%s\", \"%s\", %f)\n", specularRougnessMetallicAtlas.cstr(),
-					specularRougnessMetallicSubtexture.cstr(), specularRougnessMetallicFactor));
+				ANKI_CHECK(m_sceneFile.writeTextf("comp:loadRoughnessMetallnessTexture(\"%s\", %f)\n",
+												  specularRougnessMetallicAtlas.cstr(),
+												  specularRougnessMetallicFactor));
 			}
 
 			Vec3 tsl;
@@ -811,10 +807,9 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 
 			if(selfCollision)
 			{
-				ANKI_CHECK(m_sceneFile.writeTextf("node2 = scene:newStaticCollisionNode(\"%s_cl\")\n",
-												  getNodeName(node).cstr()));
+				ANKI_CHECK(m_sceneFile.writeTextf("node = scene:newSceneNode(\"%s_cl\")\n", getNodeName(node).cstr()));
 
-				ANKI_CHECK(m_sceneFile.writeText("comp = node2:getSceneNodeBase():getBodyComponent()\n"));
+				ANKI_CHECK(m_sceneFile.writeText("comp = node:newBodyComponent()\n"));
 
 				const StringRaii meshFname = computeMeshResourceFilename(*node.mesh);
 
@@ -863,7 +858,7 @@ Error GltfImporter::writeTransform(const Transform& trf)
 
 	ANKI_CHECK(m_sceneFile.writeTextf("trf:setScale(%f)\n", trf.getScale()));
 
-	ANKI_CHECK(m_sceneFile.writeText("node:getSceneNodeBase():getMoveComponent():setLocalTransform(trf)\n"));
+	ANKI_CHECK(m_sceneFile.writeText("node:setLocalTransform(trf)\n"));
 
 	return Error::kNone;
 }
@@ -1015,8 +1010,8 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString
 		return Error::kUserData;
 	}
 
-	ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:new%sLightNode(\"%s\")\n", lightTypeStr.cstr(), nodeName.cstr()));
-	ANKI_CHECK(m_sceneFile.writeText("lcomp = node:getSceneNodeBase():getLightComponent()\n"));
+	ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", nodeName.cstr()));
+	ANKI_CHECK(m_sceneFile.writeText("lcomp = node:newLightComponent()\n"));
 
 	Vec3 color(light.color[0], light.color[1], light.color[2]);
 	color *= light.intensity;
@@ -1074,7 +1069,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString
 	auto lensFlaresFname = extras.find("lens_flare");
 	if(lensFlaresFname != extras.getEnd())
 	{
-		ANKI_CHECK(m_sceneFile.writeTextf("lfcomp = node:getSceneNodeBase():getLensFlareComponent()\n"));
+		ANKI_CHECK(m_sceneFile.writeTextf("lfcomp = node:newLensFlareComponent()\n"));
 		ANKI_CHECK(m_sceneFile.writeTextf("lfcomp:loadImageResource(\"%s\")\n", lensFlaresFname->cstr()));
 
 		auto lsSpriteSize = extras.find("lens_flare_first_sprite_size");
@@ -1104,7 +1099,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString
 	auto lightEventFrequency = extras.find("light_event_frequency");
 	if(lightEventIntensity != extras.getEnd() || lightEventFrequency != extras.getEnd())
 	{
-		ANKI_CHECK(m_sceneFile.writeText("event = events:newLightEvent(0.0, -1.0, node:getSceneNodeBase())\n"));
+		ANKI_CHECK(m_sceneFile.writeText("event = events:newLightEvent(0.0, -1.0, node)\n"));
 
 		if(lightEventIntensity != extras.getEnd())
 		{
@@ -1139,11 +1134,11 @@ Error GltfImporter::writeCamera(const cgltf_node& node,
 	const cgltf_camera_perspective& cam = node.camera->data.perspective;
 	ANKI_IMPORTER_LOGV("Importing camera %s", getNodeName(node).cstr());
 
-	ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newPerspectiveCameraNode(\"%s\")\n", getNodeName(node).cstr()));
+	ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
 	ANKI_CHECK(m_sceneFile.writeText("scene:setActiveCameraNode(node:getSceneNodeBase())\n"));
-	ANKI_CHECK(m_sceneFile.writeText("frustumc = node:getSceneNodeBase():getFrustumComponent()\n"));
+	ANKI_CHECK(m_sceneFile.writeText("comp = node:newCameraComponent()\n"));
 
-	ANKI_CHECK(m_sceneFile.writeTextf("frustumc:setPerspective(%f, %f, getMainRenderer():getAspectRatio() * %f, %f)\n",
+	ANKI_CHECK(m_sceneFile.writeTextf("comp:setPerspective(%f, %f, getMainRenderer():getAspectRatio() * %f, %f)\n",
 									  cam.znear, cam.zfar, cam.yfov, cam.yfov));
 
 	return Error::kNone;
@@ -1158,14 +1153,14 @@ Error GltfImporter::writeModelNode(const cgltf_node& node, const HashMapRaii<CSt
 
 	const StringRaii modelFname = computeModelResourceFilename(*node.mesh);
 
-	ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newModelNode(\"%s\")\n", getNodeName(node).cstr()));
-	ANKI_CHECK(m_sceneFile.writeTextf("node:getSceneNodeBase():getModelComponent():loadModelResource(\"%s%s\")\n",
-									  m_rpath.cstr(), modelFname.cstr()));
+	ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneComponent(\"%s\")\n", getNodeName(node).cstr()));
+	ANKI_CHECK(m_sceneFile.writeTextf("node:newModelComponent():loadModelResource(\"%s%s\")\n", m_rpath.cstr(),
+									  modelFname.cstr()));
 
 	if(node.skin)
 	{
-		ANKI_CHECK(m_sceneFile.writeTextf("node:getSceneNodeBase():getSkinComponent():loadSkeletonResource(\"%s%s\")\n",
-										  m_rpath.cstr(), computeSkeletonResourceFilename(*node.skin).cstr()));
+		ANKI_CHECK(m_sceneFile.writeTextf("node:newSkinComponent():loadSkeletonResource(\"%s%s\")\n", m_rpath.cstr(),
+										  computeSkeletonResourceFilename(*node.skin).cstr()));
 	}
 
 	return Error::kNone;

+ 5 - 0
AnKi/Scene/Components/PlayerControllerComponent.h

@@ -31,6 +31,11 @@ public:
 		m_player->moveToPosition(pos);
 	}
 
+	PhysicsPlayerController& getPhysicsPlayerController()
+	{
+		return *m_player;
+	}
+
 private:
 	PhysicsPlayerControllerPtr m_player;
 	Transform m_trf = Transform::getIdentity();

+ 57 - 79
Samples/PhysicsPlayground/Main.cpp

@@ -116,50 +116,45 @@ Error MyApp::sampleExtraInit()
 	if(1)
 	{
 		SceneNode& cam = getSceneGraph().getActiveCameraNode();
-		cam.getFirstComponentOfType<MoveComponent>().setLocalTransform(
-			Transform(Vec4(0.0, 0.0, 5.0, 0.0), Mat3x4::getIdentity(), 1.0));
+		cam.setLocalTransform(Transform(Vec4(0.0, 0.0, 5.0, 0.0), Mat3x4::getIdentity(), 1.0));
 
-		PlayerNode* player;
+		SceneNode* player;
 		ANKI_CHECK(getSceneGraph().newSceneNode("player", player));
-		PlayerControllerComponent& pcomp = player->getFirstComponentOfType<PlayerControllerComponent>();
-		pcomp.moveToPosition(Vec3(0.0f, 2.5f, 0.0f));
-		pcomp.getPhysicsPlayerController()->setMaterialMask(PhysicsMaterialBit::kStaticGeometry);
+		PlayerControllerComponent* playerc = player->newComponent<PlayerControllerComponent>();
+		playerc->moveToPosition(Vec3(0.0f, 2.5f, 0.0f));
+		playerc->getPhysicsPlayerController().setMaterialMask(PhysicsMaterialBit::kStaticGeometry);
 
 		player->addChild(&cam);
 	}
 
 	// Create a body component with joint
 	{
-		ModelNode* monkey;
-		ANKI_CHECK(getSceneGraph().newSceneNode<ModelNode>("monkey_p2p", monkey));
-		ANKI_CHECK(monkey->getFirstComponentOfType<ModelComponent>().loadModelResource(
-			"Assets/Suzanne_dynamic_36043dae41fe12d5.ankimdl"));
-
-		BodyNode* body;
-		ANKI_CHECK(getSceneGraph().newSceneNode<BodyNode>("bmonkey_p2p", body));
-		ANKI_CHECK(body->getFirstComponentOfType<BodyComponent>().loadMeshResource(
-			"Assets/Suzanne_e3526e1428c0763c.ankimesh"));
-		body->getFirstComponentOfType<BodyComponent>().setWorldTransform(
-			Transform(Vec4(-0.0f, 4.0f, -3.0f, 0.0f), Mat3x4::getIdentity(), 1.0f));
-		body->getFirstComponentOfType<BodyComponent>().setMass(2.0f);
-
-		body->addChild(monkey);
-
-		body->getFirstComponentOfType<JointComponent>().newHingeJoint(Vec3(0.2f, 1.0f, 0.0f), Vec3(1, 0, 0));
+		SceneNode* monkey;
+		ANKI_CHECK(getSceneGraph().newSceneNode("monkey_p2p", monkey));
+		ModelComponent* modelc = monkey->newComponent<ModelComponent>();
+		modelc->loadModelResource("Assets/Suzanne_dynamic_36043dae41fe12d5.ankimdl");
+
+		BodyComponent* bodyc = monkey->newComponent<BodyComponent>();
+		bodyc->loadMeshResource("Assets/Suzanne_e3526e1428c0763c.ankimesh");
+		bodyc->teleportTo(Transform(Vec4(-0.0f, 4.0f, -3.0f, 0.0f), Mat3x4::getIdentity(), 1.0f));
+		bodyc->setMass(2.0f);
+
+		JointComponent* jointc = monkey->newComponent<JointComponent>();
+		jointc->newHingeJoint(Vec3(0.2f, 1.0f, 0.0f), Vec3(1, 0, 0));
 	}
 
 	// Create a chain
 	{
 		const U LINKS = 5;
 
-		BodyNode* prevBody = nullptr;
+		SceneNode* prevBody = nullptr;
 		for(U32 i = 0; i < LINKS; ++i)
 		{
-			ModelNode* monkey;
-			ANKI_CHECK(getSceneGraph().newSceneNode<ModelNode>(
+			SceneNode* monkey;
+			ANKI_CHECK(getSceneGraph().newSceneNode(
 				StringRaii(&getMemoryPool()).sprintf("monkey_chain%u", i).toCString(), monkey));
-			ANKI_CHECK(monkey->getFirstComponentOfType<ModelComponent>().loadModelResource(
-				"Assets/Suzanne_dynamic_36043dae41fe12d5.ankimdl"));
+			monkey->newComponent<ModelComponent>()->loadModelResource(
+				"Assets/Suzanne_dynamic_36043dae41fe12d5.ankimdl");
 
 			Transform trf(Vec4(-4.3f, 12.0f, -3.0f, 0.0f), Mat3x4::getIdentity(), 1.0f);
 			trf.getOrigin().y() -= F32(i) * 1.25f;
@@ -167,38 +162,33 @@ Error MyApp::sampleExtraInit()
 
 			// monkey->getFirstComponentOfType<MoveComponent>().setLocalTransform(trf);
 
-			BodyNode* body;
-			ANKI_CHECK(getSceneGraph().newSceneNode<BodyNode>(
-				StringRaii(&getMemoryPool()).sprintf("bmonkey_chain%u", i).toCString(), body));
-			ANKI_CHECK(body->getFirstComponentOfType<BodyComponent>().loadMeshResource(
-				"Assets/Suzanne_e3526e1428c0763c.ankimesh"));
-			body->getFirstComponentOfType<BodyComponent>().setWorldTransform(trf);
-			body->getFirstComponentOfType<BodyComponent>().setMass(1.0f);
+			BodyComponent* bodyc = monkey->newComponent<BodyComponent>();
+			bodyc->teleportTo(trf);
+			bodyc->setMass(1.0f);
 
 			// Create joint
-			JointComponent& jointc = body->getFirstComponentOfType<JointComponent>();
+			JointComponent* jointc = monkey->newComponent<JointComponent>();
 			if(prevBody == nullptr)
 			{
-				jointc.newPoint2PointJoint(Vec3(0, 1, 0));
+				jointc->newPoint2PointJoint(Vec3(0, 1, 0));
 			}
 			else
 			{
-				prevBody->addChild(body);
-				jointc.newPoint2PointJoint2(Vec3(0, 1.0, 0), Vec3(0, -1.0, 0));
+				prevBody->addChild(monkey);
+				jointc->newPoint2PointJoint2(Vec3(0, 1.0, 0), Vec3(0, -1.0, 0));
 			}
 
-			body->addChild(monkey);
-			prevBody = body;
+			prevBody = monkey;
 		}
 	}
 
 	// Trigger
 	{
-		TriggerNode* node;
+		SceneNode* node;
 		ANKI_CHECK(getSceneGraph().newSceneNode("trigger", node));
-		node->getFirstComponentOfType<TriggerComponent>().setSphereVolumeRadius(1.8f);
-		node->getFirstComponentOfType<TriggerComponent>().setWorldTransform(
-			Transform(Vec4(1.0f, 0.5f, 0.0f, 0.0f), Mat3x4::getIdentity(), 1.0f));
+		TriggerComponent* triggerc = node->newComponent<TriggerComponent>();
+		triggerc->setSphereVolumeRadius(1.8f);
+		node->setLocalTransform(Transform(Vec4(1.0f, 0.5f, 0.0f, 0.0f), Mat3x4::getIdentity(), 1.0f));
 	}
 
 	getInput().lockCursor(true);
@@ -291,37 +281,30 @@ Error MyApp::userMainLoop(Bool& quit, [[maybe_unused]] Second elapsedTime)
 
 		static U32 instance = 0;
 
-		Transform camTrf =
-			getSceneGraph().getActiveCameraNode().getFirstComponentOfType<MoveComponent>().getWorldTransform();
+		Transform camTrf = getSceneGraph().getActiveCameraNode().getWorldTransform();
 
-		ModelNode* monkey;
-		ANKI_CHECK(getSceneGraph().newSceneNode<ModelNode>(
+		SceneNode* monkey;
+		ANKI_CHECK(getSceneGraph().newSceneNode(
 			StringRaii(&getMemoryPool()).sprintf("monkey%u", instance++).toCString(), monkey));
-		ANKI_CHECK(monkey->getFirstComponentOfType<ModelComponent>().loadModelResource(
-			"Assets/Suzanne_dynamic_36043dae41fe12d5.ankimdl"));
+		ModelComponent* modelc = monkey->newComponent<ModelComponent>();
+		modelc->loadModelResource("Assets/Suzanne_dynamic_36043dae41fe12d5.ankimdl");
 		// monkey->getFirstComponentOfType<MoveComponent>().setLocalTransform(camTrf);
 
-		BodyNode* body;
-		ANKI_CHECK(getSceneGraph().newSceneNode<BodyNode>(
-			StringRaii(&getMemoryPool()).sprintf("bmonkey%u", instance++).toCString(), body));
-		ANKI_CHECK(body->getFirstComponentOfType<BodyComponent>().loadMeshResource(
-			"Assets/Suzanne_e3526e1428c0763c.ankimesh"));
-		body->getFirstComponentOfType<BodyComponent>().setWorldTransform(camTrf);
-		body->getFirstComponentOfType<BodyComponent>().setMass(1.0f);
+		BodyComponent* bodyc = monkey->newComponent<BodyComponent>();
+		bodyc->loadMeshResource("Assets/Suzanne_e3526e1428c0763c.ankimesh");
+		bodyc->teleportTo(camTrf);
+		bodyc->setMass(1.0f);
 
-		PhysicsBodyPtr pbody = body->getFirstComponentOfType<BodyComponent>().getPhysicsBody();
+		PhysicsBodyPtr pbody = bodyc->getPhysicsBody();
 		pbody->applyForce(camTrf.getRotation().getZAxis().xyz() * -1500.0f, Vec3(0.0f, 0.0f, 0.0f));
 
-		body->addChild(monkey);
-
 		// Create the destruction event
-		ANKI_CHECK(createDestructionEvent(body));
+		ANKI_CHECK(createDestructionEvent(monkey));
 	}
 
 	if(getInput().getMouseButton(MouseButton::kRight) == 1)
 	{
-		Transform camTrf =
-			getSceneGraph().getActiveCameraNode().getFirstComponentOfType<MoveComponent>().getWorldTransform();
+		Transform camTrf = getSceneGraph().getActiveCameraNode().getWorldTransform();
 		Vec3 from = camTrf.getOrigin().xyz();
 		Vec3 to = from + -camTrf.getRotation().getZAxis() * 100.0f;
 
@@ -347,24 +330,19 @@ Error MyApp::userMainLoop(Bool& quit, [[maybe_unused]] Second elapsedTime)
 
 			// Create an obj
 			static U32 id = 0;
-			ModelNode* monkey;
+			SceneNode* monkey;
 			ANKI_CHECK(getSceneGraph().newSceneNode(
 				StringRaii(&getSceneGraph().getFrameMemoryPool()).sprintf("decal%u", id++).toCString(), monkey));
-			ANKI_CHECK(monkey->getFirstComponentOfType<ModelComponent>().loadModelResource(
-				"Assets/Suzanne_dynamic_36043dae41fe12d5.ankimdl"));
-			monkey->getFirstComponentOfType<MoveComponent>().setLocalTransform(trf);
+			ModelComponent* modelc = monkey->newComponent<ModelComponent>();
+			modelc->loadModelResource("Assets/Suzanne_dynamic_36043dae41fe12d5.ankimdl");
+			monkey->setLocalTransform(trf);
 
 			ANKI_CHECK(createDestructionEvent(monkey));
 
 #if 1
 			// Create some particles
-			ParticleEmitterNode* particles;
-			ANKI_CHECK(getSceneGraph().newSceneNode(
-				StringRaii(&getSceneGraph().getFrameMemoryPool()).sprintf("parts%u", id++).toCString(), particles));
-			ANKI_CHECK(particles->getFirstComponentOfType<ParticleEmitterComponent>().loadParticleEmitterResource(
-				"Assets/Smoke.ankipart"));
-			particles->getFirstComponentOfType<MoveComponent>().setLocalTransform(trf);
-			ANKI_CHECK(createDestructionEvent(particles));
+			ParticleEmitterComponent* partc = monkey->newComponent<ParticleEmitterComponent>();
+			partc->loadParticleEmitterResource("Assets/Smoke.ankipart");
 #endif
 
 			// Create some fog volumes
@@ -374,13 +352,13 @@ Error MyApp::userMainLoop(Bool& quit, [[maybe_unused]] Second elapsedTime)
 				StringRaii name(&getSceneGraph().getFrameMemoryPool());
 				name.sprintf("fog%u", id++);
 
-				FogDensityNode* fogNode;
+				SceneNode* fogNode;
 				ANKI_CHECK(getSceneGraph().newSceneNode(name.toCString(), fogNode));
-				FogDensityComponent& fogComp = fogNode->getFirstComponentOfType<FogDensityComponent>();
-				fogComp.setSphereVolumeRadius(2.1f);
-				fogComp.setDensity(15.0f);
+				FogDensityComponent* fogComp = fogNode->newComponent<FogDensityComponent>();
+				fogComp->setSphereVolumeRadius(2.1f);
+				fogComp->setDensity(15.0f);
 
-				fogNode->getFirstComponentOfType<MoveComponent>().setLocalTransform(trf);
+				fogNode->setLocalTransform(trf);
 
 				ANKI_CHECK(createDestructionEvent(fogNode));
 				ANKI_CHECK(createFogVolumeFadeEvent(fogNode));

+ 4 - 4
Sandbox/Main.cpp

@@ -100,15 +100,15 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 	}
 
 	// move the camera
-	static MoveComponent* mover = &scene.getActiveCameraNode().getFirstComponentOfType<MoveComponent>();
+	static SceneNode* mover = &scene.getActiveCameraNode();
 
 	if(in.getKey(KeyCode::k1))
 	{
-		mover = scene.getActiveCameraNode().tryGetFirstComponentOfType<MoveComponent>();
+		mover = &scene.getActiveCameraNode();
 	}
 	if(in.getKey(KeyCode::k2))
 	{
-		mover = &scene.findSceneNode("Point.018_Orientation").getFirstComponentOfType<MoveComponent>();
+		mover = &scene.findSceneNode("Point.018_Orientation");
 	}
 
 	if(in.getKey(KeyCode::kL) == 1)
@@ -179,7 +179,7 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 
 		if(in.getKey(KeyCode::k1) == 1)
 		{
-			mover = &scene.getActiveCameraNode().getFirstComponentOfType<MoveComponent>();
+			mover = &scene.getActiveCameraNode();
 		}
 
 		if(in.getKey(KeyCode::kF1) == 1)

+ 0 - 3
Tools/Image/ImageViewerMain.cpp

@@ -15,9 +15,6 @@ public:
 	TextureViewerUiNode(SceneGraph* scene, CString name)
 		: SceneNode(scene, name)
 	{
-		SpatialComponent* spatialc = newComponent<SpatialComponent>();
-		spatialc->setAlwaysVisible(true);
-
 		UiComponent* uic = newComponent<UiComponent>();
 		uic->init(
 			[](CanvasPtr& canvas, void* ud) {