spwn 0.0.6

A language for Geometry Dash triggers
Documentation
#[no_std, cache_output]
extract import "constants.spwn"
type @obj_set

impl @obj_set {
    new: #[desc("Creates a new object set") example("
my_objects = @obj_set::new()
    ")]
    (
        objects: [@object] = [],
        #[desc("The center group to use for rotation")] group: @group = ?g
    ) {

        return {
            type: @obj_set,
            objects: objects,
            group: group,
        }
    },
    is_empty: #[desc("Returns true if this set contains no objects, false otherwise.") example("$.assert(@obj_set::new().is_empty())")]
    (self) {
        return self.objects.is_empty();
    },
    // ! The append builtin is broken at the moment, mutability is not preserved
    push: #[desc("Add new objects to the set")]
    (self, object: @object) {
        let to_push = object;
        $.append(self.objects, to_push)
    },
    add: #[desc("Add all the objects in the set to the game")]
    (self) {
        for object in self.objects {
            object.add()
        }
    },
    copy: #[desc("Create a copy of all the objects in this set as a new set")]
    (self) {
        return self;
    },
    rotate: #[desc("Applies a single rotation value to all of the objects in this set")]
    (self, deg: @number) {
        for i in ..self.objects.length {
            self.objects[i].set(obj_props.ROTATION, deg)
        }
    },
    rotate_relative: #[desc("Rotates objects in a set around a centerpoint")]
    (self, center_group: @group, deg: @number, duration: @number, easing: @easing_type, easing_rate: @number, lock_object_rotation: @bool) {
        self.group.rotate(center_group, deg, duration, easing, easing_rate, lock_object_rotation)
    }
}