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

Revision 41, 2.6 KB (checked in by acarter, 2 years ago)

More comments/refactoring

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(Color doorColor, Color wallColor,
21                    Vector2 left, Vector2 right,
22                    float doorHeight = 8.0f, float wallHeight = 10.0f)
23        {
24            right -= left;
25            wallHeight -= doorHeight;
26            door = new Tile(doorColor, new Vector3(left.X, 0, left.Y), new Vector3(0, doorHeight, 0), new Vector3(right.X, 0, right.Y));
27            wall = new Tile(wallColor, new Vector3(left.X, doorHeight, left.Y), new Vector3(0, wallHeight, 0), new Vector3(right.X, 0, right.Y));
28        }
29        public override void Initialize()
30        {
31            children.Add(door);
32            children.Add(wall);
33            doorLock = driver.GetMinigame();
34            base.Initialize();
35        }
36        public override void LoadContent(ContentManager Content)
37        {
38             base.LoadContent(Content);
39        }
40        public override bool Collide(Vector3 position, ref Vector3 delta)
41        {
42            Vector3 unitDelta = new Vector3(delta.X, delta.Y, delta.Z);
43            unitDelta.Normalize();
44            float where = door.Bounds.Intersects(new Ray(position, unitDelta)) ?? float.PositiveInfinity;
45            if (where > 0 && where < delta.Length())
46            {
47                delta -= 2 * Vector3.Dot(delta, door.Normal) * door.Normal;
48                return true;
49            }
50            where = wall.Bounds.Intersects(new Ray(position, unitDelta)) ?? float.PositiveInfinity;
51            if (where > 0 && where < delta.Length())
52            {
53                delta -= 2 * Vector3.Dot(delta, wall.Normal) * wall.Normal;
54                return true;
55            }
56            return false;
57        }
58        public override void Update(GameState gameState)
59        {
60            if (elephantNear && gameState.Down(Keys.Space))
61                driver.Play2DGame(doorLock);
62            base.Update(gameState);
63        }
64        public override bool Near(Vector3 position)
65        {
66            return (elephantNear = door.Near.Contains(position) == ContainmentType.Contains);
67        }
68    }
69}
Note: See TracBrowser for help on using the browser.