PageRenderTime 39ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/JTacticalSim.Service/TileService.cs

https://github.com/Queztionmark/JTacticalSim
C# | 122 lines | 102 code | 18 blank | 2 comment | 5 complexity | 6893428cd40b569c6b2832d5f45fe476 MD5 | raw file
  1. using System;
  2. using System.Configuration;
  3. using System.Threading.Tasks;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Transactions;
  7. using System.ServiceModel;
  8. using JTacticalSim.API;
  9. using JTacticalSim.API.Component;
  10. using JTacticalSim.API.Data;
  11. using JTacticalSim.API.InfoObjects;
  12. using JTacticalSim.API.Service;
  13. using JTacticalSim.Component.Battle;
  14. using JTacticalSim.Service;
  15. using JTacticalSim.Utility;
  16. using JTacticalSim.DataContext;
  17. using JTacticalSim.DataContext.Repository;
  18. using ctxUtil = JTacticalSim.DataContext.Utility;
  19. using JTacticalSim.Component.GameBoard;
  20. using JTacticalSim.World;
  21. namespace JTacticalSim.Service
  22. {
  23. [ServiceBehavior]
  24. public sealed class TileService : BaseGameService, ITileService
  25. {
  26. static readonly object padlock = new object();
  27. private static volatile ITileService _instance = null;
  28. public static ITileService Instance
  29. {
  30. get
  31. {
  32. if (_instance == null)
  33. {
  34. lock (padlock)
  35. if (_instance == null) _instance = new TileService();
  36. }
  37. return _instance;
  38. }
  39. }
  40. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  41. private TileService()
  42. {}
  43. #region Service Methods
  44. [OperationBehavior]
  45. public IEnumerable<ITile> GetTiles()
  46. {
  47. return ComponentRepository.GetTiles().Select(t => t.ToComponent());
  48. }
  49. [OperationBehavior]
  50. public IServiceResult<ITile> SaveTiles(List<ITile> tiles)
  51. {
  52. return ComponentRepository.SaveTiles(tiles);
  53. }
  54. [OperationBehavior]
  55. public IServiceResult<ITile> RemoveTiles(List<ITile> tiles)
  56. {
  57. return ComponentRepository.RemoveTiles(tiles);
  58. }
  59. [OperationBehavior]
  60. public IServiceResult<ITile> UpdateTiles(List<ITile> tiles)
  61. {
  62. return ComponentRepository.UpdateTiles(tiles);
  63. }
  64. // Other
  65. [OperationBehavior]
  66. public ICoordinate CreateCoordinate(int X, int Y, int Z)
  67. {
  68. return new Coordinate(X, Y, Z);
  69. }
  70. [OperationBehavior]
  71. public ICoordinate CreateCoordinateForDirection(ICoordinate location, Direction direction, int distance)
  72. {
  73. switch (direction)
  74. {
  75. case Direction.NORTH:
  76. return new Coordinate(location.X, location.Y - distance, 0);
  77. case Direction.SOUTH:
  78. return new Coordinate(location.X, location.Y + distance, 0);
  79. case Direction.EAST:
  80. return new Coordinate(location.X + distance, location.Y, 0);
  81. case Direction.WEST:
  82. return new Coordinate(location.X - distance, location.Y, 0);
  83. case Direction.NORTHWEST:
  84. return new Coordinate(location.X - distance, location.Y - distance, 0);
  85. case Direction.NORTHEAST:
  86. return new Coordinate(location.X + distance, location.Y - distance, 0);
  87. case Direction.SOUTHWEST:
  88. return new Coordinate(location.X - distance, location.Y + distance, 0);
  89. case Direction.SOUTHEAST:
  90. return new Coordinate(location.X + distance, location.Y + distance, 0);
  91. default:
  92. return null;
  93. }
  94. }
  95. [OperationBehavior]
  96. public IUnitStack GetCurrentStack(IMoveableComponent component)
  97. {
  98. var tile = component.GetNode().DefaultTile();
  99. var retVal = tile.GetCountryComponentStack(component.Country);
  100. return retVal;
  101. }
  102. #endregion
  103. }
  104. }