Exemplo n.º 1
0
        public void TestEventResolverQueue()
        {
            int counter    = 0;
            var subscriber = new RawSubscriber <TestEvent>(myEvent => counter++);

            JEventBus.GetDefault().Register(this, subscriber);
            var resolverQueue = new ResolverQueue(JEventBus.GetDefault());

            JEventBus.GetDefault().Post(new AddEventToResolve(typeof(TestEvent)));

            var testEvent = new TestEvent();

            for (int i = 0; i < 100; i++)
            {
                JEventBus.GetDefault().Post(testEvent);
            }

            Assert.AreEqual(0, counter);
            JEventBus.GetDefault().Post(new ResolveEvent(typeof(TestEvent)));
            Assert.AreEqual(100, counter);

            for (int i = 0; i < 100; i++)
            {
                JEventBus.GetDefault().Post(testEvent);
            }

            Assert.AreEqual(200, counter);
        }
        public GenericOpenHeroesRunner(IMapLoader mapLoader, EntityWorld entityWorld = null)
        {
            _mapLoader   = mapLoader;
            EventBus     = JEventBus.GetDefault();
            GameCalendar = new GameCalendar();
            int?internalMapSize = mapLoader?.GetMapSize();

            if (!internalMapSize.HasValue)
            {
                internalMapSize = 512;
            }
            Grid grid = new Grid(internalMapSize.Value, internalMapSize.Value);

            EntitySystem.BlackBoard.SetEntry("EventBus", EventBus);
            EntitySystem.BlackBoard.SetEntry("Grid", grid);
            EntitySystem.BlackBoard.SetEntry("GameCalendar", GameCalendar);
            EntitySystem.BlackBoard.SetEntry("TerrainLayer", new TerrainLayer(grid));

            if (entityWorld == null)
            {
                EntityWorld = new EntityWorld(false, true, true)
                {
                    PoolCleanupDelay = 1
                };
                LoadMap();
            }
            else
            {
                EntityWorld = entityWorld;
            }
        }
Exemplo n.º 3
0
        public void RegisterCustomSubscriberWithPriority()
        {
            var subscriber1 = new RawSubscriber <TestEventWithParam>(myEvent =>
            {
                myEvent.Param++;
                Assert.AreEqual(3, myEvent.Param);
            });
            var subscriber2 = new RawSubscriber <TestEventWithParam>(myEvent =>
            {
                myEvent.Param++;
                Assert.AreEqual(2, myEvent.Param);
            }, 1);
            var subscriber3 = new RawSubscriber <TestEventWithParam>(myEvent =>
            {
                myEvent.Param++;
                Assert.AreEqual(1, myEvent.Param);
            }, 2);

            JEventBus.GetDefault().Register(this, subscriber3);
            JEventBus.GetDefault().Register(this, subscriber2);
            JEventBus.GetDefault().Register(this, subscriber1);

            for (int i = 0; i < 100; i++)
            {
                var testEvent = new TestEventWithParam();
                JEventBus.GetDefault().Post(testEvent);
                Assert.AreEqual(3, testEvent.Param);
            }
        }
        public void TestBaseFunctionality()
        {
            Fraction             testFraction         = new Fraction("test");
            Point                testPosition         = new Point(1, 1);
            TerritoryChangeEvent territoryChangeEvent = new TerritoryChangeEvent(testPosition, testFraction);

            JEventBus.GetDefault().Post(territoryChangeEvent);

            FindTerritoryOwnerEvent checkTestPositionOwner = new FindTerritoryOwnerEvent(testPosition);

            JEventBus.GetDefault().Post(checkTestPositionOwner);
            Assert.IsTrue(checkTestPositionOwner.Success);
            Assert.IsNotNull(checkTestPositionOwner.Owner);
            Assert.IsTrue(testFraction == checkTestPositionOwner.Owner);

            Assert.AreEqual(1, TerritoryApi.GetTerritoryCellsAmount(testFraction));

            foreach (var utp in new SquareRadiusForeach(testPosition, 1, 8, 8, true).LikePointList())
            {
                FindTerritoryOwnerEvent findTerritoryOwnerEvent = new FindTerritoryOwnerEvent(utp);
                JEventBus.GetDefault().Post(findTerritoryOwnerEvent);
                Assert.IsTrue(findTerritoryOwnerEvent.Success);
                Assert.IsNull(findTerritoryOwnerEvent.Owner);
            }
        }
