My entry to Ludum Dare 53
1namespace LD53;
2
3class Map : Scene
4{
5 MainScene main;
6
7 Vector2 MapOffset = new();
8 Vector2 TempMapOffset = new();
9
10 Vector2 MouseStart = new();
11
12 float zoom = 8;
13
14 int BMPressed = 0;
15 int BESCPressed = 0;
16
17 int BPanPressed = 0;
18 int BScrollPressed = 0;
19
20 Texture BPanOff = new("Images/HUD/ButtonPan0.png");
21 Texture BPanOn = new("Images/HUD/ButtonPan1.png");
22
23 Texture BScroll = new("Images/HUD/ButtonScroll.png");
24
25 public Map(int width, int height, string id) : base(width, height, id)
26 {
27 }
28
29 public override void Awake()
30 {
31 SetClearColor(255, 234, 210, 255);
32 main = SceneHandler.Get<MainScene>();
33 MapOffset = new(-140, -78);
34 }
35
36 public override void Sleep()
37 {
38
39 }
40
41 public override void Update()
42 {
43 if(Mouse.Pressed(MB.Left))
44 {
45 MouseStart = new(Mouse.Position.X, Mouse.Position.Y);
46 }
47
48 if(Mouse.Released(MB.Left))
49 {
50 MapOffset = (MouseStart + MapOffset) - (Mouse.Position);
51 }
52
53 if(Mouse.Down(MB.Left))
54 {
55 TempMapOffset = (MouseStart + MapOffset) - (Mouse.Position);
56 } else {
57 TempMapOffset = MapOffset;
58 }
59
60 if(Keyboard.Down(Key.W))
61 {
62 MapOffset.Y -= 400f * DeltaTime;
63 }
64 if(Keyboard.Down(Key.S))
65 {
66 MapOffset.Y += 400f * DeltaTime;
67 }
68
69 if(Keyboard.Down(Key.A))
70 {
71 MapOffset.X -= 400f * DeltaTime;
72 }
73 if(Keyboard.Down(Key.D))
74 {
75 MapOffset.X += 400f * DeltaTime;
76 }
77
78 if(Keyboard.Pressed(Key.M))
79 {
80 BMPressed++;
81 }
82
83 if(Keyboard.Pressed(Key.ESCAPE))
84 {
85 BESCPressed++;
86 }
87
88 if(Keyboard.Pressed(Key.M) || Keyboard.Pressed(Key.ESCAPE))
89 {
90 // SceneHandler.Load("Main");
91 SceneHandler.Unload("Map");
92 }
93
94 // LD.DrawSmallFont(new(0, 0), "asd");
95
96 // foreach(var i in main.Map)
97 // {
98 // // Draw.Text(i.Item2 - MapOffset, "Pixuf.ttf", i.Item2.ToString(), 8, new(0, 0, 0, 255));
99 // LD.DrawSmallFont(i.Item2 - MapOffset, i.Item2.ToString());
100 // foreach(var j in main.Islands)
101 // {
102 // foreach(var k in j.ToList())
103 // {
104 // Draw.Box(new(i.Key.X * 16 - Map[j].Item2.X, i.Key.Y * 16 - Map[j].Item2.Y, 1, 1), new(179, 165, 85, 255));
105 // }
106 // }
107 // }
108
109 // Console.WriteLine($"{Mouse.Released(MB.Left)} {Mouse.Down(MB.Left)}");
110
111 Draw.Box(new(2, 2, 35, 40), new(235, 214, 190, 255), 10000);
112
113 Draw.Box(new(4, 4, 4, 4), new(179, 165, 85, 255), 10000);
114 LD.DrawSmallFont(new(12, 4), "Land", 10000);
115
116 Draw.Box(new(4, 12, 4, 4), new(100, 81, 59, 255), 10000);
117 LD.DrawSmallFont(new(12, 12), "City", 10000);
118
119 Draw.Box(new(4, 20, 4, 4), new(176, 95, 102, 255), 10000);
120 LD.DrawSmallFont(new(12, 20), "Start", 10000);
121
122 new Texture("Images/Marker.png")
123 .Center(Center.BottomMiddle)
124 .Position(6, 28)
125 .Center(Center.TopMiddle)
126 .Destroy(false)
127 .Depth(10002)
128 .Render();
129 LD.DrawSmallFont(new(12, 32), "Dest.", 10000);
130
131 for(var j = 0; j < main.Map.Count; j++)
132 {
133 foreach(var i in main.Islands[main.Map[j].Item1])
134 {
135 // main.Tiles[i.Value.TileID].tex
136 // .Position((i.Key.X * 16 - main.Map[j].Item2.X) / zoom - MapOffset.X, (i.Key.Y * 16 - main.Map[j].Item2.Y) / zoom - MapOffset.Y)
137 // .GetRect(out Vector4 rect)
138 // .Size(rect.Z / zoom, rect.W / zoom)
139 // .Render();
140
141 new Rectangle(
142 new((i.Key.X * 16 - main.Map[j].Item2.X) / zoom - TempMapOffset.X, (i.Key.Y * 16 - main.Map[j].Item2.Y) / zoom - TempMapOffset.Y,
143 16 / zoom + 2,
144 16 / zoom + 2)
145 )
146 .Color(new(179, 165, 85, 255))
147 .Fill(true)
148 .Render();
149
150 // Draw.Box(new(i.Key.X * 16 - main.Map[j].Item2.X - MapOffset.X, i.Key.Y * 16 - main.Map[j].Item2.Y - MapOffset.Y, 1, 1), new(255, 255, 255), 5000);
151
152 // if(i.Value.IsCity)
153 // {
154 // Draw.Box(rect, new(255, 0, 0, 100));
155 // }
156 }
157 }
158
159 for(var idx = 0; idx < main.Cities.Count; idx++)
160 {
161 var i = main.Cities[idx];
162
163 if(zoom < 12)
164 {
165 LD.DrawSmallFont((i.Item2 / zoom) - TempMapOffset, $"{i.Item1}");
166 }
167
168 bool selected = main.startCity == idx;
169
170 new Rectangle(
171 new((i.Item2 / zoom) - TempMapOffset,
172 16 / zoom + 2 + (selected ? 2 : 0),
173 16 / zoom + 2 + (selected ? 2 : 0))
174 )
175 .Color(
176 main.startCity == idx ?
177 new(176, 95, 102, 255)
178 :
179 new(100, 81, 59, 255)
180 )
181 .Fill(true)
182 .Render();
183
184 if(main.selectedCity == idx)
185 {
186 new Texture("Images/Marker.png")
187 .Center(Center.BottomMiddle)
188 .Position((i.Item2 / zoom) - TempMapOffset)
189 .Destroy(false)
190 .Depth(4998)
191 .Render();
192 }
193 }
194
195 if(Mouse.Pressed(MB.ScrollUp))
196 {
197 zoom += 1f;
198 }
199 if(Mouse.Pressed(MB.ScrollDown))
200 {
201 zoom -= 1f;
202 }
203
204 zoom = Math.Clamp(zoom, 1, 32);
205
206 LD.DrawButton(new(3, WindowSize.Y - 11), "Reset Map Position", Mouse.Position, () => {
207 MapOffset = new(-140, -78);
208 });
209
210 Draw.Rectangle(new(0, 0, WindowSize.X, WindowSize.Y), new(235, 214, 190, 255));
211
212 if(BScrollPressed > 5)
213 {
214 if(Mouse.Pressed(MB.Left))
215 {
216 BPanPressed++;
217 }
218 }
219
220 if(Mouse.Pressed(MB.ScrollUp) || Mouse.Pressed(MB.ScrollDown))
221 {
222 BScrollPressed++;
223 }
224
225 if(BScrollPressed < 5)
226 {
227 BScroll.Position(new(WindowSize.X / 2, WindowSize.Y - 3)).Center(Center.BottomMiddle).Depth(30000).Render();
228
229 new Text("Pixuf.ttf", "Scroll To Zoom")
230 .Size(8)
231 .Color(new Vector4(0, 0, 0, 255))
232 .RenderToTexture()
233 .Destroy(true)
234 .Center(Center.BottomRight)
235 .Position(new(WindowSize.X / 2 - 7, WindowSize.Y - 4))
236 .Depth(30000)
237 .GetRect(out Vector4 rect)
238 .Render();
239
240 Draw.Box(Vector4.Add(rect, new(-2, -2, 3, 3)), new(235, 214, 190, 255), 29999);
241 }
242 else if(BPanPressed < 1)
243 {
244 if(!Mouse.Down(MB.Left))
245 BPanOn.Position(new(WindowSize.X / 2, WindowSize.Y - 3)).Center(Center.BottomMiddle).Depth(30000).Render();
246 else
247 BPanOff.Position(new(WindowSize.X / 2, WindowSize.Y - 3)).Center(Center.BottomMiddle).Depth(30000).Render();
248
249 new Text("Pixuf.ttf", "Pan Around")
250 .Size(8)
251 .Color(new Vector4(0, 0, 0, 255))
252 .RenderToTexture()
253 .Destroy(true)
254 .Center(Center.BottomRight)
255 .Position(new(WindowSize.X / 2 - 7, WindowSize.Y - 4))
256 .Depth(30000)
257 .GetRect(out Vector4 rect)
258 .Render();
259
260 Draw.Box(Vector4.Add(rect, new(-2, -2, 3, 3)), new(235, 214, 190, 255), 29999);
261 }
262 else if((BMPressed < 1) && (BESCPressed < 1))
263 {
264 SceneHandler.Get<HUD>().BMOn.Position(new(WindowSize.X / 2, WindowSize.Y - 3)).Center(Center.BottomMiddle).Depth(30000).Render();
265
266 SceneHandler.Get<HUD>().BESCOn.Position(new(WindowSize.X / 2 + 18, WindowSize.Y - 3)).Center(Center.BottomLeft).Depth(30000).Render();
267
268 new Text("Pixuf.ttf", "Close Map")
269 .Size(8)
270 .Color(new Vector4(0, 0, 0, 255))
271 .RenderToTexture()
272 .Destroy(true)
273 .Center(Center.BottomRight)
274 .Position(new(WindowSize.X / 2 - 7, WindowSize.Y - 4))
275 .Depth(30000)
276 .GetRect(out Vector4 rect1)
277 .Render();
278
279 new Text("Pixuf.ttf", "or")
280 .Size(8)
281 .Color(new Vector4(0, 0, 0, 255))
282 .RenderToTexture()
283 .Destroy(true)
284 .Center(Center.BottomLeft)
285 .Position(new(WindowSize.X / 2 + 9, WindowSize.Y - 4))
286 .Depth(30000)
287 .GetRect(out Vector4 rect2)
288 .Render();
289
290 Draw.Box(Vector4.Add(rect1, new(-2, -2, 3, 3)), new(235, 214, 190, 255), 29999);
291 Draw.Box(Vector4.Add(rect2, new(-2, -2, 3, 3)), new(235, 214, 190, 255), 29999);
292 }
293 }
294}