private bool TryTranslateStep(Vector2 offset, ref float distanceToTravel, ref bool didMove) { // // const float epsilon = (float) 1e-8; // if (Math.Abs(offset.magnitude) < epsilon) // { // return false; // } Vector3 targetPosition = transform.position + (Vector3)offset; bool walkable = GameSurface.Instance.IsWalkableAtWorldPosition(targetPosition); if (!walkable) { return(false); } transform.position += (Vector3)offset; Vector2Int newPosition = GameSurface.WorldSpaceToGrid(transform.position); if (newPosition != _currentNodePosition) { _lastNodePosition = _currentNodePosition; } _currentNodePosition = newPosition; didMove = true; distanceToTravel -= offset.magnitude; return(true); }
private Vector2 GetNormalAtWorldPosition(Vector2 targetPosition) { int sampleWidth = 4; Vector2 wallNormal = Vector2.zero; Vector2Int gridPosition = GameSurface.WorldSpaceToGrid(targetPosition); for (int x = -sampleWidth; x < sampleWidth + 1; x++) { for (int y = -sampleWidth; y < sampleWidth + 1; y++) { if ((x == 0) && (y == 0)) { continue; } Vector2Int gridOffset = new Vector2Int(x, y); if (GameSurface.Instance.IsWalkableAtGridPosition(gridPosition + gridOffset)) { wallNormal += ((Vector2)gridOffset).normalized; } } } return(wallNormal.normalized); }
private bool TrySafePlayerFromFalling() { Vector2?closestSafePosition = null; float closestSafePositionDistance = float.MaxValue; for (int x = -PixelTollelranceWhenFalling; x < PixelTollelranceWhenFalling + 1; x++) { for (int y = -PixelTollelranceWhenFalling; y < PixelTollelranceWhenFalling + 1; y++) { Vector2Int potentialSafePosition = _lastNodePosition + new Vector2Int(x, y); if (GameSurface.Instance.IsWalkableAtGridPosition(potentialSafePosition)) { Vector2 safePositionWS = GameSurface.GridPositionToWorldPosition(potentialSafePosition); float distance = Vector2.Distance(transform.position, safePositionWS); if (distance < closestSafePositionDistance) { closestSafePosition = safePositionWS; closestSafePositionDistance = distance; } } } } if (closestSafePosition.HasValue) { transform.position = closestSafePosition.Value; return(true); } return(false); }
public GameSurfaceSingleCutEvent(Vector2 from, Vector2 to) { Vector2Int fromGridPos = GameSurface.WorldSpaceToGrid(from); Vector2Int toGridPos = GameSurface.WorldSpaceToGrid(to); _fromX = (byte)math.clamp(fromGridPos.x, 0, 255); _fromY = (byte)math.clamp(fromGridPos.y, 0, 255); _toX = (byte)math.clamp(toGridPos.x, 0, 255); _toY = (byte)math.clamp(toGridPos.y, 0, 255); }
private void PlaceAIMove() { #if COMPUTER_AGAINST_ITSELF Task.Run(() => { #endif var move = _game.GetAIMove(CurrentPlayer); GameSurface.Invoke((MethodInvoker)delegate { PlaceMove(move); }); #if COMPUTER_AGAINST_ITSELF }); #endif }
public void Execute(int index) { Vector2Int gridPosition = GameSurface.GridIndexToGridPosition(index); int x = gridPosition.x; int y = gridPosition.y; Vector2 positonWS = GameSurface.GridPositionToWorldPosition(gridPosition); if (Vector2.Distance(Position, positonWS) < Radius) { int indexAtPosition = GameSurface.GetIndexAtGridPosition(new Vector2Int(x, y)); Surface[indexAtPosition] = OverwriteState; } }
public static object Deserialize(byte[] data) { byte x = data[0]; byte y = data[1]; Vector3 position = GameSurface.GridPositionToWorldPosition(new Vector2Int(x, y)); float radiusBitMask = (data[2] & RadiusBitMask) / GameSurface.Size; bool healSurface = (data[2] & HealSurfaceBitMask) != 0; return(new GameSurfaceCircleEvent { WorldPosition = position, Radius = radiusBitMask, HealSurface = healSurface, }); }
private static byte[] Serialize(object customType) { GameSurfaceCircleEvent gameSurfaceCircleEvent = (GameSurfaceCircleEvent)customType; byte normalizedRadius = (byte)math.clamp(gameSurfaceCircleEvent.Radius * GameSurface.Size, 0, RadiusBitMask); byte packedByte = normalizedRadius; if (gameSurfaceCircleEvent.HealSurface) { packedByte |= HealSurfaceBitMask; } Vector2Int gridPosition = GameSurface.WorldSpaceToGrid(gameSurfaceCircleEvent.WorldPosition); return(new[] { (byte)math.clamp(gridPosition.x, 0, 255), (byte)math.clamp(gridPosition.y, 0, 255), packedByte, }); }
public void Do(GameSurface surface) { }
public GameSettings() { GameSurface = new GameSurface(); }