public virtual void DoMousePick(GameTime gameTime) { if (game.CameraManager.ActiveCamera != null) { Vector3 pos, normal; Actor pickedActor = game.MouseManager.GetPickedObject( game.CameraManager.ActiveCamera, GameData.FirstPersonStartPickDistance /*5 == how far from 1st Person collidable to start testing for collisions - should always exceed capsule collision skin radius*/, 1000, out pos, out normal); //am i picking something collidable that isnt the ground? if ((pickedActor != null) && (pickedActor.ObjectType != GDLibrary.ObjectType.CollidableGround)) { ModelObject nextPickedModelObject = pickedActor as ModelObject; //make mouse icon change color on collision this.Color = Color.Red; this.SourceRectangle = new Microsoft.Xna.Framework.Rectangle(128, 0, 128, 128); this.Transform2D.Rotation += 0.1f * gameTime.ElapsedGameTime.Milliseconds; //we could publish an event - remove object, play a sound etc //picking a new object? if (nextPickedModelObject != lastPickedModelObject) { //set the last back to original color if (this.lastPickedModelObject != null) { this.lastPickedModelObject.Color = this.lastPickedModelObject.OriginalColor; this.lastPickedModelObject.Alpha = this.lastPickedModelObject.OriginalAlpha; } //set next to picked color if (nextPickedModelObject != null) { nextPickedModelObject.Color = Color.Red; nextPickedModelObject.Alpha = 0.5f; } } this.lastPickedModelObject = nextPickedModelObject; } else { //if no collision then set mouse icon back to white etc this.Color = Color.White; this.SourceRectangle = new Microsoft.Xna.Framework.Rectangle(0, 0, 128, 128); this.Transform2D.Rotation = 0; } } }
//Body, wait for engine updates #endregion #region Constructors public MoveableObject(ModelObject modelObject, IController controller) : base(modelObject) { ControllerList.Add(controller); }
public ModelObject(ModelObject modelObject) : this(modelObject.ID, modelObject.ActorType, modelObject.StatusType, modelObject.Transform3D, modelObject.EffectParameters, modelObject.model) { }