public void HandleHoleAdded(DynamicTerrainHoleDescription holeDescription) { InvalidatePaths(); foreach (var entity in AssociatedEntities) { var characterRadius = statsCalculator.ComputeCharacterRadius(entity); var paddedHoleDilationRadius = characterRadius + InternalTerrainCompilationConstants.AdditionalHoleDilationRadius + InternalTerrainCompilationConstants.TriangleEdgeBufferRadius; if (holeDescription.ContainsPoint(paddedHoleDilationRadius, entity.MovementComponent.WorldPosition)) { // Console.WriteLine("Out ouf bounds!"); FixEntityInHole(entity); } } }
public RemoveTemporaryHoleGameEvent(GameTime time, GameLogicFacade gameLogicFacade, DynamicTerrainHoleDescription dynamicTerrainHoleDescription) : base(time) { this.gameLogicFacade = gameLogicFacade; this.dynamicTerrainHoleDescription = dynamicTerrainHoleDescription; }
public void AddTemporaryHole(DynamicTerrainHoleDescription holeDescription) { terrainService.AddTemporaryHoleDescription(holeDescription); // todo: can optimize to only invalidate paths intersecting hole. movementSystemService.HandleHoleAdded(holeDescription); }
public void RemoveTemporaryHole(DynamicTerrainHoleDescription holeDescription) { terrainService.RemoveTemporaryHoleDescription(holeDescription); movementSystemService.InvalidatePaths(); }
public GameEvent CreateRemoveTemporaryHoleEvent(GameTime time, DynamicTerrainHoleDescription dynamicTerrainHoleDescription) { return(new RemoveTemporaryHoleGameEvent(time, GameLogicFacade, dynamicTerrainHoleDescription)); }