Exemplo n.º 5
0
        public void TestStage()
        {
            int iteration = 100;


            var subscriber1 = new RawSubscriber <TestEventWithParam>(myEvent => { myEvent.Param++; });
            var subscriber2 = new RawSubscriber <TestEventWithParam>(myEvent => { myEvent.Param++; }, 1);
            var subscriber3 = new RawSubscriber <TestEventWithParam>(myEvent => { myEvent.Param++; }, 3);

            JEventBus.GetDefault().Register(this, subscriber3);
            JEventBus.GetDefault().Register(this, subscriber2);
            JEventBus.GetDefault().BeginStage();
            JEventBus.GetDefault().Register(this, subscriber1);


            for (int i = 0; i < iteration; i++)
            {
                var testEvent = new TestEventWithParam();
                JEventBus.GetDefault().Post(testEvent);
                Assert.AreEqual(3, testEvent.Param);
            }

            JEventBus.GetDefault().CloseStage();

            for (int i = 0; i < iteration; i++)
            {
                var testEvent = new TestEventWithParam();
                JEventBus.GetDefault().Post(testEvent);
                Assert.AreEqual(2, testEvent.Param);
            }
        }
Exemplo n.º 6
0
        public void MoveOutListener(MoveOutEvent moveOutEvent)
        {
            //Simulate drawing move army animations - in this case just skip
            MoveInEvent moveInEvent =
                new MoveInEvent(moveOutEvent.Next, moveOutEvent.Current, moveOutEvent.MoveToNextEvent);

            JEventBus.GetDefault().Post(moveInEvent);
        }
Exemplo n.º 7
0
 public static void SendEvent(JEventBus eventBus, object eventToSend)
 {
     if (eventBus == null)
     {
         eventBus = JEventBus.GetDefault();
     }
     eventBus.Post(eventToSend);
 }
Exemplo n.º 8
0
        public void MoveToNextListener(MoveToNextEvent moveToNextEvent)
        {
            Point current = moveToNextEvent.CalculatedPath[moveToNextEvent.CurrentIndex];
            Point next    = moveToNextEvent.CalculatedPath[moveToNextEvent.CurrentIndex + 1];

            MoveOutEvent moveOutEvent = new MoveOutEvent(current, next, moveToNextEvent);

            JEventBus.GetDefault().Post(moveOutEvent);
        }
Exemplo n.º 9
0
        public void Think(Entity thinker, JEventBus eventBus)
        {
            _eventBus = eventBus;
            GeoEntity geoEntity = thinker.GetComponent <GeoEntity>();
            ArmyAi    armyAi    = thinker.GetComponent <ArmyAi>();
            Army      army      = thinker.GetComponent <Army>();

            FindStructureInArea findStructureInArea = new FindStructureInArea(geoEntity.Position, armyAi.SearchRadius);

            JEventBus.GetDefault().Post(findStructureInArea);

            Entity nearestStructure = null;

            foreach (var structureEntity in findStructureInArea.Results)
            {
                Structure structure    = structureEntity.GetComponent <Structure>();
                GeoEntity structureGeo = structureEntity.GetComponent <GeoEntity>();
                long      geoIndex     = GetGeoIndex(structureGeo.Position);
                if (StructureIsVisited(geoIndex, armyAi) || structure.Fraction == army.Fraction)
                {
                    continue;
                }
                //Check accessibility
                FindPathEvent findPathEvent = new FindPathEvent(geoEntity.Position, structureGeo.Position);
                _eventBus.Post(findPathEvent);
                if (findPathEvent.CalculatedPath == null)
                {
                    continue;
                }

                nearestStructure = structureEntity;
                break;
            }

            if (nearestStructure == null)
            {
                Debug.WriteLine(army + " Skip to FindResources");
                armyAi.ArmyStateMachine.Fire(ArmyTrigger.FindResources);
                return;
            }

            armyAi.SearchRadius = 10;

            GeoEntity resourcePosition = nearestStructure.GetComponent <GeoEntity>();

            GoToEvent goToEvent = new GoToEvent(thinker, resourcePosition.Position);

            Debug.WriteLine(army + " Go For Structure: " + goToEvent.Goal);
            JEventBus.GetDefault().Post(goToEvent);

            if (goToEvent.Complete)
            {
                armyAi.VisitedStructures.Add(GetGeoIndex(resourcePosition.Position));
            }

            armyAi.ArmyStateMachine.Fire(ArmyTrigger.FinishAction);
        }
