//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// 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();
}
}
}
}