root/Code/oMaE/oMaE/Overworld/Objects/Door.cs @ 34

Revision 34, 3.0 KB (checked in by acarter, 2 years ago)

Added UI

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Microsoft.Xna.Framework;
6using Microsoft.Xna.Framework.Audio;
7using Microsoft.Xna.Framework.Content;
8using Microsoft.Xna.Framework.GamerServices;
9using Microsoft.Xna.Framework.Graphics;
10using Microsoft.Xna.Framework.Input;
11using Microsoft.Xna.Framework.Media;
12
13namespace oMaE.Overworld.Objects
14{
15    class Door : Collidable
16    {
17        private GameObject doorLock;
18        private Tile door, wall;
19        private bool elephantNear;
20        public Door(GameObject doorLock,
21                    Color doorColor, Color wallColor,
22                    Vector2 left, Vector2 right,
23                    float doorHeight = 8.0f, float wallHeight = 10.0f)
24        {
25            this.doorLock = doorLock;
26            right -= left;
27            wallHeight -= doorHeight;
28            door = new Tile(doorColor, new Vector3(left.X, 0, left.Y), new Vector3(0, doorHeight, 0), new Vector3(right.X, 0, right.Y));
29            wall = new Tile(wallColor, new Vector3(left.X, doorHeight, left.Y), new Vector3(0, wallHeight, 0), new Vector3(right.X, 0, right.Y));
30        }
31        public override bool Initialize()
32        {
33            children.Add(door);
34            children.Add(wall);
35            doorLock.Initialize();
36            return base.Initialize();
37        }
38        public override bool  LoadContent(ContentManager Content)
39        {
40             doorLock.LoadContent(Content);
41             return base.LoadContent(Content);
42        }
43        public override bool Collide(Vector3 position, ref Vector3 delta)
44        {
45            Vector3 unitDelta = new Vector3(delta.X, delta.Y, delta.Z);
46            unitDelta.Normalize();
47            float where = door.Bounds.Intersects(new Ray(position, unitDelta)) ?? float.PositiveInfinity;
48            if (where > 0 && where < delta.Length())
49            {
50                delta -= 2 * Vector3.Dot(delta, door.Normal) * door.Normal;
51                return true;
52            }
53            where = wall.Bounds.Intersects(new Ray(position, unitDelta)) ?? float.PositiveInfinity;
54            if (where > 0 && where < delta.Length())
55            {
56                delta -= 2 * Vector3.Dot(delta, wall.Normal) * wall.Normal;
57                return true;
58            }
59            return false;
60        }
61        public override void Update(GameState gameState)
62        {
63            if (elephantNear && gameState.Down(Keys.Space))
64                Display.Display3D.Game2D = doorLock;
65            base.Update(gameState);
66        }
67        public override void Draw(SpriteBatch spriteBatch, GameState gameState)
68        {
69            if (elephantNear)
70                Display.Display3D.text = "Press space to try to unlock door";
71            base.Draw(spriteBatch, gameState);
72        }
73        public override bool Near(Vector3 position)
74        {
75            return (elephantNear = door.Near.Contains(position) == ContainmentType.Contains);
76        }
77    }
78}
Note: See TracBrowser for help on using the browser.