Exemplo n.º 10
0
        public override void LoadContent()
        {
            base.LoadContent();
            _eventBus = BlackBoard.GetEntry <JEventBus>("EventBus") ?? JEventBus.GetDefault();
            _eventBus.Register(this);

            var _grid = BlackBoard.GetEntry <Grid>("Grid");

            _dijkstraPathFinder = new DijkstraPathFinder(ByteArrayHelper.CreateBase(_grid.Width));
        }
        public void TestPathfinderSystem()
        {
            GenericOpenHeroesRunner.CreateInstance(new ByteArrayMapLoader(ByteArrayHelper.CreateBase(128)));
            FindPathEvent findPathEvent = new FindPathEvent(new Point(0, 0), new Point(100, 100));

            JEventBus.GetDefault().Post(findPathEvent);

            Assert.IsNotNull(findPathEvent.CalculatedPath);
            Assert.IsNotEmpty(findPathEvent.CalculatedPath);
            Assert.AreEqual(101, findPathEvent.CalculatedPath.Count);
        }
Exemplo n.º 12
0
        public static void ChangeTerritoryOwner(Point tilePosition, Fraction newOwner, JEventBus eventBus = null)
        {
            if (eventBus == null)
            {
                eventBus = JEventBus.GetDefault();
            }

            TerritoryChangeEvent territoryChangeEvent = new TerritoryChangeEvent(tilePosition, newOwner);

            BaseApi.SendEvent(eventBus, territoryChangeEvent);
        }
Exemplo n.º 13
0
        public void TestExceptionPropagation()
        {
            var subscriberAborted =
                new RawSubscriber <TestEventWithParam>(myEvent => { throw new NotSupportedException(); }, 2);

            JEventBus.GetDefault().Register(this, subscriberAborted);
            var toBeAbortedEvent = new TestEventWithParam();

            Assert.Catch <TargetInvocationException>(() =>
                                                     JEventBus.GetDefault().Post(toBeAbortedEvent));
        }
        public void TestBaseFunctionality()
        {
            Fraction testFraction = new Fraction("test");
            Point    testPosition = new Point(4, 4);

            CreateInfluenceCenterEvent createInfluenceCenterEvent = new CreateInfluenceCenterEvent(testPosition, 100f);

            JEventBus.GetDefault().Post(createInfluenceCenterEvent);

            _runner.Update();
        }
Exemplo n.º 15
0
        public static bool IsGround(Point tilePosition, JEventBus eventBus = null)
        {
            if (eventBus == null)
            {
                eventBus = JEventBus.GetDefault();
            }

            FindTileTypeEvent findTileTypeEvent = new FindTileTypeEvent(tilePosition);

            BaseApi.SendEvent(eventBus, findTileTypeEvent);
            return(findTileTypeEvent.Result > 0);
        }
Exemplo n.º 16
0
        public static bool IsEntrance(Point tilePosition, JEventBus eventBus = null)
        {
            if (eventBus == null)
            {
                eventBus = JEventBus.GetDefault();
            }

            FindEntranceEvent findEntranceEvent = new FindEntranceEvent(tilePosition);

            BaseApi.SendEvent(eventBus, findEntranceEvent);
            return(findEntranceEvent.Result != null);
        }
Exemplo n.º 17
0
        protected override void OnOpen()
        {
            Debug.WriteLine("WS Player Connected");
            SendPersistentMessages();
            JEventBus.GetDefault().Register(this);
            _player                 = PlayerManager.Instance.CreatePlayer();
            _player.Connected       = true;
            _player.PlayerWsService = this;

            var yourConnectionId = new YourConnectionIdEvent(_player);

            Send(WsMessageBuilder.CreateWsText("private", yourConnectionId));
        }
