Class GBGridRotationUtils
- Namespace
- GridPlacement.GDScript
- Assembly
- MoonBark.GridPlacement.GDScript.dll
Grid-aware object rotation utilities for 2D grid-based games.\n\nProvides clean, typed helper functions for rotating objects on a grid with proper alignment to grid tiles, particularly for isometric and square tile layouts. Supports configurable rotation increments (90°, 45°, 30°, 60°, or any custom angle).\n\nKey features: - Configurable rotation increments (4-direction, 8-direction, or any custom angle) - Cardinal direction rotation (backward compatible, convenience API) - Isometric-aware rotation handling with complex transform support - Snap-to-grid positioning after rotation - Integration with existing GridPositioner2D and GBPositioning2DUtils - Static methods for easy testing and reuse\n\nUsage Examples: - 4-direction (RTS-style): rotate_node_clockwise(node, map, 90.0) - 8-direction (isometric with diagonals): rotate_node_clockwise(node, map, 45.0) - 6-direction (hex-style): rotate_node_clockwise(node, map, 60.0) - 12-direction: rotate_node_clockwise(node, map, 30.0)\n\nDesigned to work seamlessly with the existing Grid Building plugin architecture while providing specialized rotation functionality for grid-based gameplay.
class GBGridRotationUtils extends RefCounted
Properties
normalized
var normalized: float = fmod(degrees, 360.0)
rounded
var rounded: float = round(normalized / 90.0) * 90.0
current_rotation_deg
var current_rotation_deg: float = _normalize_degrees(rad_to_deg(node.global_rotation))
new_rotation_deg
var new_rotation_deg: float = _normalize_degrees(current_rotation_deg - increment_degrees)
target_global_rotation
var target_global_rotation = deg_to_rad(cardinal_to_degrees(direction))
current_rotation_deg
var current_rotation_deg: float = _normalize_degrees(rad_to_deg(node.global_rotation))
new_rotation_deg
var new_rotation_deg: float = _normalize_degrees(current_rotation_deg - increment_degrees)
target_global_rotation
var target_global_rotation = deg_to_rad(cardinal_to_degrees(direction))
target_global_rotation
var target_global_rotation = deg_to_rad(cardinal_to_degrees(direction))
current_tile
var current_tile: Vector2i = GBPositioning2DUtils.get_tile_from_global_position(node.global_position, map)
normalized
var normalized: float = fmod(degrees, 360.0)
result
var result = {
move_delta
var move_delta = get_direction_tile_delta(movement_direction)
parent_node
var parent_node: Node = node.get_parent()
parent_2d
var parent_2d: Node2D = parent_node as Node2D
original_global_position
var original_global_position: Vector2 = node.global_position
target_global_transform
var target_global_transform: Transform2D = Transform2D()
parent_global_transform
var parent_global_transform: Transform2D = parent_2d.global_transform
required_local_transform
var required_local_transform: Transform2D = parent_global_transform.affine_inverse() * target_global_transform
required_local_rotation
var required_local_rotation: float = required_local_transform.get_rotation()
Methods
degrees_to_cardinal
static func degrees_to_cardinal(degrees: float) -> CardinalDirection:
Parameters
degrees
Returns
cardinal_to_degrees
static func cardinal_to_degrees(direction: CardinalDirection) -> float:
Parameters
direction
Returns
rotate_clockwise
static func rotate_clockwise(current: CardinalDirection) -> CardinalDirection:
Parameters
current
Returns
rotate_counter_clockwise
static func rotate_counter_clockwise(current: CardinalDirection) -> CardinalDirection:
Parameters
current
Returns
rotate_node_clockwise
static func rotate_node_clockwise(node: Node2D, map: TileMapLayer, increment_degrees: float = 90.0, snap_to_grid: bool = true) -> float:
Parameters
nodemapincrement_degreessnap_to_grid
Returns
rotate_node_counter_clockwise
static func rotate_node_counter_clockwise(node: Node2D, map: TileMapLayer, increment_degrees: float = 90.0, snap_to_grid: bool = true) -> float:
Parameters
nodemapincrement_degreessnap_to_grid
Returns
set_node_direction
static func set_node_direction(node: Node2D, direction: CardinalDirection, map: TileMapLayer, snap_to_grid: bool = true) -> void:
Parameters
nodedirectionmapsnap_to_grid
Returns
get_direction_tile_delta
static func get_direction_tile_delta(direction: CardinalDirection) -> Vector2i:
Parameters
direction
Returns
get_opposite_direction
static func get_opposite_direction(direction: CardinalDirection) -> CardinalDirection:
Parameters
direction
Returns
is_horizontal
static func is_horizontal(direction: CardinalDirection) -> bool:
Parameters
direction
Returns
is_vertical
static func is_vertical(direction: CardinalDirection) -> bool:
Parameters
direction
Returns
direction_to_string
static func direction_to_string(direction: CardinalDirection) -> String:
Parameters
direction
Returns
rotate_and_move_node
static func rotate_and_move_node( node: Node2D,