abstract class
Eagle::CollisionObject2D
- Eagle::CollisionObject2D
- Eagle::Node2D
- Eagle::Node
- Reference
- Object
Overview
Base class for 2D physics nodes. It owns a Physics2D::Body in Physics2D.world and keeps
the node's transform and the body in sync.
Give it a shape with #circle, #box, #polygon or a CollisionShape2D child. Pick the
subclass by how the object should move:
StaticBody2Dnever moves: floors, walls.RigidBody2Dis moved by the simulation: crates, balls, ragdolls.KinematicBody2Dis moved by your code withmove_and_slide: players, moving platforms.Area2Donly detects overlaps: pickups, triggers, damage zones.
Collision layers decide what touches what. Two objects collide when each one's #layer
has a bit in common with the other's #mask.
PLAYER = 1_u32
ENEMY = 2_u32
player = KinematicBody2D.new(position: v2(100, 100)).box(20, 32)
player.layer = PLAYER
player.mask = ENEMY | 4_u32 # collide with enemies and the world (bit 3)
pickup = Area2D.new(position: v2(300, 100)).circle(10)
pickup.on_body_entered { |other| pickup.queue_free if other == player }
Set debug = true to draw the shapes' outlines.
Direct Known Subclasses
Defined in:
eagle/nodes/physics_nodes.crConstructors
-
.new(type : Physics2D::BodyType, name : String = "", position : Vec2 = Vec2::ZERO, shape : Physics2D::Shape | Nil = nil)
Creates the node and its body.
Instance Method Summary
-
#add_shape(s : Physics2D::Shape) : self
Adds a raw
Physics2D::Shape. -
#body : Physics2D::Body
The underlying physics body, for settings the node doesn't expose.
-
#body_entered : Eagle::Emitter(CollisionObject2D)
Emitted when another collision object starts touching or overlapping this one.
-
#body_exited : Eagle::Emitter(CollisionObject2D)
Emitted when another collision object stops touching or overlapping this one.
-
#box(w : Number, h : Number, offset : Vec2 = Vec2::ZERO) : self
Adds a box shape centered on offset.
-
#circle(radius : Number, offset : Vec2 = Vec2::ZERO) : self
Adds a circle shape.
-
#debug=(debug : Bool)
Draws the body's shapes as outlines.
-
#debug? : Bool
Draws the body's shapes as outlines.
-
#draw(g : Graphics) : Nil
Draws shape outlines when
debugis on. -
#emit_body_entered(*args) : Nil
Emitted when another collision object starts touching or overlapping this one.
-
#emit_body_exited(*args) : Nil
Emitted when another collision object stops touching or overlapping this one.
-
#enter_tree : Nil
Adds the body to the world.
-
#exit_tree : Nil
Removes the body from the world.
-
#layer : UInt32
The layer bits this object is on.
-
#layer=(v : UInt32)
Sets the layer bits.
-
#mask : UInt32
The layer bits this object collides with.
-
#mask=(v : UInt32)
Sets the mask bits.
-
#on_body_entered(&block : CollisionObject2D -> Nil) : Proc(CollisionObject2D, Nil)
Emitted when another collision object starts touching or overlapping this one.
-
#on_body_exited(&block : CollisionObject2D -> Nil) : Proc(CollisionObject2D, Nil)
Emitted when another collision object stops touching or overlapping this one.
-
#overlapping : Array(CollisionObject2D)
Every collision object currently touching or overlapping this one.
-
#overlaps?(other : CollisionObject2D) : Bool
True when other is touching or overlapping this one.
-
#physics_process(dt : Float32) : Nil
Syncs the node and the body after each physics step.
-
#polygon(points : Array(Vec2)) : self
Adds a convex polygon shape.
-
#pull_transform : Nil
Copies the body's position and rotation onto the node.
-
#push_transform : Nil
Copies the node's global position and rotation onto the body.
-
#world : Physics2D::World
The physics world the body lives in.
-
#world=(world : Physics2D::World)
The physics world the body lives in.
Instance methods inherited from class Eagle::Node2D
direction_to(other : Node2D) : Vec2
direction_to,
distance_to(other : Node2D) : Float32
distance_to,
down : Vec2
down,
forward : Vec2
forward,
global_position : Vec2
global_position,
global_position=(p : Vec2)
global_position=,
global_rotation : Float32
global_rotation,
global_scale : Vec2
global_scale,
global_transform : Transform2D
global_transform,
look_at(target : Vec2) : Nil
look_at,
modulate : Color
modulate,
modulate=(modulate : Color)
modulate=,
parent_2d : Node2D | Nil
parent_2d,
position : Vec2
position,
position=(p : Vec2)
position=,
right : Vec2
right,
rotate(rad : Number) : Nil
rotate,
rotation : Float32
rotation,
rotation=(rotation : Float32)
rotation=,
rotation_degrees : Float32
rotation_degrees,
rotation_degrees=(d : Number)
rotation_degrees=,
scale : Vec2
scale,
scale=(s : Vec2)scale=(s : Number) scale=, to_global(local : Vec2) : Vec2 to_global, to_local(global : Vec2) : Vec2 to_local, top_level=(top_level : Bool) top_level=, top_level? : Bool top_level?, transform : Transform2D transform, transform=(t : Transform2D) transform=, translate(x : Number, y : Number) : Nil
translate(v : Vec2) : Nil translate, x : Float32 x, x=(v : Number) x=, y : Float32 y, y=(v : Number) y=
Constructor methods inherited from class Eagle::Node2D
new(name : String = "", position : Eagle::Vec2 = Vec2::ZERO, rotation : Float32 = 0_f32, scale : Eagle::Vec2 = Vec2::ONE)
new
Instance methods inherited from class Eagle::Node
<<(child : Node) : self
<<,
[](path : String) : Node
[],
[]?(path : String) : Node | Nil
[]?,
add(child : Node) : Nodeadd(*children : Node) : Nil add, add_child(child : Node) : Node add_child, add_to_group(group : String) : self add_to_group, ancestor_of?(node : Node) : Bool ancestor_of?, can_process? : Bool can_process?, child?(name : String) : Node | Nil child?, child_added : Eagle::Emitter(Node) child_added, child_count : Int32 child_count, child_removed : Eagle::Emitter(Node) child_removed, children : Array(Eagle::Node) children, children_of(type : T.class) : Array(T) forall T children_of, clear_children : Nil clear_children, draw(g : Graphics) : Nil draw, dump(io : IO = STDOUT, indent = 0) : Nil dump, each_ancestor(& : Node -> ) : Nil each_ancestor, each_child(& : Node -> ) : Nil each_child, each_descendant(&block : Node -> ) : Nil each_descendant, emit_child_added(*args) : Nil emit_child_added, emit_child_removed(*args) : Nil emit_child_removed, emit_tree_entered(*args) : Nil emit_tree_entered, emit_tree_exited(*args) : Nil emit_tree_exited, enter_tree : Nil enter_tree, exit_tree : Nil exit_tree, find(name : String) : Node | Nil find, find_all(type : T.class) : Array(T) forall T find_all, first_child : Node | Nil first_child, free : Nil free, get_node(path : String, type : T.class) : T forall T
get_node(path : String) : Node get_node, get_node?(path : String) : Node | Nil get_node?, groups : Set(String) groups, in_group?(group : String) : Bool in_group?, in_tree? : Bool in_tree?, input(event : Event) : Nil input, name : String name, name=(name : String) name=, on_child_added(&block : Node -> Nil) : Proc(Node, Nil) on_child_added, on_child_removed(&block : Node -> Nil) : Proc(Node, Nil) on_child_removed, on_tree_entered(&block : -> Nil) : Proc(Nil) on_tree_entered, on_tree_exited(&block : -> Nil) : Proc(Nil) on_tree_exited, parent : Node | Nil parent, path : String path, physics_process(dt : Float32) : Nil physics_process, process(dt : Float32) : Nil process, process_mode : Eagle::Node::ProcessMode process_mode, process_mode=(process_mode : Eagle::Node::ProcessMode) process_mode=, queue_free : Nil queue_free, queued_free? : Bool queued_free?, ready : Nil ready, ready_called? : Bool ready_called?, remove(child : Node) : Nil remove, remove_child(child : Node) : Nil remove_child, remove_from_group(group : String) : Nil remove_from_group, remove_from_parent : Nil remove_from_parent, resized(width : Int32, height : Int32) : Nil resized, root : Node root, to_s(io : IO) : Nil to_s, tree_entered : Eagle::Emitter() tree_entered, tree_exited : Eagle::Emitter() tree_exited, visible=(visible : Bool) visible=, visible? : Bool visible?, z_index : Int32 z_index, z_index=(z_index : Int32) z_index=
Constructor methods inherited from class Eagle::Node
new(name : String = "")
new
Constructor Detail
Creates the node and its body.
Instance Method Detail
Emitted when another collision object starts touching or overlapping this one.
Connect with on_body_entered { |other| ... }.
Emitted when another collision object stops touching or overlapping this one.
Adds a box shape centered on offset. Returns self.
Emitted when another collision object starts touching or overlapping this one.
Connect with on_body_entered { |other| ... }.
Emitted when another collision object stops touching or overlapping this one.
Emitted when another collision object starts touching or overlapping this one.
Connect with on_body_entered { |other| ... }.
Emitted when another collision object stops touching or overlapping this one.
Every collision object currently touching or overlapping this one.
True when other is touching or overlapping this one.
Copies the node's global position and rotation onto the body. Call it after teleporting a rigid body by setting its position.
The physics world the body lives in. Defaults to Physics2D.world.