Exemplo n.º 18
0
        public void RegisterCustomSubscriberRaw()
        {
            var eventSubscriber = new TestEventSubscriber();

            JEventBus.GetDefault().Register(this, eventSubscriber);

            var testEvent = new TestEvent();

            for (int i = 0; i < 100; i++)
            {
                JEventBus.GetDefault().Post(testEvent);
            }

            Assert.AreEqual(100, eventSubscriber.EventCounter);
        }
Exemplo n.º 19
0
        private static void AddChests()
        {
            Random random = new Random(1234);

            ResourceDefinition resourceDefinition = new ResourceDefinition("Chest");

            for (int i = 0; i < 10; i++)
            {
                Point    position = new Point(random.Next(512), random.Next(512));
                Resource resource = new Resource(resourceDefinition);
                AddResourceOnWorldMapEvent addResourceOnWorldMapEvent =
                    new AddResourceOnWorldMapEvent(resource, position);
                JEventBus.GetDefault().Post(addResourceOnWorldMapEvent);
            }
        }
Exemplo n.º 20
0
        public void TestNormalCase()
        {
            var subscriber = new TestEventHandler();

            JEventBus.GetDefault().Register(subscriber);

            var testEvent = new TestEvent();

            for (int i = 0; i < 100; i++)
            {
                JEventBus.GetDefault().Post(testEvent);
            }

            Assert.AreEqual(100, subscriber.EventCounter);
        }
Exemplo n.º 21
0
        public void RegisterCustomSubscriber()
        {
            int counter    = 0;
            var subscriber = new RawSubscriber <TestEvent>(myEvent => counter++);

            JEventBus.GetDefault().Register(this, subscriber);

            var testEvent = new TestEvent();

            for (int i = 0; i < 100; i++)
            {
                JEventBus.GetDefault().Post(testEvent);
            }

            Assert.AreEqual(100, counter);
        }
Exemplo n.º 22
0
        public void Think(Entity thinker, JEventBus eventBus)
        {
            _eventBus = eventBus;
            GeoEntity geoEntity = thinker.GetComponent <GeoEntity>();
            ArmyAi    armyAi    = thinker.GetComponent <ArmyAi>();
            Army      army      = thinker.GetComponent <Army>();

            FindResourceInArea findResourceInArea = new FindResourceInArea(geoEntity.Position, armyAi.SearchRadius);

            JEventBus.GetDefault().Post(findResourceInArea);

            Entity nearestResource = null;

            foreach (var resourceEntity in findResourceInArea.Results)
            {
                Resource  resource    = resourceEntity.GetComponent <Resource>();
                GeoEntity resourceGeo = resourceEntity.GetComponent <GeoEntity>();

                FindPathEvent findPathEvent = new FindPathEvent(geoEntity.Position, resourceGeo.Position);
                _eventBus.Post(findPathEvent);
                if (findPathEvent.CalculatedPath == null)
                {
                    continue;
                }

                nearestResource = resourceEntity;
                break;
            }
            if (nearestResource == null)
            {
                armyAi.SearchRadius += 5;
                Debug.WriteLine(army + " Skip to IDLE");
                armyAi.ArmyStateMachine.Fire(ArmyTrigger.FinishAction);
                return;
            }

            armyAi.SearchRadius = 10;

            GeoEntity resourcePosition = nearestResource.GetComponent <GeoEntity>();

            GoToEvent goToEvent = new GoToEvent(thinker, resourcePosition.Position);

            Debug.WriteLine(army + " Go For Resource: " + goToEvent.Goal);
            JEventBus.GetDefault().Post(goToEvent);

            armyAi.ArmyStateMachine.Fire(ArmyTrigger.FinishAction);
        }
