public RoomObject(RoomObjectTypes type, int x, int y, RoomObjectProperty[] properties)
 {
     _Type       = type;
     _X          = x;
     _Y          = y;
     _Properties = properties;
 }
예제 #2
0
        public void GracefulFailure_RoomObjects(RoomObjectTypes type, int x, int y, string[] properties)
        {
            var parsedProps = new List <RoomObjectProperty>();

            foreach (var prop in properties)
            {
                var ix   = prop.IndexOf('=');
                var name = prop.Substring(0, ix);
                var val  = prop.Substring(ix + 1);

                parsedProps.Add(new RoomObjectProperty(name, val));
            }

            var def = new RoomObject(type, x, y, parsedProps.ToArray());

            var needCalls = CallsNeededForSuccess();

            Assert.True(needCalls > 0);

            for (var i = 0; i < needCalls; i++)
            {
                var game    = MakeGameState();
                var manager = new EntityManager(new _IIdIssuer(), 100);
                manager.FailAfterCalls = i;
                game.EntityManager     = manager;

                // pre condition
                Assert.Equal(0, manager.NumLiveEntities);
                Assert.Equal(0, manager.NumLiveComponents);

                var createRes = ObjectCreator.Create(game, def, new Entity[100]);
                Assert.False(createRes.Success);

                // post condition
                Assert.Equal(0, manager.NumLiveEntities);
                Assert.Equal(0, manager.NumLiveComponents);
            }

            // normal invocation, just count how much we need to succeed
            int CallsNeededForSuccess()
            {
                var game = MakeGameState();

                var manager = new EntityManager(new _IIdIssuer(), 100);

                game.EntityManager    = manager;
                game.AnimationManager = new _AnimationManager();

                var size = ObjectCreator.Create(game, def, new Entity[100]);

                Assert.True(size.Success);

                return(manager.FallibleCallCount);
            }

            // make a bare minimum game state
            GameState MakeGameState()
            {
                var game = new GameState();

                // directly setting these so there's no player allocated
                game.AnimationManager = new _AnimationManager();
                game.AssetMeasurer    = new _AssetMeasurer();

                return(game);
            }
        }