Table of Contents

Class PlacementGridRotationUtils

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 PlacementGridRotationUtils extends RefCounted
PlacementGridRotationUtils

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

node
map
increment_degrees
snap_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

node
map
increment_degrees
snap_to_grid

Returns

set_node_direction

static func set_node_direction(node: Node2D, direction: CardinalDirection, map: TileMapLayer, snap_to_grid: bool = true) -> void:

Parameters

node
direction
map
snap_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,