Exemplo n.º 23
0
        public void GoToListener(GoToEvent goToEvent)
        {
            Entity entity = goToEvent.Entity;

            if (!entity.HasComponent <GeoEntity>())
            {
                Error("GoTo ERROR: Missing GeoEntity");
                return;
            }

            GeoEntity geoEntity = entity.GetComponent <GeoEntity>();
            Army      army      = entity.GetComponent <Army>();

            FindPathEvent findPathEvent = new FindPathEvent(geoEntity.Position, goToEvent.Goal);

            JEventBus.GetDefault().Post(findPathEvent);
            if (findPathEvent.CalculatedPath == null || findPathEvent.CalculatedPath.Count == 0)
            {
                Warning("GoTo ERROR: Path not found");
                return;
            }

            //Go to the same place (SPACE)
            if (findPathEvent.CalculatedPath.Count == 1)
            {
                findPathEvent.CalculatedPath.Add(findPathEvent.CalculatedPath[0]);
            }

            int i = 0;

            while (army.MovementPoints > 0)
            {
                if (i >= findPathEvent.CalculatedPath.Count - 1)
                {
                    break;
                }
                MoveToNextEvent moveToNextEvent = new MoveToNextEvent(findPathEvent.CalculatedPath, entity, i);
                JEventBus.GetDefault().Post(moveToNextEvent);
                i++;
            }

            Debug("GoTo OK: " + geoEntity.Position);
            if (geoEntity.Position.Equals(goToEvent.Goal))
            {
                goToEvent.Complete = true;
            }
        }
Exemplo n.º 24
0
 public void Setup()
 {
     JEventBus.GetDefault().ClearAll();
     byte[,] map =
     {
         {1, 1, 1, 1, 1, 1, 1, 1},
         {1, 1, 1, 1, 1, 1, 1, 1},
         {1, 1, 1, 1, 1, 1, 1, 1},
         {1, 1, 1, 1, 1, 1, 1, 1},
         {1, 1, 1, 1, 1, 1, 1, 1},
         {1, 1, 1, 1, 1, 1, 1, 1},
         {1, 1, 1, 1, 1, 1, 1, 1},
         {1, 1, 1, 1, 1, 1, 1, 1}
     };
     var loader = new ByteArrayMapLoader(map);
     _runner = GenericOpenHeroesRunner.CreateInstance(loader);
 }
        public void TestTwoFractionFunctionality()
        {
            Fraction             testFraction1        = new Fraction("test1");
            Fraction             testFraction2        = new Fraction("test2");
            Point                testPosition1        = new Point(1, 1);
            Point                testPosition2        = new Point(1, 2);
            TerritoryChangeEvent territoryChangeEvent = new TerritoryChangeEvent(testPosition1, testFraction1);

            JEventBus.GetDefault().Post(territoryChangeEvent);
            territoryChangeEvent = new TerritoryChangeEvent(testPosition2, testFraction2);
            JEventBus.GetDefault().Post(territoryChangeEvent);

            FindTerritoryOwnerEvent checkTestPositionOwner = new FindTerritoryOwnerEvent(testPosition1);

            JEventBus.GetDefault().Post(checkTestPositionOwner);
            Assert.IsTrue(checkTestPositionOwner.Success);
            Assert.IsNotNull(checkTestPositionOwner.Owner);
            Assert.IsTrue(testFraction1 == checkTestPositionOwner.Owner);

            checkTestPositionOwner = new FindTerritoryOwnerEvent(testPosition2);
            JEventBus.GetDefault().Post(checkTestPositionOwner);
            Assert.IsTrue(checkTestPositionOwner.Success);
            Assert.IsNotNull(checkTestPositionOwner.Owner);
            Assert.IsTrue(testFraction2 == checkTestPositionOwner.Owner);

            foreach (var utp in new SquareRadiusForeach(testPosition1, 1, 8, 8, true).LikePointList())
            {
                FindTerritoryOwnerEvent findTerritoryOwnerEvent = new FindTerritoryOwnerEvent(utp);
                JEventBus.GetDefault().Post(findTerritoryOwnerEvent);
                Assert.IsTrue(findTerritoryOwnerEvent.Success);
                if (!utp.Equals(testPosition2))
                {
                    Assert.IsNull(findTerritoryOwnerEvent.Owner);
                }
            }


            FindNeighboredEvent findNeighbored = new FindNeighboredEvent(testPosition1);

            JEventBus.GetDefault().Post(findNeighbored);
            Assert.IsTrue(findNeighbored.Success);
            Assert.IsNotNull(findNeighbored.NeighborFractions);
            Assert.IsNotNull(findNeighbored.Neighbors);
            Assert.AreEqual(2, findNeighbored.NeighborFractions.Count);
            Assert.AreEqual(8, findNeighbored.Neighbors.Count);
        }
