Topic was automatically imported from the old Question2Answer platform.
Asked By
AI_notFound
Im making a magic game in godot 4 and am using a path2d and pathfollow2d to make spell paths. for one of these spell trajectories, I need the spell to orbit around the player, so I have this code
extends CharacterBody2D
@onready var spellpath = $Spell_path
@onready var spellraycast = $Spell_path/RayCast2D
func _ready():
var orbit = Curve2D.new()
for x in range(0, 360):
spellraycast.set_global_rotation(x)
orbit.add_point(spellraycast.target_position)
spellpath.set_curve(orbit)
I’m not sure what the question is here?
jgodfrey | 2023-03-06 04:05
Sorry, I forgot to ask the question :(, it doesn’t work for some reason. The ray just shows up pointing at the bottom left and no points are created. I don’t know what I’m doing wrong or if this method just doesn’t work
You’re using a ray cast to do what now?
That’s pretty much overkill
Math is the solution here
extends CharacterBody2D
@onready var spellpath = $Spell_path
@onready var spellraycast = $Spell_path/RayCast2D
# adds points to curve2D in a circle
# - center: the center point of the circle
# - radius: controls the size of the circle
# - points: the amount of points to add to the curve2D
func set_spell_path(curve: Curve2D, center: Vector2, radius: float, points: int):
for i in range(points +1):
# Calculate the angle for this point on the circle
var angle = (i / float(points)) * TAU
# Calculate the x and y coordinates of the point on the circle
var x = center.x + radius * cos(angle)
var y = center.y + radius * sin(angle)
# Add the point to the curve
curve.add_point(Vector2(x, y))
func _ready():
set_spell_path(spellpath.curve, global_position, 100, 20)
This is one of those functions that you will need continually and you should add it to your toolkit, removing the curve and returning an Array of vector2’s also maybe adding another param to create ellipticals
Godot4 has a Geometry2D class that also does the above but as said before this is good to know