Exemple #1
0
        public Model(char[,] statics, char[,] mobiles, IModelBehaviour behaviourModel)
        {
            InputBuffer = new ControllerMessageMediator();
            var loader = new TileLoader();

            Statics = loader.Load(statics, StaticsMap.TileBuilder);

            Statics.AddCollisionRules(
                (mobile, tile) => !tile.IsTraversible);

            Mobiles = loader.Load(mobiles, MobilesMap.TileBuilder);

            Mobiles.AddCollisionRules(
                (mobile, tile) => !(mobile.CanPush && tile.CanBePushed),
                (mobile, tile) => !(mobile.CanKill && tile.CanBeKilled),
                (mobile, tile) => !(mobile.CanFall && tile.CanBeFellInto)
                );

            Width = statics.GetWidth();
            Height = statics.GetHeight();

            behaviourModel.SetupBehaviours(Mobiles, Statics ,_gameMessageReactor);

            _messageHandler = new MessageHandler(Mobiles, Statics);

            InputBuffer.Subscribe(GameConstants.PLAYER, _playerInputQueue);
            InputBuffer.Subscribe(GameConstants.GAME, _gameInputQueue);

            _playerInputQueue.MessageRecieved += ResolvePlayerInput;
            _gameInputQueue.MessageRecieved += ResolveGameMessage;
        }
 public void CanLoad()
 {
     var staticLoader = new TileLoader();
     var statics = staticLoader.Load(_level, StaticsMap.TileBuilder);
     Assert.That(statics[0,0].Token == '#');
     Assert.That(statics[1,1].Token == '.');
 }
        public void CanResolveMessage()
        {
            var loader = new TileLoader();
            var mobiles = loader.Load(_level, MobilesMap.TileBuilder);
            var messageHandler = new MessageHandler(mobiles, null);

            var player = mobiles.WithName("player");

            var previousPlayerLocation = player.Location;

            var message = new Message{
                Name = "player",
                Type = "movement",
                From = player.Location.ToString(),
                To = new Point(player.Location.X - 1, player.Location.Y).ToString()
            };

            messageHandler.Resolve(message);

            Assert.AreNotEqual(previousPlayerLocation,player.Location);
            Assert.AreEqual(previousPlayerLocation.X - 1, player.Location.X);

            messageHandler.Resolve(message.Invert());
            Assert.AreEqual(previousPlayerLocation, player.Location);
        }
 public void CanUpdate()
 {
     var loader = new TileLoader();
     var tileSet = loader.Load(_level, StaticsMap.TileBuilder);
     tileSet[1, 1].Location = new Point(0,0);
     tileSet[0, 0].Location = new Point(1, 1);
     tileSet.Update();
     Assert.AreEqual(tileSet[1, 1].Token, '#');
 }
 public void CanIndex()
 {
     var loader = new TileLoader();
     var tileSet = loader.Load(_level, StaticsMap.TileBuilder);
     Assert.AreEqual(tileSet[1,1].Token, '.');
 }
 public void CanConstruct()
 {
     var loader = new TileLoader();
     var tileSet = loader.Load(_level, StaticsMap.TileBuilder);
     Assert.IsNotNull(tileSet.Tiles);
 }