-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScene.cs
More file actions
110 lines (99 loc) · 2.92 KB
/
Scene.cs
File metadata and controls
110 lines (99 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//-----------------------------------------------------------------------------
// The scene manager.
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
namespace BuildBrickBuilding
{
class Scene
{
Dictionary<Vector3,Block> sceneBlocks;
Vector3 orginPos;
Device device;
Mesh box;
public Scene(Device dev)
{
sceneBlocks = new Dictionary<Vector3, Block>(1);
orginPos = new Vector3(0, 0, 0);
device = dev;
box = Mesh.Box(dev, 1, 1, 1);
}
public void addBrick(Brick brick)
{
foreach (Block block in brick.getBlocks())
{
addBlock(block, brick.getPos() + block.getPos());
}
}
public void addBrick(Brick brick, Vector3 pos)
{
foreach (Block block in brick.getBlocks())
{
addBlock(block, pos + block.getPos());
}
}
public void addBlock(Block block, Vector3 pos)
{
if (sceneBlocks.ContainsKey(pos))
{
sceneBlocks[pos] = new Block(block, pos);
}
else
{
sceneBlocks.Add(pos, new Block(block, pos));
}
}
public void addTmpBricks(Brick brick, Vector3 pos)
{
Brick tmpBrick = new Brick(device);
tmpBrick.setPos(pos);
this.addBrick(tmpBrick);
}
public Block getBlock(Vector3 pos)
{
if (sceneBlocks.ContainsKey(pos))
{
return sceneBlocks[pos];
}
return null;
}
public int getBlockNum()
{
return sceneBlocks.Count;
}
public void removeBlock(Vector3 pos)
{
if (sceneBlocks.ContainsKey(pos))
{
sceneBlocks.Remove(pos);
}
// for (int i = 0; i < sceneBlocks.Count; i++)
// {
// if (((Block)sceneBlocks[i]).getPos() == pos)
// {
// sceneBlocks.RemoveAt(i);
// i--;
// }
// }
}
public void draw(Device dev)
{
Matrix world = dev.Transform.World;
dev.Transform.World = Matrix.Translation(orginPos);
foreach (Block block in sceneBlocks.Values)
{
block.draw(dev, box, orginPos);
}
dev.Transform.World = world;
}
public void reset()
{
sceneBlocks.Clear();
}
}
}