MainWindow.xaml.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using MultiAgentSystemPCL;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Windows;
  5. using System.Windows.Input;
  6. using System.Windows.Media;
  7. using System.Windows.Shapes;
  8. using System.Windows.Threading;
  9. namespace Fish
  10. {
  11. public partial class MainWindow : Window
  12. {
  13. Ocean myOcean;
  14. public MainWindow()
  15. {
  16. InitializeComponent();
  17. Loaded += MainWindow_Loaded;
  18. }
  19. void MainWindow_Loaded(object _sender, RoutedEventArgs _e)
  20. {
  21. oceanCanvas.MouseDown += oceanCanvas_MouseDown;
  22. myOcean = new Ocean(250, oceanCanvas.ActualWidth, oceanCanvas.ActualHeight);
  23. myOcean.oceanUpdatedEvent += myOcean_oceanUpdatedEvent;
  24. DispatcherTimer dispatcherTimer = new DispatcherTimer();
  25. dispatcherTimer.Tick += dispatcherTimer_Tick;
  26. dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 15);
  27. dispatcherTimer.Start();
  28. }
  29. void dispatcherTimer_Tick(object _sender, EventArgs _e)
  30. {
  31. myOcean.UpdateEnvironnement();
  32. }
  33. void myOcean_oceanUpdatedEvent(FishAgent[] _fish, List<BadZone> _obstacles)
  34. {
  35. oceanCanvas.Children.Clear();
  36. foreach (FishAgent fish in _fish)
  37. {
  38. DrawFish(fish);
  39. }
  40. foreach (BadZone obstacle in _obstacles)
  41. {
  42. DrawObstacle(obstacle);
  43. }
  44. oceanCanvas.UpdateLayout();
  45. }
  46. private void DrawObstacle(BadZone _obstacle)
  47. {
  48. Ellipse circle = new Ellipse();
  49. circle.Stroke = Brushes.Black;
  50. circle.Width = 2 * _obstacle.Radius;
  51. circle.Height = 2 * _obstacle.Radius;
  52. circle.Margin = new Thickness(_obstacle.PosX - _obstacle.Radius, _obstacle.PosY - _obstacle.Radius, 0, 0);
  53. oceanCanvas.Children.Add(circle);
  54. }
  55. private void DrawFish(FishAgent _fish)
  56. {
  57. Line body = new Line();
  58. body.Stroke = Brushes.Black;
  59. body.X1 = _fish.PosX;
  60. body.Y1 = _fish.PosY;
  61. body.X2 = _fish.PosX - 10 * _fish.SpeedX;
  62. body.Y2 = _fish.PosY - 10 * _fish.SpeedY;
  63. oceanCanvas.Children.Add(body);
  64. }
  65. void oceanCanvas_MouseDown(object _sender, MouseButtonEventArgs _mouseEvent)
  66. {
  67. myOcean.AddObstacle(_mouseEvent.GetPosition(oceanCanvas).X, _mouseEvent.GetPosition(oceanCanvas).Y, 10);
  68. }
  69. }
  70. }