# Skip's attempts to recreate common GML commands in Godot class_name GML # [ SIGNAL CHEATSHEET ] # # Declare and emit (with args) signal from source. # # signal hit # func _on_Hero_body_entered: # emit_signal("hit", "fck that hurt", 1) # # Connect and handle (with args) signal from destination. # # func _ready: # var proj = get_tree().get_root().find_node("Projectile",true,false) # proj.connect("hit", self, "handle_hit") # func handle_hit(message, damage): # print(message) # health -= damage static func choose(choices): # Picks a random item from a given array, "choices", of any size. # Ex: cardinal = choose(["north", "south", "east", "west"]) return choices[randi() % choices.size()] static func instance_create(x, y, scene_path, parent) -> Node: # Creates an instance of a given node at the given coordinates # as a child of a given parent. # Ex: instance_create(30, 100, "res://Actors/EnemyShip.tscn", self) var scene = load(scene_path) var id = scene.instance() id.position = Vector2(x, y) parent.add_child(id) return id static func image_angle(me, degrees): me.rotation_degrees = degrees static func point_direction(x1, y1, x2, y2) -> float: # Returns the angle (in degrees) specified by two given points. # Ex: rotation_degrees = point_direction($Hero.position.x, $Hero.position.y, $Enemy.position.x, $Enemy.position.y) return rad2deg(Vector2(x2, y2).angle_to_point(Vector2(x1, y1))) static func move_xy(distance, angle_in_degrees) -> Vector2: # Returns new (relative) coordinates depicting a point having moved a given distance (in pixels) in a given direction (angle in degrees). # Ex: Enemy.position += move_xy(speed, Hero.position.angle_to_point(Enemy.position)) return Vector2(cos(deg2rad(angle_in_degrees)),sin(deg2rad(angle_in_degrees))) * distance static func distance_to_object(node1, node2) -> float: # Returns the distance between node1 and node2 (in pixels) # Ex: if distance_to_object(self, $Alarm) < 50: return node1.position.distance_to(node2.position) static func game_end(me): # Quit the game. # Ex: game_end(self) me.get_tree().quit() static func room_restart(me): # Restart the scene. # Ex: room_restart(self) me.get_tree().reload_current_scene()