#ifndef PROC_NODES_INSTANCE_NODES_H
#define PROC_NODES_INSTANCE_NODES_H
#include "../graph/proc_node.h"
namespace godot {
// Place instance geometry at each point in a pointcloud/mesh
class InstanceOnPointsNode : public ProcNode {
GDCLASS(InstanceOnPointsNode, ProcNode);
protected:
static void _bind_methods();
public:
StringName get_node_type() const override { return "InstanceOnPoints"; }
String get_node_title() const override { return "Instance on Points"; }
String get_node_category() const override { return "Instance"; }
void execute(ProcEvalContext &p_ctx, int p_node_idx) override;
InstanceOnPointsNode();
};
class RotateInstancesNode : public ProcNode {
GDCLASS(RotateInstancesNode, ProcNode);
protected:
static void _bind_methods();
public:
StringName get_node_type() const override { return "RotateInstances"; }
String get_node_title() const override { return "Rotate Instances"; }
String get_node_category() const override { return "Instance"; }
bool supports_gpu() const override { return true; }
void execute(ProcEvalContext &p_ctx, int p_node_idx) override;
RotateInstancesNode();
};
class ScaleInstancesNode : public ProcNode {
GDCLASS(ScaleInstancesNode, ProcNode);
protected:
static void _bind_methods();
public:
StringName get_node_type() const override { return "ScaleInstances"; }
String get_node_title() const override { return "Scale Instances"; }
String get_node_category() const override { return "Instance"; }
bool supports_gpu() const override { return true; }
void execute(ProcEvalContext &p_ctx, int p_node_idx) override;
ScaleInstancesNode();
};
class TranslateInstancesNode : public ProcNode {
GDCLASS(TranslateInstancesNode, ProcNode);
protected:
static void _bind_methods();
public:
StringName get_node_type() const override { return "TranslateInstances"; }
String get_node_title() const override { return "Translate Instances"; }
String get_node_category() const override { return "Instance"; }
bool supports_gpu() const override { return true; }
void execute(ProcEvalContext &p_ctx, int p_node_idx) override;
TranslateInstancesNode();
};
// Flatten instance hierarchy into a single merged mesh
class RealizeInstancesNode : public ProcNode {
GDCLASS(RealizeInstancesNode, ProcNode);
protected:
static void _bind_methods();
public:
StringName get_node_type() const override { return "RealizeInstances"; }
String get_node_title() const override { return "Realize Instances"; }
String get_node_category() const override { return "Instance"; }
void execute(ProcEvalContext &p_ctx, int p_node_idx) override;
RealizeInstancesNode();
};
} // namespace godot
#endif