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 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); } }
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); } }
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); }
public static void SendEvent(JEventBus eventBus, object eventToSend) { if (eventBus == null) { eventBus = JEventBus.GetDefault(); } eventBus.Post(eventToSend); }
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); }
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); }
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); }
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); }
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 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); }
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); }
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)); }
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); }
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); } }
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); }
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); }
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); }
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; } }
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); }
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); } }
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)); }
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); }