source: 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/Room.cs @ 3477

Revision 3477, 4.0 KB checked in by dezhidki, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using MathHelper;
7
8namespace Rooms
9{
10    abstract class Room
11    {
12        public Vector Position { get; set; }
13        public double width, height, thickness;
14        protected List<IPhysicsObject> roomObjects = new List<IPhysicsObject>();
15        private bool isBuilt = false;
16        protected IPhysicsObject[,] insideObjects;
17        protected double blockWidth, blockHeight;
18        protected double insideWidth, insideHeight;
19        protected Vector insidePos;
20        protected int bWidth, bHeight;
21        public Game Game { get; set; }
22
23        public Room(Game game, Vector pos, Vector size, double thickness)
24        {
25            Game = game;
26            Position = pos;
27            width = size.X;
28            height = size.Y;
29            this.thickness = thickness;
30
31            insidePos = VecMath.add(pos, new Vector(thickness, -thickness));
32            insideWidth = width - thickness;
33            insideHeight = height - thickness;
34            blockWidth = insideWidth / 10;
35            blockHeight = blockWidth;
36            bWidth = (int)(insideWidth / blockWidth);
37            bHeight = (int)(insideHeight / blockHeight);
38
39            insideObjects = new PhysicsObject[bWidth, bHeight];
40        }
41
42        public abstract void initRoom();
43
44        public void buildLevel()
45        {
46            if (roomObjects.Count == 0) throw new Exception("Cannot build empty room!");
47
48            foreach (IPhysicsObject obj in roomObjects)
49            {
50                Game.Add(obj);
51            }
52
53            foreach (IPhysicsObject obj in insideObjects)
54            {
55                if(obj != null)
56                Game.Add(obj);
57            }
58           
59
60            isBuilt = true;
61        }
62
63        public void destroyLevel()
64        {
65            if (roomObjects.Count == 0) throw new Exception("Cannot destory empty room!");
66            if (!isBuilt) throw new Exception("Cannot destroy unbuilt room!");
67
68            foreach (IPhysicsObject obj in roomObjects)
69            {
70                obj.Destroy();
71            }
72        }
73
74        public void addBlock(IPhysicsObject obj, int bx, int by)
75        {
76            if (bx > bWidth || bx < 0 || by > bHeight || by < 0 || insideObjects[bx,by] != null) throw new Exception("Can't put block to " + bx + " , " + by);
77            obj.Left = insidePos.X + (bx * blockWidth);
78            obj.Top = insidePos.Y + (by * blockHeight);
79            insideObjects[bx, by] = obj;
80        }
81
82        public void createBorders()
83        {
84            PhysicsObject wallTop = createWall(Position, width + thickness, thickness);
85            PhysicsObject wallLeft = createWall(VecMath.sub(Position, new Vector(0, thickness)), thickness, height);
86            PhysicsObject wallDown = createWall(VecMath.sub(Position, new Vector(0, height)), width + thickness, thickness);
87            PhysicsObject wallRight = createWall(VecMath.add(Position, new Vector(width, -thickness)), thickness, height-thickness);
88            roomObjects.Add(wallTop);
89            roomObjects.Add(wallLeft);
90            roomObjects.Add(wallDown);
91            roomObjects.Add(wallRight);
92        }
93
94        public PhysicsObject createWall(Vector pos, double width, double height)
95        {
96            PhysicsObject wall = PhysicsObject.CreateStaticObject(width, height);
97            wall.Left = pos.X;
98            wall.Top = pos.Y;
99
100            return wall;
101        }
102
103        public PhysicsObject createBackground()
104        {
105            PhysicsObject bg = PhysicsObject.CreateStaticObject(insideWidth, insideHeight);
106            bg.Left = Position.X + thickness;
107            bg.Top = Position.Y - thickness;
108            bg.IgnoresCollisionResponse = true;
109            bg.Color = Color.Black;
110            bg.IgnoresExplosions = true;
111            return bg;
112        }
113
114    }
115
116    class RoomTemplates
117    {
118
119    }
120}
Note: See TracBrowser for help on using the repository browser.