public void RegisterActors() { #region 3D Stuff SceneGraphManager.CullingActive = false; float testTimeOffset = 6000; //ship-position path Path path = new Path("targetPath",ID); path.LoadContent(); path.AddPoint(new Vector3(0, -100, 0), 0); path.AddPoint(new Vector3(0, -300, -8000), testTimeOffset+2000); path.AddPoint(new Vector3(500, -100, -16000), 2*testTimeOffset+4000); path.AddPoint(new Vector3(000, 500, -24000), 3*testTimeOffset+6000); path.AddPoint(new Vector3(0, 0, -30000), 4*testTimeOffset+8000); //camera-position path Path path2 = new Path("positionPath", ID,Color.Green); path2.LoadContent(); path2.AddPoint(new Vector3(0, 200, 500), 0); path2.AddPoint(new Vector3(0, 300, -8000), testTimeOffset+2400); path2.AddPoint(new Vector3(500, 100, -16000), 2*testTimeOffset+4400); path2.AddPoint(new Vector3(000, 500, -24000), 3*testTimeOffset+6400); path2.AddPoint(new Vector3(0, 0, -29000), 4*testTimeOffset+8000); path.SetTangents(); path2.SetTangents(); SceneGraphManager.RootNode.Children.Add(path); SceneGraphManager.RootNode.Children.Add(path2); //create a ship Ship ship = new Ship("SpaceShip", ID,path); ship.LoadContent(); ship.Updateable = true; Planet p = new Planet("testplanet", 1000); p.Position = new Vector3(-1000,-1000,-10000); p.Visible = true; p.LoadContent(); SceneGraphManager.RootNode.Children.Add(p); Laser laser = new Laser("testlaser","laser", 5); laser.Visible = false; laser.LoadContent(); SceneGraphManager.RootNode.Children.Add(laser); SceneGraphManager.RootNode.Children.Add(ship); //cameras ChaseCamera chaseCamera = new ChaseCamera("chaseCamera", new Vector3(0, 50, 700), ship); chaseCamera.LoadContent(); FPSCamera fpsCamera = new FPSCamera("fpsCamera", Vector3.Zero, Vector3.UnitZ,500); fpsCamera.LoadContent(); PathCamera pathCamera = new PathCamera("pathCamera",path,path2); pathCamera.LoadContent(); CameraManager.Instance.CurrentCamera = "pathCamera"; //create a skySphere SkySphere skySphere = new SkySphere("skySphere", "level1_skymap", 30000f); skySphere.Position = Vector3.Zero; skySphere.Visible = true; skySphere.LoadContent(); SceneGraphManager.RootNode.Children.Add(skySphere); //100 asteroids with random position, scale and rotation Random random = new Random(); /* for (int i = 0; i < 100; i++) { EffectProperty effectProp = new EffectProperty("TextureMappingEffect"); effectProp.Effect = ResourceManager.Instance.GetResource<Effect>("TextureMappingEffect"); MeshObject asteroid01 = new MeshObject("asteroid" + i, "asteroid", 1f); //asteroid01.Properties.Add(ActorPropertyType.EFFECT, effectProp); CollideableProperty collidable = new CollideableProperty(); asteroid01.Properties.Add(ActorPropertyType.COLLIDEABLE, collidable); asteroid01.Scale = new Vector3(random.Next(15, 100), random.Next(15, 100), random.Next(15, 100)); asteroid01.Rotation = Quaternion.CreateFromYawPitchRoll(random.Next(20,100),random.Next(20,100),random.Next(20,100)); asteroid01.Position = new Vector3(random.Next(-1000, 1000), random.Next(-500, 500), random.Next(-100, 0) - i * 300); asteroid01.LoadContent(); asteroid01.SetModelEffect(ResourceManager.Instance.GetResource<Effect>("PPModel"),true); SceneGraphManager.RootNode.Children.Add(asteroid01); } * */ MeshObject obj = new MeshObject("tea", "teapot", 1.0f); obj.LoadContent(); obj.Position = new Vector3(0,-100,0); obj.SetModelEffect(ResourceManager.Instance.GetResource<Effect>("PPModel"), true); SceneGraphManager.RootNode.Children.Add(obj); #endregion #region UI Stuff TextElement headline = new TextElement("TextElementHeadline2", new Vector2(500, 20), Color.Yellow, "GamePlayView", ResourceManager.Instance.GetResource<SpriteFont>("Arial")); headline.Scale = 1f; headline.Visible = false; UIManager.Instance.AddActor(headline); TextElement TextPositionShip = new TextElement("TextPositionShip", new Vector2(500, 40), Color.Yellow, "GamePlayView", ResourceManager.Instance.GetResource<SpriteFont>("Arial")); TextPositionShip.Scale = 1f; TextPositionShip.Visible = true; UIManager.Instance.AddActor(TextPositionShip); //create crossfade CrossHair crosshair_near = new CrossHair("crosshair_near", "SpaceShip", "crosshair_near", 1500); crosshair_near.LoadContent(); UIManager.Instance.AddActor(crosshair_near); #endregion }
private void CreateMeshObjectMenuItem_Click(object sender, RoutedEventArgs e) { if (Level != null) { CreateMeshObjectWindow createMeshObjectWindow = new CreateMeshObjectWindow(); createMeshObjectWindow.Owner = this; if (createMeshObjectWindow.ShowDialog().Value) { MeshObject obj = new MeshObject(createMeshObjectWindow.ID, createMeshObjectWindow.Model, 1f); obj.Position = createMeshObjectWindow.Position; obj.Scale = createMeshObjectWindow.Scale; obj.LoadContent(); obj.SetModelEffect(ResourceManager.Instance.GetResource<Effect>(Database.Instance.Shaders[createMeshObjectWindow.Shader].File), true); Shader shader = Database.Instance.Shaders[createMeshObjectWindow.Shader]; if (shader.Type == Databases.Data.MaterialType.None || shader.Type == Databases.Data.MaterialType.Engine) { // because we are using an in engine shader we don't need to compile anything in // here and can use the shader straight away and create a new instance of its material! string typeName = shader.Content; Type type = Type.GetType(typeName); if (type != null) { Material mat = (Material)Activator.CreateInstance(type); obj.Material = mat; } } else if (shader.Type == Databases.Data.MaterialType.Compile) { // compile our shader code ! CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add("system.dll"); cp.ReferencedAssemblies.Add("system.drawing.dll"); cp.ReferencedAssemblies.Add("C:\\Program Files (x86)\\Microsoft XNA\\XNA Game Studio\\v4.0\\References\\Windows\\x86\\Microsoft.Xna.Framework.Graphics.dll"); cp.ReferencedAssemblies.Add("C:\\Program Files (x86)\\Microsoft XNA\\XNA Game Studio\\v4.0\\References\\Windows\\x86\\Microsoft.Xna.Framework.dll"); FileInfo fi = new FileInfo(Assembly.GetEntryAssembly().Location); String path = System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); cp.ReferencedAssemblies.Add(fi.DirectoryName + "\\GameApplication.dll"); cp.CompilerOptions = "/t:library"; cp.GenerateInMemory = true; CompilerResults cr = provider.CompileAssemblyFromSource(cp, shader.Content); if (cr.Errors.Count > 0) { foreach (CompilerError error in cr.Errors) { Error err = new Error(); err.Name = "MESHOBJECT::SHADER_COMPILE1001"; err.Type = ErrorType.FATAL; err.Description = new Exception(error.ErrorText).ToString(); Output.AddToError(err); } } else { Assembly assembly = cr.CompiledAssembly; try { object o = assembly.CreateInstance(shader.Namespace); if (o != null) obj.Material = (Material)o; } catch (Exception exception) { Error err = new Error(); err.Name = "MESHOBJECT::MATERIAL_CREATE_INSTANCE1001"; err.Type = ErrorType.FATAL; err.Description = exception.ToString(); Output.AddToError(err); } } } sceneGraph.RootNode.Children.Add(obj); LoadWorldView(); } } else { MessageBox.Show("Please create or load a level first before you add any actor"); } }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); sceneGraph = new SceneGraphManager(); sceneGraph.CullingActive = false; sceneGraph.LightingActive = true; #region RESOURCES List<Resource> resources = new List<Resource>() { new Resource() { Name = "crate", Path = GameApplication.Instance.TexturePath, Type = ResourceType.Texture2D }, new Resource() { Name = "DefaultEffect", Path = GameApplication.Instance.EffectPath, Type = ResourceType.Effect }, new Resource() { Name = "TextureMappingEffect", Path = GameApplication.Instance.EffectPath, Type = ResourceType.Effect }, new Resource() { Name = "NormalMappingEffect", Path = GameApplication.Instance.EffectPath, Type = ResourceType.Effect }, new Resource() { Name = "FogEffect", Path = GameApplication.Instance.EffectPath, Type = ResourceType.Effect }, new Resource() { Name = "PPModel", Path = GameApplication.Instance.EffectPath, Type = ResourceType.Effect }, new Resource() { Name = "PPLight", Path = GameApplication.Instance.EffectPath, Type = ResourceType.Effect }, new Resource() { Name = "PPDepthNormal", Path = GameApplication.Instance.EffectPath, Type = ResourceType.Effect }, new Resource() { Name = "chunkheightmap", Path = GameApplication.Instance.TexturePath, Type = ResourceType.Texture2D }, new Resource() { Name = "PPLightMesh", Path = GameApplication.Instance.ModelPath, Type = ResourceType.Model }, new Resource() { Name = "brick_normal_map", Path = GameApplication.Instance.TexturePath, Type = ResourceType.Texture2D }, new Resource() { Name = "Spaceship_nor_hälfte_fertig_NRM", Path = GameApplication.Instance.TexturePath, Type = ResourceType.Texture2D }, new Resource() { Name = "wedge_p1_diff_v1", Path = GameApplication.Instance.TexturePath + "SpaceShip\\", Type = ResourceType.Texture2D }, new Resource() { Name = "wedge_p1_diff_v1_normal", Path = GameApplication.Instance.TexturePath + "SpaceShip\\", Type = ResourceType.Texture2D }, new Resource() { Name = "Kachel2_bump", Path = GameApplication.Instance.TexturePath, Type = ResourceType.Texture2D }, new Resource() { Name = "Checker", Path = GameApplication.Instance.TexturePath, Type = ResourceType.Texture2D }, new Resource() { Name = "masonry-wall-normal-map", Path = GameApplication.Instance.TexturePath, Type = ResourceType.Texture2D }, new Resource() { Name = "level1_skymap", Path = GameApplication.Instance.TexturePath, Type = ResourceType.Texture2D }, new Resource() { Name = "p1_wedge", Path = GameApplication.Instance.ModelPath, Type = ResourceType.Model }, new Resource() { Name = "Raumschiff_tex", Path = GameApplication.Instance.ModelPath, Type = ResourceType.Model }, new Resource() { Name = "Ground", Path = GameApplication.Instance.ModelPath, Type = ResourceType.Model }, new Resource() { Name = "brick_wall", Path = GameApplication.Instance.ModelPath, Type = ResourceType.Model }, new Resource() { Name = "sphere", Path = GameApplication.Instance.ModelPath, Type = ResourceType.Model }, new Resource() { Name = "raumschiff7", Path = GameApplication.Instance.ModelPath, Type = ResourceType.Model }, new Resource() { Name = "wall", Path = GameApplication.Instance.ModelPath, Type = ResourceType.Model }, new Resource() { Name = "Arial", Path = GameApplication.Instance.FontPath, Type = ResourceType.SpriteFont } }; ResourceManager.Instance.LoadResources(resources); sceneGraph.Lighting.Lights.Add(new PointLight("pointLight01", null, new Vector3(2, 1, 0), Color.Red * .85f, 5000)); sceneGraph.Lighting.Lights.Add(new PointLight("pointLight02", null, new Vector3(-2, 2, 0), Color.Green * .85f, 5000)); sceneGraph.Lighting.Lights.Add(new PointLight("pointLight02", null, new Vector3(10, 1, 0), Color.White * .85f, 5000)); sceneGraph.Lighting.LoadContent(); #endregion #region CAMERA FPSCamera cam = new FPSCamera("fps", new Vector3(0, 5, -5), new Vector3(0, 3, 0)); cam.LoadContent(); CameraManager.Instance.CurrentCamera = "fps"; #endregion #region ACTORS FogMaterial mat = new FogMaterial(); mat.FogStart = 2000; mat.LightDirection = new Vector3(1f, 1f, 1); mat.LightColor = Vector3.One; NormalMapMaterial normal = new NormalMapMaterial(); normal.NormalMap = ResourceManager.Instance.GetResource<Texture2D>("Spaceship_nor_hälfte_fertig_NRM"); normal.LightDirection = new Vector3(1f, 1f, .5f); normal.LightColor = Vector3.One; normal.SpecularPower = 32; LightingMaterial lighting = new LightingMaterial(); lighting.LightDirection = new Vector3(.5f, .5f, .5f); //lighting.LightColor = Color.Aqua.ToVector3(); lighting.SpecularPower = 1; MeshObject mesh = new MeshObject("ship", "p1_wedge", 0.01f); mesh.Position = new Vector3(0, 3, 0); mesh.Scale = new Vector3(0.01f); mesh.LoadContent(); mesh.SetModelEffect(ResourceManager.Instance.GetResource<Effect>("PPModel"), true); mesh.Material = lighting; sceneGraph.RootNode.Children.Add(mesh); MeshObject plane = new MeshObject("plane", "Ground", 0.01f); plane.Position = new Vector3(0, 0, 0); plane.Scale = new Vector3(0.01f); plane.LoadContent(); plane.Material = lighting; plane.SetModelEffect(ResourceManager.Instance.GetResource<Effect>("PPModel"), true); sceneGraph.RootNode.Children.Add(plane); TextElement element = new TextElement("text", new Vector2(1, 1), Color.Black, "Test", ResourceManager.Instance.GetResource<SpriteFont>("Arial")); element.LoadContent(); UIManager.Instance.AddActor(element); #endregion MouseDevice.Instance.ResetMouseAfterUpdate = false; }