Added shadow mode setting to VoxelInstanceLibraryItems
parent
ef5ec4b059
commit
c0721a7404
|
@ -94,6 +94,18 @@ Ref<Material> VoxelInstanceLibraryItem::get_material_override() const {
|
|||
return _material_override;
|
||||
}
|
||||
|
||||
void VoxelInstanceLibraryItem::set_cast_shadows_setting(VisualServer::ShadowCastingSetting mode) {
|
||||
if (mode == _shadow_casting_setting) {
|
||||
return;
|
||||
}
|
||||
_shadow_casting_setting = mode;
|
||||
notify_listeners(CHANGE_VISUAL);
|
||||
}
|
||||
|
||||
VisualServer::ShadowCastingSetting VoxelInstanceLibraryItem::get_cast_shadows_setting() const {
|
||||
return _shadow_casting_setting;
|
||||
}
|
||||
|
||||
void VoxelInstanceLibraryItem::set_collision_layer(int collision_layer) {
|
||||
_collision_layer = collision_layer;
|
||||
}
|
||||
|
@ -228,6 +240,10 @@ void VoxelInstanceLibraryItem::_bind_methods() {
|
|||
&VoxelInstanceLibraryItem::set_material_override);
|
||||
ClassDB::bind_method(D_METHOD("get_material_override"), &VoxelInstanceLibraryItem::get_material_override);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_cast_shadows_setting", "mode"),
|
||||
&VoxelInstanceLibraryItem::set_cast_shadows_setting);
|
||||
ClassDB::bind_method(D_METHOD("get_cast_shadows_setting"), &VoxelInstanceLibraryItem::get_cast_shadows_setting);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_collision_layer", "collision_layer"),
|
||||
&VoxelInstanceLibraryItem::set_collision_layer);
|
||||
ClassDB::bind_method(D_METHOD("get_collision_layer"), &VoxelInstanceLibraryItem::get_collision_layer);
|
||||
|
@ -263,10 +279,17 @@ void VoxelInstanceLibraryItem::_bind_methods() {
|
|||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material_override", PROPERTY_HINT_RESOURCE_TYPE, "Material"),
|
||||
"set_material_override", "get_material_override");
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "cast_shadow", PROPERTY_HINT_ENUM, "Off,On,Double-Sided,Shadows Only"), "set_cast_shadows_setting", "get_cast_shadows_setting");
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_3D_PHYSICS),
|
||||
"set_collision_layer", "get_collision_layer");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS),
|
||||
"set_collision_mask", "get_collision_mask");
|
||||
|
||||
BIND_CONSTANT(MAX_MESH_LODS);
|
||||
|
||||
BIND_ENUM_CONSTANT(VisualServer::SHADOW_CASTING_SETTING_OFF);
|
||||
BIND_ENUM_CONSTANT(VisualServer::SHADOW_CASTING_SETTING_ON);
|
||||
BIND_ENUM_CONSTANT(VisualServer::SHADOW_CASTING_SETTING_DOUBLE_SIDED);
|
||||
BIND_ENUM_CONSTANT(VisualServer::SHADOW_CASTING_SETTING_SHADOWS_ONLY);
|
||||
}
|
||||
|
|
|
@ -51,6 +51,9 @@ public:
|
|||
void set_material_override(Ref<Material> material);
|
||||
Ref<Material> get_material_override() const;
|
||||
|
||||
void set_cast_shadows_setting(VisualServer::ShadowCastingSetting mode);
|
||||
VisualServer::ShadowCastingSetting get_cast_shadows_setting() const;
|
||||
|
||||
void set_collision_layer(int collision_layer);
|
||||
int get_collision_layer() const;
|
||||
|
||||
|
@ -111,6 +114,8 @@ private:
|
|||
// but this is in case OBJ meshes are used, which often dont have a material of their own
|
||||
Ref<Material> _material_override;
|
||||
|
||||
VisualServer::ShadowCastingSetting _shadow_casting_setting = VisualServer::SHADOW_CASTING_SETTING_ON;
|
||||
|
||||
int _collision_mask = 1;
|
||||
int _collision_layer = 1;
|
||||
Vector<CollisionShapeInfo> _collision_shapes;
|
||||
|
|
|
@ -714,6 +714,7 @@ void VoxelInstancer::update_block_from_transforms(int block_index, ArraySlice<co
|
|||
block->multimesh_instance.set_world(world);
|
||||
block->multimesh_instance.set_transform(block_transform);
|
||||
block->multimesh_instance.set_material_override(item->get_material_override());
|
||||
block->multimesh_instance.set_cast_shadows_setting(item->get_cast_shadows_setting());
|
||||
}
|
||||
|
||||
// Update bodies
|
||||
|
|
|
@ -80,6 +80,12 @@ void DirectMultiMeshInstance::set_material_override(Ref<Material> material) {
|
|||
}
|
||||
}
|
||||
|
||||
void DirectMultiMeshInstance::set_cast_shadows_setting(VisualServer::ShadowCastingSetting mode) {
|
||||
ERR_FAIL_COND(!_multimesh_instance.is_valid());
|
||||
VisualServer &vs = *VisualServer::get_singleton();
|
||||
vs.instance_geometry_set_cast_shadows_setting(_multimesh_instance, mode);
|
||||
}
|
||||
|
||||
PoolRealArray DirectMultiMeshInstance::make_transform_3d_bulk_array(ArraySlice<const Transform> transforms) {
|
||||
VOXEL_PROFILE_SCOPE();
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ public:
|
|||
void set_transform(Transform world_transform);
|
||||
void set_visible(bool visible);
|
||||
void set_material_override(Ref<Material> material);
|
||||
void set_cast_shadows_setting(VisualServer::ShadowCastingSetting mode);
|
||||
|
||||
static PoolRealArray make_transform_3d_bulk_array(ArraySlice<const Transform> transforms);
|
||||
|
||||
|
|
Loading…
Reference in New Issue