#ifndef PROC_NODES_PROC_INSTANCES_H
#define PROC_NODES_PROC_INSTANCES_H
#include "attribute_storage.h"
#include <godot_cpp/classes/multi_mesh.hpp>
#include <godot_cpp/classes/ref_counted.hpp>
#include <godot_cpp/variant/packed_int32_array.hpp>
#include <godot_cpp/variant/transform3d.hpp>
namespace godot {
class ProcGeometry;
class ProcInstances : public RefCounted {
GDCLASS(ProcInstances, RefCounted);
protected:
static void _bind_methods();
public:
// Instance references (deduplicated geometries)
Vector<Ref<ProcGeometry>> references;
// Per-instance data
PackedInt32Array reference_indices; // Which reference each instance uses
Vector<Transform3D> transforms;
AttributeStorage instance_attrs;
int instance_count() const { return transforms.size(); }
int reference_count() const { return references.size(); }
int domain_size(AttrDomain p_domain) const;
// Convert to Godot MultiMesh (uses first reference's mesh)
Ref<MultiMesh> to_multimesh() const;
Ref<ProcInstances> duplicate_instances() const;
ProcInstances() = default;
};
} // namespace godot
#endif // PROC_NODES_PROC_INSTANCES_H