Пример #1
0
        public static List <Point> GetTerritoryCells(Fraction owner, JEventBus eventBus = null)
        {
            FindTerritoriesCellEvent findTerritoriesCellEvent = new FindTerritoriesCellEvent(owner);

            BaseApi.SendEvent(eventBus, findTerritoriesCellEvent);
            return(findTerritoriesCellEvent.Results ?? new List <Point>());
        }
Пример #2
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;
            }
        }
        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);
            }
        }
Пример #5
0
        public static int GetTerrainAmountsByType(byte terrainType, JEventBus eventBus = null)
        {
            FindTerrainCellsAmount findTerrainCellsAmount = new FindTerrainCellsAmount(terrainType);

            BaseApi.SendEvent(eventBus, findTerrainCellsAmount);
            return((int)findTerrainCellsAmount.Result);
        }
Пример #6
0
        public static bool IsWater(Point tilePosition, JEventBus eventBus = null)
        {
            FindTileTypeEvent findTileTypeEvent = new FindTileTypeEvent(tilePosition);

            BaseApi.SendEvent(eventBus, findTileTypeEvent);
            return(findTileTypeEvent.Result <= 0);
        }
Пример #7
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);
            }
        }
Пример #8
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);
            }
        }
Пример #9
0
        public static int GetTerritoryCellsAmount(Fraction owner, JEventBus eventBus = null)
        {
            FindTerritoriesCellEvent findTerritoriesCellEvent = new FindTerritoriesCellEvent(owner);

            BaseApi.SendEvent(eventBus, findTerritoriesCellEvent);
            return(findTerritoriesCellEvent.Results?.Count ?? 0);
        }
Пример #10
0
 public static void SendEvent(JEventBus eventBus, object eventToSend)
 {
     if (eventBus == null)
     {
         eventBus = JEventBus.GetDefault();
     }
     eventBus.Post(eventToSend);
 }
Пример #11
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);
        }
Пример #12
0
        public static float GetTerritoryCellPercentAmount(Fraction owner, JEventBus eventBus = null)
        {
            int   territories = GetTerritoryCellsAmount(owner, eventBus);
            int   grounds     = TerrainApi.GetTerrainAmountsByType(1);
            float result      = (territories / (float)grounds) * 100f;

            return(result);
        }
Пример #13
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);
        }
Пример #14
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);
        }
Пример #15
0
        public static void AddStructure(Point position, string structureName, JEventBus eventBus = null)
        {
            StructureDefinition         structureDefinition         = new StructureDefinition(structureName, new Point(1, 1));
            Structure                   structure                   = new Structure(structureDefinition);
            AddStructureOnWorldMapEvent addStructureOnWorldMapEvent =
                new AddStructureOnWorldMapEvent(structure, position);

            BaseApi.SendEvent(eventBus, addStructureOnWorldMapEvent);
        }
Пример #16
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));
        }
Пример #17
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();
        }
        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);
        }
Пример #20
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);
        }
Пример #21
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);
        }
Пример #22
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);
        }
Пример #23
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));
        }
        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);
            }
        }
Пример #25
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);
        }
Пример #26
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);
        }
Пример #27
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);
        }
Пример #28
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);
        }
Пример #29
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;
            }
        }
Пример #30
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);
 }