Exemplo n.º 26
0
        public void RegisterClassicSubscriberWithPriority2()
        {
            var subscriber1 = new TestPriority1EventHandler();
            var subscriber2 = new TestPriority2EventHandler();
            var subscriber3 = new TestPriority3EventHandler();

            JEventBus.GetDefault().Register(subscriber1);
            JEventBus.GetDefault().Register(subscriber2);
            JEventBus.GetDefault().Register(subscriber3);

            for (int i = 0; i < 100; i++)
            {
                var testEvent = new TestEventWithParam();
                JEventBus.GetDefault().Post(testEvent);
                Assert.AreEqual(3, testEvent.Param);
            }
        }
Exemplo n.º 27
0
        public static void AddMineToFraction(Point tilePosition, Fraction fraction, JEventBus eventBus = null)
        {
            if (eventBus == null)
            {
                eventBus = JEventBus.GetDefault();
            }

            FindNearestStructure findNearestStructure = new FindNearestStructure(tilePosition, 0);

            eventBus.Post(findNearestStructure);
            var entity = findNearestStructure.Nearest;

            if (entity == null)
            {
                return;
            }
            AddMineToFraction(entity, fraction, eventBus);
        }
        public void TestEncirclementBug2()
        {
            Fraction testFraction = new Fraction("test");
            Point    testPosition = new Point(2, 2);

            foreach (var utp in new SquareRadiusForeach(testPosition, 1, 8, 8).LikePointList())
            {
                TerritoryApi.ChangeTerritoryOwner(utp, testFraction);
            }

            FindTerritoryOwnerEvent checkTestPositionOwner = new FindTerritoryOwnerEvent(testPosition);

            JEventBus.GetDefault().Post(checkTestPositionOwner);
            Assert.IsTrue(checkTestPositionOwner.Success);
            Assert.IsNotNull(checkTestPositionOwner.Owner);
            Assert.AreEqual(testFraction, checkTestPositionOwner.Owner);

            Assert.AreEqual(9, TerritoryApi.GetTerritoryCellsAmount(testFraction));
        }
        public void TestEncirclementBug1()
        {
            Fraction        testFraction    = new Fraction("test");
            Point           testPosition    = new Point(0, 0);
            PositionBuilder positionBuilder = new PositionBuilder(testPosition);

            TerritoryApi.ChangeTerritoryOwner(testPosition, testFraction);
            TerritoryApi.ChangeTerritoryOwner(positionBuilder.Top(), testFraction);
            TerritoryApi.ChangeTerritoryOwner(positionBuilder.Right(), testFraction);
            TerritoryApi.ChangeTerritoryOwner(positionBuilder.TopRight(), testFraction);

            FindTerritoryOwnerEvent checkTestPositionOwner = new FindTerritoryOwnerEvent(testPosition);

            JEventBus.GetDefault().Post(checkTestPositionOwner);
            Assert.IsTrue(checkTestPositionOwner.Success);
            Assert.IsNotNull(checkTestPositionOwner.Owner);
            Assert.AreEqual(testFraction, checkTestPositionOwner.Owner);

            Assert.AreEqual(4, TerritoryApi.GetTerritoryCellsAmount(testFraction));
        }
Exemplo n.º 30
0
        public void TestBaseFunctionality()
        {
            Fraction testFraction = new Fraction("test");
            Point testPosition = new Point(4, 4);

            CreateUrbanEvent createUrbanEvent = new CreateUrbanEvent(testPosition, 1000, 0.1f);
            JEventBus.GetDefault().Post(createUrbanEvent);

            _runner.Update();
            FindUrbanInformationEvent findUrbanInformationEvent = new FindUrbanInformationEvent(testPosition);
            JEventBus.GetDefault().Post(findUrbanInformationEvent);
            Assert.IsTrue(findUrbanInformationEvent.Success);
            Assert.AreEqual(1101, findUrbanInformationEvent.Urban.Population);

            _runner.Update();
            findUrbanInformationEvent = new FindUrbanInformationEvent(testPosition);
            JEventBus.GetDefault().Post(findUrbanInformationEvent);
            Assert.IsTrue(findUrbanInformationEvent.Success);
            Assert.AreEqual(1212, findUrbanInformationEvent.Urban.Population);
        }