protected override void initWheels() { lWheelNode = innerNode.CreateChildSceneNode(name + "_LeftWheel", new Vector3(-3.0f, -1.0f, -2.3f), new Quaternion(Math.DegreesToRadians(20), Vector3.UNIT_X)); lWheelNode.Scale(0.9f, 0.9f, 0.9f); lWheelInnerNode = lWheelNode.CreateChildSceneNode(name + "_LeftWheelInner"); Entity lWheel = sceneMgr.CreateEntity(name + "_lWheel", "Wheel.mesh"); lWheelInnerNode.AttachObject(lWheel); rWheelNode = innerNode.CreateChildSceneNode(name + "_RightWheel", new Vector3(3.0f, -1.0f, -2.3f), new Quaternion(Math.DegreesToRadians(20), Vector3.UNIT_X)); rWheelNode.Rotate(Vector3.NEGATIVE_UNIT_Y, Math.DegreesToRadians(180)); rWheelNode.Scale(0.9f, 0.9f, 0.9f); rWheelInnerNode = rWheelNode.CreateChildSceneNode(name + "_RightWheelInner"); Entity rWheel = sceneMgr.CreateEntity(name + "_rWheel", "Wheel.mesh"); rWheelInnerNode.AttachObject(rWheel); rearWheelNode = innerNode.CreateChildSceneNode(name + "_RearWheel", new Vector3(0.0f, -0.2f, 5.3f), new Quaternion(Math.DegreesToRadians(20), Vector3.UNIT_X)); // rearWheelNode.Rotate(Vector3.NEGATIVE_UNIT_Y, Mogre.Math.DegreesToRadians(180)); rearWheelNode.Scale(0.7f, 0.7f, 0.7f); rearWheelInnerNode = rearWheelNode.CreateChildSceneNode(name + "_RearWheelInner"); Entity rearWheel = sceneMgr.CreateEntity(name + "_rearWheele", "Wheel.mesh"); rearWheelInnerNode.AttachObject(rearWheel); // retract landing gear if (this.plane != null && this.plane.WheelsState == WheelsState.In) { LWheelInnerNode.Roll(new Radian(new Degree(90))); RWheelInnerNode.Roll(new Radian(new Degree(90))); RearWheelInnerNode.Pitch(new Radian(new Degree(45))); // IMPORTANT: this should be also set in animation manager later on (MaxAngle *= -1 to change direction of wheel movement) } }
/// <summary> /// Buduje testow¹ scenê /// </summary> public override void CreateScene() { //float cameraDistance = 50.0f; // mgr.LoadWorldGeometry("Terrain.xml"); //sceneMgr.AmbientLight = ColourValue.Black; ; //; new ColourValue(1.0f, 1.0f, 1.0f); // Set the material sceneMgr.SetSkyBox(true, "Skybox/Morning", 5000); sceneMgr.AmbientLight = new ColourValue(0.5f, 0.5f, 0.5f); // create a default point light Light light = sceneMgr.CreateLight("MainLight"); light.Type = Light.LightTypes.LT_DIRECTIONAL; light.Position = new Vector3(0, 1000, 0); light.Direction = new Vector3(0, -5, 0); light.DiffuseColour = new ColourValue(1.0f, 1.0f, 1.0f); light.SpecularColour = new ColourValue(0.05f, 0.05f, 0.05f); // OCEAN Plane plane = new Plane(); plane.normal = Vector3.UNIT_Y; plane.d = 0; MeshManager.Singleton.CreatePlane("OceanPlane", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, plane, 5000, 5000, 10, 10, true, 1, 10, 10, Vector3.UNIT_Z); Entity ocean = sceneMgr.CreateEntity("Ocean", "OceanPlane"); ocean.SetMaterialName("Ocean2_HLSL"); ocean.CastShadows = false; sceneMgr.RootSceneNode.AttachObject(ocean); // OCEAN ViewHelper.AttachAxes(sceneMgr, sceneMgr.RootSceneNode, 0.001f); // CARRIER Entity carrier2 = minimapMgr.CreateEntity("Carrier", "Carrier.mesh"); Entity carrier = sceneMgr.CreateEntity("Carrier", "Carrier.mesh"); Entity carrierAerial1 = sceneMgr.CreateEntity("CarrierAerial1", "Aerial1.mesh"); Entity carrierAerial2 = sceneMgr.CreateEntity("CarrierAerial2", "Aerial2.mesh"); Entity lWaterTrail = sceneMgr.CreateEntity("LWaterTrail", "TwoSidedPlane.mesh"); lWaterTrail.CastShadows = false; lWaterTrail.SetMaterialName("Effects/WaterTrail"); Entity rWaterTrail = sceneMgr.CreateEntity("RWaterTrail", "TwoSidedPlane.mesh"); rWaterTrail.CastShadows = false; rWaterTrail.SetMaterialName("Effects/WaterTrail"); carrierNode = sceneMgr.RootSceneNode.CreateChildSceneNode("Carrier"); carrierNode.AttachObject(carrier); carrierAerial1Node = carrierNode.CreateChildSceneNode("carrierAerial1Node", new Vector3(-8.6f, 9.1f, 5.7f)); carrierAerial1Node.AttachObject(carrierAerial1); carrierAerial2Node = carrierNode.CreateChildSceneNode("carrierAerial2Node", new Vector3(-10.7f, 4.0f, 12.6f)); carrierAerial2Node.AttachObject(carrierAerial2); lCarrierWaterTrailNode = carrierNode.CreateChildSceneNode("lCarrierWaterTrailNode", new Vector3(-4.6f, -4.8f, -40.0f)); lCarrierWaterTrailNode.AttachObject(lWaterTrail); lCarrierWaterTrailNode.Rotate(Vector3.NEGATIVE_UNIT_Y, Math.HALF_PI); lCarrierWaterTrailNode.Scale(2.0f, 1f, 1.5f); rCarrierWaterTrailNode = carrierNode.CreateChildSceneNode("rCarrierWaterTrailNode", new Vector3(4.6f, -4.8f, -40.0f)); rCarrierWaterTrailNode.AttachObject(rWaterTrail); rCarrierWaterTrailNode.Rotate(Vector3.NEGATIVE_UNIT_Y, Math.HALF_PI); rCarrierWaterTrailNode.Scale(2.0f, 1f, 1.5f); carrierNode.Translate(new Vector3(100, 5, 0)); carrierNode.SetDirection(Vector3.UNIT_X); // CARRIER // ISLAND1 /* Entity island = sceneMgr.CreateEntity("Island1", "Island3.mesh"); * * islandNode = sceneMgr.RootSceneNode.CreateChildSceneNode("Island1"); * islandNode.AttachObject(island); * islandNode.Translate(new Vector3(-100, 1.35f, 0)); * islandNode.SetDirection(Vector3.UNIT_X);*/ // ISLAND2 /* Entity island2 = sceneMgr.CreateEntity("Island2", "Island2.mesh"); * * island2Node = sceneMgr.RootSceneNode.CreateChildSceneNode("Island2"); * island2Node.AttachObject(island2); * island2Node.Translate(new Vector3(-170, -0.35f, 0)); * island2Node.SetDirection(Vector3.UNIT_X);*/ // ISLAND3 Entity island3 = sceneMgr.CreateEntity("Island3", "Island5.mesh"); island3Node = sceneMgr.RootSceneNode.CreateChildSceneNode("Island3"); island3Node.AttachObject(island3); island3Node.Translate(new Vector3(-460, 1.35f, 0)); island3Node.SetDirection(Vector3.UNIT_X); // ISLAND4 Entity island6 = sceneMgr.CreateEntity("Island6", "Island6.mesh"); islandNode = sceneMgr.RootSceneNode.CreateChildSceneNode("Island6"); islandNode.AttachObject(island6); islandNode.Translate(new Vector3(-200, 5.35f, 0)); islandNode.SetDirection(Vector3.UNIT_X); float rot, xpos, zpos, ypos; // WOODEN BUNKER INSTALLATION gunEmplacementNode = islandNode.CreateChildSceneNode("GunEmplacement", new Vector3(0.0f, 1.1f, 5.0f)); Entity sandbags = sceneMgr.CreateEntity("Sandbags", "Sandbags.mesh"); gunEmplacementNode.AttachObject(sandbags); woodenBunkerNode = gunEmplacementNode.CreateChildSceneNode("WoodenBunkerNode", new Vector3(0, 0.0f, 4.0f)); Entity woodenBunker = sceneMgr.CreateEntity("WoodenBunker", "Bunker.mesh"); // woodenBunker.SetMaterialName("Concrete"); // aby by³ betonowy woodenBunkerNode.AttachObject(woodenBunker); Entity flakBase = sceneMgr.CreateEntity("FlakBase", "FlakBase.mesh"); gunEmplacementNode.AttachObject(flakBase); flakBarrel = sceneMgr.CreateEntity("FlakBarrel", "FlakBarrel.mesh"); flakBarrelNode = gunEmplacementNode.CreateChildSceneNode("FlakBarrelNode", new Vector3(0, 0.5f, 0)); flakBarrelNode.AttachObject(flakBarrel); // WOODEN BUNKER INSTALLATION // PALM TREES SceneNode palmNode; Entity palm; for (int i = 0; i < 150; i++) { palm = sceneMgr.CreateEntity("Palm" + i, "PalmTree.mesh"); rot = Math.RangeRandom(-90.0f, 90.0f); zpos = Math.RangeRandom(-200.0f, 200.0f); xpos = Math.RangeRandom(-10.0f, 10.0f); ypos = Math.RangeRandom(0.1f, 0.3f); palmNode = islandNode.CreateChildSceneNode("PalmNode" + i, new Vector3(xpos, ypos, zpos)); palmNode.Rotate(Vector3.UNIT_Y, rot); palmNode.Scale(1, Math.RangeRandom(0.9f, 1.1f), 1); palmNode.AttachObject(palm); } //islandNode.Scale(2.0f, 2.0f, 2.0f); // PALM TREES // JAPAN FLAG Entity japanFlag = sceneMgr.CreateEntity("JapanFlag", "JapanFlag.mesh"); japanFlagNode = islandNode.CreateChildSceneNode("JapanFlagNode", new Vector3(0, 1, -5)); japanFlagNode.Rotate(Vector3.UNIT_Y, Math.PI); japanFlagNode.AttachObject(japanFlag); japanFlagState = japanFlag.GetAnimationState("idle"); japanFlagState.Enabled = true; japanFlagState.Loop = true; // JAPAN FLAG // TENT - just for fun // ??? Entity tent = sceneMgr.CreateEntity("Tent", "Barracks.mesh"); tentNode = islandNode.CreateChildSceneNode("TentNode", new Vector3(0, 1, 17)); tentNode.AttachObject(tent); // TENT // SOLDIERS SceneNode soldierNode; Entity soldier; soldiersState = new AnimationState[15]; for (int i = 0; i < soldiersState.Length; i++) { soldier = sceneMgr.CreateEntity("Soldier" + i, "Soldier.mesh"); if (i % 3 == 0) { soldier.SetMaterialName("General"); } rot = Math.RangeRandom(-30.0f, 30.0f); zpos = Math.RangeRandom(-10.0f, 20.0f); xpos = Math.RangeRandom(-0.0f, 1.0f); ypos = 0.8f; soldierNode = SceneMgr.RootSceneNode.CreateChildSceneNode("SoldierNode" + i, new Vector3(xpos, ypos, zpos)); soldierNode.Rotate(Vector3.UNIT_Y, rot); soldierNode.AttachObject(soldier); switch (i % 3) { case 0: soldiersState[i] = soldier.GetAnimationState("run"); break; case 1: soldiersState[i] = soldier.GetAnimationState("die1"); break; case 2: soldiersState[i] = soldier.GetAnimationState("die2"); break; } soldiersState[i].Loop = true; soldiersState[i].Enabled = true; } //islandNode.Scale(0.7f, 0.7f, 0.7f); // SOLDIERS /*d * BillboardSet skies = SceneManager.CreateBillboardSet("Sky",1); * skies.MaterialName = "Skyplane/Morning"; * Billboard sky = skies.CreateBillboard(new Vector3(0.0f, 0.0f, -100.0f)); * SceneManager.RootSceneNode.AttachObject(skies); */ ////////////////////////////////////////////////////// // A6M /* * a6m = sceneMgr.CreateEntity("A6M", "A6M.mesh"); * a6mNode = sceneMgr.RootSceneNode.CreateChildSceneNode("EnemyNode"); * a6mNode.AttachObject(a6m); * * * // AIRSCREW * enemyAirscrewNode = a6mNode.CreateChildSceneNode("EnemyAirscrew", new Vector3(0.0f, 0.0f, -5.70f)); * * Entity enemyAirscrew = sceneMgr.CreateEntity("EnemyAirscrew", "Airscrew.mesh"); * enemyAirscrew.SetMaterialName("A6M/Airscrew"); * enemyAirscrew.CastShadows = false; * enemyAirscrewNode.AttachObject(enemyAirscrew); * // AIRSCREW * * * a6mNode.LookAt(Vector3.NEGATIVE_UNIT_X, Node.TransformSpace.TS_WORLD); * * * a6mNode.Scale(new Vector3(0.5f, 0.5f, 0.5f)); * a6mNode.Position = new Vector3(0, 13.0f, 0); * ViewHelper.AttachAxes(sceneMgr, a6mNode, 1.5f); */ // A6M ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// // P47 p47 = sceneMgr.CreateEntity("P47Body", "P47Body.mesh"); playerNode = sceneMgr.RootSceneNode.CreateChildSceneNode("PlayerNode", new Vector3(350, 0, 0)); p47OuterNode = playerNode.CreateChildSceneNode("OuterNode"); p47InnerNode = p47OuterNode.CreateChildSceneNode("InnerNode"); p47InnerNode.AttachObject(p47); p47OuterNode.Scale(new Vector3(0.5f, 0.5f, 0.5f)); p47OuterNode.LookAt(Vector3.NEGATIVE_UNIT_X, Node.TransformSpace.TS_WORLD); // SMOKE ParticleSystem smokeSystem = sceneMgr.CreateParticleSystem("SmokeSystem", "Smokes/Smoke"); SceneNode smokeNode = playerNode.CreateChildSceneNode("Smoke", new Vector3(0.0f, 0.0f, 3.0f)); smokeSystem.GetEmitter(0).Direction = new Vector3(0.0f, 0.0f, 1.0f); smokeNode.AttachObject(smokeSystem); // SMOKE // ANIMATION // p47AnimationState = p47.GetAnimationState("manual"); // p47AnimationState.Loop = true; // p47AnimationState.Enabled = true; // ANIMATION // BLADE bladeNode = p47InnerNode.CreateChildSceneNode("Blade", new Vector3(0.0f, 0.0f, -7.0f)); Entity p47Blade = sceneMgr.CreateEntity("Blade", "P47Blade.mesh"); bladeNode.AttachObject(p47Blade); p47Blade.Visible = false; // tylko kiedy niskie obroty // BLADE // AIRSCREW Entity airscrew = sceneMgr.CreateEntity("Airscrew", "Airscrew.mesh"); airscrew.CastShadows = false; bladeNode.AttachObject(airscrew); // AIRSCREW // GUNHIT Entity lGunHit = sceneMgr.CreateEntity("LGunHit", "TwoSidedPlane.mesh"); lGunHit.CastShadows = false; lGunHit.SetMaterialName("Effects/GunHit"); Entity rGunHit = sceneMgr.CreateEntity("RGunHit", "TwoSidedPlane.mesh"); rGunHit.CastShadows = false; rGunHit.SetMaterialName("Effects/GunHit"); lGunHitNode = p47InnerNode.CreateChildSceneNode("lGunHitNode", new Vector3(-4.0f, -0.5f, -4.2f)); lGunHitNode.AttachObject(lGunHit); lGunHitNode.Rotate(Vector3.NEGATIVE_UNIT_Z, Math.HALF_PI); lGunHitNode.Scale(0.5f, 0.5f, 0.7f); rGunHitNode = p47InnerNode.CreateChildSceneNode("rGunHitNode", new Vector3(4.0f, -0.5f, -4.2f)); rGunHitNode.AttachObject(rGunHit); rGunHitNode.Rotate(Vector3.NEGATIVE_UNIT_Z, Math.HALF_PI); rGunHitNode.Scale(0.5f, 0.5f, 0.7f); // GUNHIT // WHEELS lWheelNode = p47InnerNode.CreateChildSceneNode("LeftWheel", new Vector3(-3.0f, -1.6f, -2.3f), new Quaternion(Math.DegreesToRadians(20), Vector3.UNIT_X)); Entity lWheel = sceneMgr.CreateEntity("lWheel", "Wheel.mesh"); lWheelNode.AttachObject(lWheel); rWheelNode = p47InnerNode.CreateChildSceneNode("RightWheel", new Vector3(3.0f, -1.6f, -2.3f), new Quaternion(Math.DegreesToRadians(20), Vector3.UNIT_X)); rWheelNode.Rotate(Vector3.NEGATIVE_UNIT_Y, Math.DegreesToRadians(180)); Entity rWheel = sceneMgr.CreateEntity("rWheel", "Wheel.mesh"); rWheelNode.AttachObject(rWheel); rearWheelNode = p47OuterNode.CreateChildSceneNode("RearWheel", new Vector3(0.0f, -0.6f, 5.3f), new Quaternion(Math.DegreesToRadians(20), Vector3.UNIT_X)); // rearWheelNode.Rotate(Vector3.NEGATIVE_UNIT_Y, Mogre.Math.DegreesToRadians(180)); Entity rearWheel = sceneMgr.CreateEntity("rearWheele", "Wheel.mesh"); rearWheelNode.AttachObject(rearWheel); rearWheelNode.Scale(0.7f, 0.7f, 0.7f); // WHEELS // ViewHelper.AttachAxes(sceneMgr, p47InnerNode, 1.5f); playerNode.Position = new Vector3(0, 10.0f, 0); // p47Animation = new PlaneAnimationManager(0, new PlayerPlaneViewnew Wof.Model.Level.Planes.Plane(),this,playerNode,); // p47Animation.enableAll(); // p47Animation.switchTo(PlaneAnimationManager.AnimationType.IDLE); // p47Animation.Enabled = false; // CAMERA cameraNode = playerNode.CreateChildSceneNode("Camera"); cameraNode.AttachObject(camera); cameraNode.Translate(new Vector3(0, 0, 100)); // sceneMgr.RootSceneNode.AttachObject(camera); // P47 ////////////////// // CHMURY BillboardSet clouds1 = sceneMgr.CreateBillboardSet("Clouds1"); clouds1.MaterialName = "Effects/Cloud1"; for (int i = -11; i < 11; i += 2) { Billboard cloud1 = (Billboard)clouds1.CreateBillboard(i * 10, 100 + Math.RangeRandom(-50, 50), -500); cloud1.SetDimensions(200 + Math.RangeRandom(-i, i), 100 + Math.RangeRandom(-i, 0)); cloud1.Rotation = Math.DegreesToRadians(Math.RangeRandom(5, 5)); } sceneMgr.RootSceneNode.AttachObject(clouds1); BillboardSet clouds2 = sceneMgr.CreateBillboardSet("Clouds2"); clouds2.MaterialName = "Effects/Cloud2"; for (int i = -10; i < 10; i += 2) { Billboard cloud2 = clouds2.CreateBillboard(i * 100, 100 + Math.RangeRandom(-50, 50), -500); cloud2.SetDimensions(200 + Math.RangeRandom(-i, i), 100 + Math.RangeRandom(-i, 0)); cloud2.Rotation = Math.DegreesToRadians(Math.RangeRandom(5, 5)); } sceneMgr.RootSceneNode.AttachObject(clouds2); }