//--------------------------------------------------------------------------------------------------------------------------------------------------- // // Copyright (C)2007 DarkWynter Studios. All rights reserved. // //--------------------------------------------------------------------------------------------------------------------------------------------------- // {License Information: Creative Commons} //--------------------------------------------------------------------------------------------------------------------------------------------------- namespace ElementalGame { #region Using Statements using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Storage; using System.Xml; #endregion public class SkySphere : GameObject { public string skyTexture; public string skyTextureBump; public float rotationScale = 0.001f; new protected float[] materialDiffuse = { 0.7f, 0.7f, 0.7f, 1.0f }; // Specular cofactor new protected float[] materialSpecular = { 0.0f, 0.0f, 0.0f, 1.0f }; /* GameObject Interface Methods * */ public SkySphere(Mass darkMass) { mass = darkMass; mass.gameObjectPointer = this; mass.objectType = Mass.ObjectType.SKYSPHERE; } public override void Load(XmlNode node) { base.Load(node); mass.SetPosition(new Vector3(Terrain.collisionMapSize / 2, 0, Terrain.collisionMapSize / 2), new Vector3(Terrain.collisionMapSize / 2, 0, Terrain.collisionMapSize / 2 + 1)); mass.scale = Terrain.vertexMapSize * 8; try { skyTexture = node.Attributes["texture"].Value; skyTextureBump = node.Attributes["bumpTexture"].Value; } catch { System.Diagnostics.Debug.WriteLine("Error reading sky texture filename"); return; } model = ElementalGame.content.Load("_models/skySphere"); effect = ElementalGame.content.Load("Shaders/ElementalGPU"); textureList.Clear(); textureList.Add(ElementalGame.content.Load(skyTexture)); textureList.Add(ElementalGame.content.Load(skyTextureBump)); // Apply our own advanced Effect to the Model foreach (ModelMesh mesh in model.Meshes) { for (int i = 0; i < mesh.MeshParts.Count; i++) { // Add effect to mesh mesh.MeshParts[i].Effect = effect; } } } public override void Update(ObjectLibrary objectLibrary) { //// Increment Rotation With dt mass.Rotate(0.0f, ElementalGame.dt * rotationScale); } public override void Draw(ModelManager modelManager) { matrix = Matrix.CreateScale(mass.scale) * Matrix.CreateFromQuaternion(mass.currentRotation) * Matrix.CreateTranslation(mass.currentPosition); ShaderParameters.World.SetValue(matrix); // Lighting ShaderParameters.coreMaterialDiffuse.SetValue(materialDiffuse); ShaderParameters.coreMaterialSpecular.SetValue(materialSpecular); ShaderParameters.modelTexture1.SetValue(textureList[0]); ShaderParameters.bumpTexture1.SetValue(textureList[1]); // Draw the model foreach (ModelMesh mesh in model.Meshes) { foreach (Effect currentEffect in mesh.Effects) { currentEffect.CurrentTechnique = currentEffect.Techniques["BasicLightingNoShadowsShaderMain"]; } mesh.Draw(); } } } }