My entry to Ludum Dare 53
at master 294 lines 9.3 kB view raw
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}