private bool CheckRangeAndSetFacing(EntityCoordinates target, IEntity player) { // ensure it's within their clickable range var targetWorldPos = target.ToMapPos(EntityManager); var rangeBox = new Box2(player.Transform.WorldPosition, player.Transform.WorldPosition) .Enlarged(_entityManager.MaxUpdateRange); if (!rangeBox.Contains(targetWorldPos)) { Logger.DebugS("action", "user {0} attempted to" + " perform target action further than allowed range", player.Name); return(false); } if (!ActionBlockerSystem.CanChangeDirection(player)) { return(true); } // don't set facing unless they clicked far enough away var diff = targetWorldPos - player.Transform.WorldPosition; if (diff.LengthSquared > 0.01f) { player.Transform.LocalRotation = new Angle(diff); } return(true); }
public bool AnyEntitiesIntersecting(MapId mapId, Box2 box) { foreach (var entity in GetEntities()) { var transform = entity.Transform; if (transform.MapID != mapId) { continue; } if (entity.TryGetComponent <BoundingBoxComponent>(out var component)) { if (box.Intersects(component.WorldAABB)) { return(true); } } else { if (box.Contains(transform.WorldPosition)) { return(true); } } } return(false); }
private void DrawJpsNodes(DrawingHandleScreen screenHandle, Box2 viewport) { foreach (var route in JpsRoutes) { foreach (var tile in route.JumpNodes) { if ((route.Route.Contains(tile) && (Modes & PathfindingDebugMode.Route) != 0) || !viewport.Contains(tile)) { continue; } var screenTile = _eyeManager.WorldToScreen(tile); var box = new UIBox2( screenTile.X - 15.0f, screenTile.Y - 15.0f, screenTile.X + 15.0f, screenTile.Y + 15.0f); screenHandle.DrawRect(box, new Color( 0.0f, 1.0f, 0.0f, 0.2f)); } } }
private void DrawAStarNodes(DrawingHandleScreen screenHandle, Box2 viewport) { foreach (var route in AStarRoutes) { var highestgScore = route.GScores.Values.Max(); foreach (var(tile, score) in route.GScores) { if ((route.Route.Contains(tile) && (Modes & PathfindingDebugMode.Route) != 0) || !viewport.Contains(tile)) { continue; } var screenTile = _eyeManager.WorldToScreen(tile); var box = new UIBox2( screenTile.X - 15.0f, screenTile.Y - 15.0f, screenTile.X + 15.0f, screenTile.Y + 15.0f); screenHandle.DrawRect(box, new Color( 0.0f, score / highestgScore, 1.0f - (score / highestgScore), 0.1f)); } } }
public bool CheckClickScreen(Vector2 screenPos, Vector2 mousePos) { if (!IsVisible(checkWorld: false)) { return(false); } if (Icon.Appearance.MouseOpacity == MouseOpacity.Transparent) { return(false); } Vector2 size = Icon.DMI.IconSize / (float)EyeManager.PixelsPerMeter * (ScreenLocation.RepeatX, ScreenLocation.RepeatY); Box2 iconBox = Box2.FromDimensions(screenPos, size); if (!iconBox.Contains(mousePos)) { return(false); } switch (Icon.Appearance.MouseOpacity) { case MouseOpacity.Opaque: return(true); case MouseOpacity.PixelOpaque: return(Icon.CheckClickScreen(screenPos, mousePos)); default: throw new InvalidOperationException("Invalid mouse_opacity"); } }
public IEnumerable <IEntity> GetEntitiesIntersecting(MapId mapId, Box2 position) { foreach (var entity in GetEntities()) { var transform = entity.Transform; if (transform.MapID != mapId) { continue; } if (entity.TryGetComponent <BoundingBoxComponent>(out var component)) { if (position.Intersects(component.WorldAABB)) { yield return(entity); } } else { if (position.Contains(transform.WorldPosition)) { yield return(entity); } } } }
private void DrawRegions(DrawingHandleScreen screenHandle, Box2 viewport) { var attachedEntity = _playerManager.LocalPlayer?.ControlledEntity; if (attachedEntity == null || !Regions.TryGetValue(attachedEntity.Transform.GridID, out var entityRegions)) { return; } foreach (var(chunk, regions) in entityRegions) { foreach (var(region, nodes) in regions) { foreach (var tile in nodes) { if (!viewport.Contains(tile)) { continue; } var screenTile = _eyeManager.WorldToScreen(tile); var box = new UIBox2( screenTile.X - 15.0f, screenTile.Y - 15.0f, screenTile.X + 15.0f, screenTile.Y + 15.0f); screenHandle.DrawRect(box, _regionColors[attachedEntity.Transform.GridID][chunk][region]); } } } }
private void RunUpdatesRecurse(float frameTime, Box2 bounds, IEntity entity, ref Matrix3 parentMatrix) { var localMatrix = entity.Transform.GetLocalMatrix(); Matrix3.Multiply(ref localMatrix, ref parentMatrix, out var matrix); foreach (var childUid in entity.Transform.ChildEntityUids) { var child = EntityManager.GetEntity(childUid); if (child.TryGetComponent(out ISpriteComponent sprite)) { var worldPosition = Matrix3.Transform(matrix, child.Transform.LocalPosition); if (!sprite.IsInert && bounds.Contains(worldPosition)) { sprite.FrameUpdate(frameTime); } } if (child.Transform.ChildCount != 0) { RunUpdatesRecurse(frameTime, bounds, child, ref matrix); } } }
private void CheckIfClicked(Vector2 mousePos, UIElement element) { Box2 bounds = element.GetBounds(); if (bounds.Contains(mousePos)) { element.action.Execute(); } }
public bool Contains(Vector2 point) { if (!_boundingBox.Contains(point)) { return(false); } else { return(Contours.Select(c => c.WindingNumber(point)).Sum() > 0); } }
public bool IsVisible(int width, int height, OsbOrigin origin, Box2 bounds) { if (Opacity <= 0) { return(false); } if (Scale.X == 0 || Scale.Y == 0) { return(false); } if (Additive && Color.R == 0 && Color.G == 0 && Color.B == 0) { return(false); } if (!bounds.Contains(Position)) { var w = width * Scale.X; var h = height * Scale.Y; Vector2 originVector; switch (origin) { default: case OsbOrigin.TopLeft: originVector = Vector2.Zero; break; case OsbOrigin.TopCentre: originVector = new Vector2(w * 0.5f, 0); break; case OsbOrigin.TopRight: originVector = new Vector2(w, 0); break; case OsbOrigin.CentreLeft: originVector = new Vector2(0, h * 0.5f); break; case OsbOrigin.Centre: originVector = new Vector2(w * 0.5f, h * 0.5f); break; case OsbOrigin.CentreRight: originVector = new Vector2(w, h * 0.5f); break; case OsbOrigin.BottomLeft: originVector = new Vector2(0, h); break; case OsbOrigin.BottomCentre: originVector = new Vector2(w * 0.5f, h); break; case OsbOrigin.BottomRight: originVector = new Vector2(w, h); break; } var obb = new OrientedBoundingBox(Position, originVector, w, h, Rotation); if (!obb.Intersects(bounds)) { return(false); } } return(true); }
public Cell GetCellAt(Vector2 position) { if (!Bounds.Contains(position)) { return(null); } foreach (var cell in Cells) { if (cell.Contains(position)) { return(cell); } } return(null); }
private void OnDrawGizmos() { Vector2 point = Point.position; Box2 box = CreateBox2(Box); bool cont = box.Contains(point); FiguresColor(); DrawBox(ref box); if (cont) { ResultsColor(); } DrawPoint(point); LogInfo(cont); }
private bool CheckRangeAndSetFacing(EntityCoordinates target, EntityUid player) { // ensure it's within their clickable range var targetWorldPos = target.ToMapPos(EntityManager); var rangeBox = new Box2(_entities.GetComponent <TransformComponent>(player).WorldPosition, _entities.GetComponent <TransformComponent>(player).WorldPosition) .Enlarged(MaxUpdateRange); if (!rangeBox.Contains(targetWorldPos)) { Logger.DebugS("action", "user {0} attempted to" + " perform target action further than allowed range", _entities.GetComponent <MetaDataComponent>(player).EntityName); return(false); } EntitySystem.Get <RotateToFaceSystem>().TryFaceCoordinates(player, targetWorldPos); return(true); }
public IEnumerable <IEntity> GetEntitiesIntersecting(Box2 position) { foreach (var entity in GetEntities()) { if (entity.TryGetComponent <BoundingBoxComponent>(out var component)) { if (position.Intersects(component.WorldAABB)) { yield return(entity); } } else { var transform = entity.GetComponent <ITransformComponent>(); if (position.Contains(transform.Position)) { yield return(entity); } } } }
public bool AnyEntitiesIntersecting(Box2 position) { foreach (var entity in GetEntities()) { if (entity.TryGetComponent <BoundingBoxComponent>(out var component)) { if (position.Intersects(component.WorldAABB)) { return(true); } } else { var transform = entity.GetComponent <ITransformComponent>(); if (position.Contains(transform.WorldPosition)) { return(true); } } } return(false); }
private void DrawJpsRoutes(DrawingHandleScreen screenHandle, Box2 viewport) { foreach (var route in JpsRoutes) { // Draw box on each tile of route foreach (var position in route.Route) { if (!viewport.Contains(position)) { continue; } var screenTile = _eyeManager.WorldToScreen(position); // worldHandle.DrawLine(position, nextWorld.Value, Color.Blue); var box = new UIBox2( screenTile.X - 15.0f, screenTile.Y - 15.0f, screenTile.X + 15.0f, screenTile.Y + 15.0f); screenHandle.DrawRect(box, Color.Orange.WithAlpha(0.25f)); } } }
private void DrawGraph(DrawingHandleScreen screenHandle, Box2 viewport) { foreach (var(chunk, nodes) in Graph) { foreach (var tile in nodes) { if (!viewport.Contains(tile)) { continue; } var screenTile = _eyeManager.WorldToScreen(tile); var box = new UIBox2( screenTile.X - 15.0f, screenTile.Y - 15.0f, screenTile.X + 15.0f, screenTile.Y + 15.0f); screenHandle.DrawRect(box, _graphColors[chunk]); } } }
/// <summary> /// Checks if the position is in the box. /// </summary> /// <param name="box">The box</param> /// <param name="pos">The position</param> /// <returns>True if pos is in box.</returns> public static bool Contains(this Box2 box, Vector2 pos) { return(box.Contains(pos.X, pos.Y)); }
public bool MoveNext([NotNullWhen(true)] out IMapGrid?grid) { while (true) { if (!_enumerator.MoveNext()) { grid = null; return(false); } var(_, nextGrid) = _enumerator.Current; if (nextGrid.ParentMapId != _mapId) { continue; } var xformComp = _entityManager.GetComponent <TransformComponent>(nextGrid.GridEntityId); var invMatrix3 = xformComp.InvWorldMatrix; var localAABB = invMatrix3.TransformBox(_worldAABB); if (!localAABB.Intersects(nextGrid.LocalBounds)) { continue; } var intersects = false; if (_entityManager.HasComponent <PhysicsComponent>(nextGrid.GridEntityId)) { nextGrid.GetLocalMapChunks(localAABB, out var enumerator); if (!_approx) { var(worldPos, worldRot) = xformComp.GetWorldPositionRotation(); var transform = new Transform(worldPos, worldRot); while (!intersects && enumerator.MoveNext(out var chunk)) { foreach (var fixture in chunk.Fixtures) { for (var i = 0; i < fixture.Shape.ChildCount; i++) { if (!fixture.Shape.ComputeAABB(transform, i).Intersects(_worldAABB)) { continue; } intersects = true; break; } if (intersects) { break; } } } } else { intersects = enumerator.MoveNext(out _); } } if (!intersects && nextGrid.ChunkCount == 0 && !_worldAABB.Contains(xformComp.WorldPosition)) { continue; } grid = nextGrid; return(true); } }