/JTacticalSim.Service/TileService.cs
C# | 122 lines | 102 code | 18 blank | 2 comment | 5 complexity | 6893428cd40b569c6b2832d5f45fe476 MD5 | raw file
- using System;
- using System.Configuration;
- using System.Threading.Tasks;
- using System.Collections.Generic;
- using System.Linq;
- using System.Transactions;
- using System.ServiceModel;
- using JTacticalSim.API;
- using JTacticalSim.API.Component;
- using JTacticalSim.API.Data;
- using JTacticalSim.API.InfoObjects;
- using JTacticalSim.API.Service;
- using JTacticalSim.Component.Battle;
- using JTacticalSim.Service;
- using JTacticalSim.Utility;
- using JTacticalSim.DataContext;
- using JTacticalSim.DataContext.Repository;
- using ctxUtil = JTacticalSim.DataContext.Utility;
- using JTacticalSim.Component.GameBoard;
- using JTacticalSim.World;
- namespace JTacticalSim.Service
- {
- [ServiceBehavior]
- public sealed class TileService : BaseGameService, ITileService
- {
- static readonly object padlock = new object();
- private static volatile ITileService _instance = null;
- public static ITileService Instance
- {
- get
- {
- if (_instance == null)
- {
- lock (padlock)
- if (_instance == null) _instance = new TileService();
- }
- return _instance;
- }
- }
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- private TileService()
- {}
- #region Service Methods
- [OperationBehavior]
- public IEnumerable<ITile> GetTiles()
- {
- return ComponentRepository.GetTiles().Select(t => t.ToComponent());
- }
- [OperationBehavior]
- public IServiceResult<ITile> SaveTiles(List<ITile> tiles)
- {
- return ComponentRepository.SaveTiles(tiles);
- }
- [OperationBehavior]
- public IServiceResult<ITile> RemoveTiles(List<ITile> tiles)
- {
- return ComponentRepository.RemoveTiles(tiles);
- }
- [OperationBehavior]
- public IServiceResult<ITile> UpdateTiles(List<ITile> tiles)
- {
- return ComponentRepository.UpdateTiles(tiles);
- }
- // Other
- [OperationBehavior]
- public ICoordinate CreateCoordinate(int X, int Y, int Z)
- {
- return new Coordinate(X, Y, Z);
- }
- [OperationBehavior]
- public ICoordinate CreateCoordinateForDirection(ICoordinate location, Direction direction, int distance)
- {
- switch (direction)
- {
- case Direction.NORTH:
- return new Coordinate(location.X, location.Y - distance, 0);
- case Direction.SOUTH:
- return new Coordinate(location.X, location.Y + distance, 0);
- case Direction.EAST:
- return new Coordinate(location.X + distance, location.Y, 0);
- case Direction.WEST:
- return new Coordinate(location.X - distance, location.Y, 0);
- case Direction.NORTHWEST:
- return new Coordinate(location.X - distance, location.Y - distance, 0);
- case Direction.NORTHEAST:
- return new Coordinate(location.X + distance, location.Y - distance, 0);
- case Direction.SOUTHWEST:
- return new Coordinate(location.X - distance, location.Y + distance, 0);
- case Direction.SOUTHEAST:
- return new Coordinate(location.X + distance, location.Y + distance, 0);
- default:
- return null;
- }
- }
- [OperationBehavior]
- public IUnitStack GetCurrentStack(IMoveableComponent component)
- {
- var tile = component.GetNode().DefaultTile();
- var retVal = tile.GetCountryComponentStack(component.Country);
- return retVal;
- }
- #endregion
- }
- }