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