OverviewFilesCommitsIssuesDocsReleasesPeers

proc-nodes / src / core / proc_instances.h

45 lines · c ref:
#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