//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// 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;
using System.Diagnostics;
#endregion
public class CollectibleKey : GameObject
{
//int width;
//int height;
new public float[] materialDiffuse = { 0.7f, 0.7f, 0.7f, 1.0f }; // Diffuse cofactor
new public float[] materialSpecular = { 0.1f, 0.1f, 0.1f, 1.0f }; // Specular cofactor
public CollectibleKey(Mass darkMass)
{
mass = darkMass;
mass.gameObjectPointer = this;
mass.objectType = Mass.ObjectType.KEY;
}
public override void Load(XmlNode node)
{
mass.mass = 3.0f;
mass.scale = 50.0f;
mass.objectHeight = 6;
Random rand = new Random();
Vector3 pos = new Vector3(409, 156, 409);//rand.Next(200), rand.Next(200), rand.Next(200));
mass.SetPosition(pos, pos + new Vector3(0,0,1));
//Load Effect
effect = ElementalGame.content.Load("Shaders/ElementalGPU");
model = ElementalGame.content.Load("_models/GenericSphere");
// 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;
}
}
// Load Model
textureList.Clear();
textureList.Add(ElementalGame.content.Load("_textures/FireDesert"));
textureList.Add(ElementalGame.content.Load("_textures/FireBlue_bump"));
}
public void Rotate(float dVert, float dHoriz)
{
mass.Rotate(dVert, dHoriz);
}
public void SetPosition(Vector3 position, Vector3 reference)
{
mass.SetPosition(position, reference);
}
public void SetScale(float scale)
{
mass.scale = scale;
}
/* GameObject Interface Methods
*
*/
public override void Update(ObjectLibrary objectLibrary, float dt)
{
mass.AddForce(Mass.accelDueToGravity);
mass.UpdatePosition(dt);
_boundingSphere.Center = mass.currentPosition;
}
public override void DrawShadow(ModelManager modelManager)
{
matrix = Matrix.CreateScale(mass.scale) *
Matrix.CreateFromQuaternion(mass.currentRotation) *
Matrix.CreateTranslation(mass.currentPosition);
ShaderParameters.World.SetValue(matrix);
// Draw the model
//foreach (ModelMesh mesh in model.Meshes)
//{
// foreach (Effect currentEffect in mesh.Effects)
// {
// currentEffect.CurrentTechnique = effect.Techniques["ShadowMap"];
// }
// mesh.Draw();
//}
}
// ========================= Distance culling should be done with indexing in Map =========================
public override void Draw(ModelManager modelManager)
{
// Calculate ObjectSpace(Rotation) and WorldSpace(Translation) Transformation Matrix
matrix = Matrix.CreateScale(mass.scale) *
Matrix.CreateFromQuaternion(mass.currentRotation) *
Matrix.CreateTranslation(mass.currentPosition);
ShaderParameters.modelTexture1.SetValue(textureList[0]);
ShaderParameters.bumpTexture1.SetValue(textureList[1]);
// Lighting
ShaderParameters.coreShininess.SetValue(7000.0f);
ShaderParameters.coreMaterialDiffuse.SetValue(materialDiffuse);
ShaderParameters.coreMaterialSpecular.SetValue(materialSpecular);
ShaderParameters.World.SetValue(matrix);
// Draw the model
//foreach (ModelMesh mesh in model.Meshes)
//{
// foreach (Effect currentEffect in mesh.Effects)
// {
// currentEffect.CurrentTechnique = effect.Techniques["BasicLightingShaderMain"];
// }
// mesh.Draw();
//}
}
}
}