add vr template project
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
@tool
|
||||
class_name Scatter
|
||||
extends Node3D
|
||||
|
||||
|
||||
## Scatter Meshes Script
|
||||
##
|
||||
## This code allows you to quickly place a number of instances of a mesh at
|
||||
## random locations.
|
||||
|
||||
|
||||
@export var extend : Vector3 = Vector3(1.0, 0.0, 1.0): set = set_extend
|
||||
@export var instance_count : int = 10: set = set_instance_count
|
||||
@export var min_scale : float = 1.0: set = set_min_scale
|
||||
@export var max_scale : float = 1.0: set = set_max_scale
|
||||
@export var mesh : Mesh: set = set_mesh
|
||||
@export var material_override : Material: set = set_material_override
|
||||
|
||||
var dirty : bool = true
|
||||
var multi_mesh : MultiMesh
|
||||
var multi_mesh_instance : MultiMeshInstance3D
|
||||
|
||||
func set_extend(new_value):
|
||||
extend = new_value
|
||||
_set_dirty()
|
||||
|
||||
func set_instance_count(new_value):
|
||||
instance_count = new_value
|
||||
_set_dirty()
|
||||
|
||||
func set_min_scale(new_value):
|
||||
min_scale = new_value
|
||||
_set_dirty()
|
||||
|
||||
func set_max_scale(new_value):
|
||||
max_scale = new_value
|
||||
_set_dirty()
|
||||
|
||||
func set_mesh(new_mesh):
|
||||
mesh = new_mesh
|
||||
if multi_mesh:
|
||||
multi_mesh.mesh = mesh
|
||||
|
||||
func set_material_override(new_material):
|
||||
material_override = new_material
|
||||
if multi_mesh_instance:
|
||||
multi_mesh_instance.material_override = material_override
|
||||
|
||||
func _set_dirty():
|
||||
if !dirty:
|
||||
dirty = true
|
||||
call_deferred("_update_multimesh")
|
||||
|
||||
func _update_multimesh():
|
||||
if !dirty:
|
||||
return
|
||||
|
||||
multi_mesh.instance_count = instance_count
|
||||
for i in instance_count:
|
||||
var t := Transform3D()
|
||||
var s := randf_range(min_scale, max_scale)
|
||||
t.basis = Basis() \
|
||||
.rotated(Vector3.UP, randf_range(-PI, PI)) \
|
||||
.scaled(Vector3(s, s, s))
|
||||
t.origin = Vector3(
|
||||
randf_range(-extend.x, extend.x),
|
||||
randf_range(-extend.y, extend.y),
|
||||
randf_range(-extend.z, extend.z))
|
||||
multi_mesh.set_instance_transform(i, t)
|
||||
|
||||
dirty = false
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
multi_mesh = MultiMesh.new()
|
||||
multi_mesh.transform_format = MultiMesh.TRANSFORM_3D
|
||||
multi_mesh.mesh = mesh
|
||||
|
||||
multi_mesh_instance = MultiMeshInstance3D.new()
|
||||
multi_mesh_instance.multimesh = multi_mesh
|
||||
multi_mesh_instance.material_override = material_override
|
||||
add_child(multi_mesh_instance)
|
||||
|
||||
# First time creating our multimesh
|
||||
_update_multimesh()
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://dn6lkhk3gbq4n
|
||||
@@ -0,0 +1,19 @@
|
||||
extends Node3D
|
||||
|
||||
@export var saved_material : Material
|
||||
|
||||
# We only allow saving once after our scene loads
|
||||
var is_saved = false
|
||||
|
||||
func _on_save_button_button_pressed(_button):
|
||||
# Skip if already saved
|
||||
if is_saved:
|
||||
return
|
||||
|
||||
# Auto-save the game
|
||||
if not GameState.auto_save_game():
|
||||
return
|
||||
|
||||
# Change button to saved
|
||||
$Pole/SaveButton/Button.set_surface_override_material(0, saved_material)
|
||||
is_saved = true
|
||||
@@ -0,0 +1 @@
|
||||
uid://l4ifqkq17ax
|
||||
@@ -0,0 +1,78 @@
|
||||
[gd_scene load_steps=13 format=3 uid="uid://dm2e4qfiy0v0a"]
|
||||
|
||||
[ext_resource type="Script" path="res://components/helpers/zone_save_point.gd" id="1_hwwjp"]
|
||||
[ext_resource type="Texture2D" uid="uid://b28f4me1ublg4" path="res://assets/prototype_materials/pattern.png" id="2_2gaip"]
|
||||
[ext_resource type="Material" uid="uid://c386ygo86nqfc" path="res://assets/prototype_materials/wood_brown.tres" id="3_nemau"]
|
||||
[ext_resource type="PackedScene" uid="uid://cme66uldrjl2i" path="res://addons/godot-xr-tools/interactables/interactable_area_button.tscn" id="4_8b5h5"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5lqxg"]
|
||||
albedo_color = Color(0.00784314, 0.615686, 0, 1)
|
||||
albedo_texture = ExtResource("2_2gaip")
|
||||
|
||||
[sub_resource type="CylinderMesh" id="CylinderMesh_7f0ok"]
|
||||
top_radius = 0.05
|
||||
bottom_radius = 0.05
|
||||
height = 1.4
|
||||
radial_segments = 8
|
||||
rings = 1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cxops"]
|
||||
albedo_texture = ExtResource("2_2gaip")
|
||||
metallic = 0.59
|
||||
roughness = 0.41
|
||||
uv1_scale = Vector3(1, 4, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_0273w"]
|
||||
size = Vector3(0.4, 0.04, 0.3)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_0tokh"]
|
||||
size = Vector3(0.4, 0.04, 0.3)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_62pep"]
|
||||
radius = 0.15
|
||||
|
||||
[sub_resource type="CylinderMesh" id="CylinderMesh_wjqor"]
|
||||
top_radius = 0.075
|
||||
bottom_radius = 0.1
|
||||
height = 0.05
|
||||
radial_segments = 16
|
||||
rings = 1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lql4b"]
|
||||
albedo_color = Color(0.760784, 0.164706, 0.0823529, 1)
|
||||
albedo_texture = ExtResource("2_2gaip")
|
||||
|
||||
[node name="ZoneSavePoint" type="Node3D"]
|
||||
script = ExtResource("1_hwwjp")
|
||||
saved_material = SubResource("StandardMaterial3D_5lqxg")
|
||||
|
||||
[node name="Pole" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.7, -0.75)
|
||||
mesh = SubResource("CylinderMesh_7f0ok")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_cxops")
|
||||
|
||||
[node name="Table" type="StaticBody3D" parent="Pole"]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.929358, -0.369179, 0, 0.369179, 0.929358, 0, 0.702817, 0)
|
||||
|
||||
[node name="Mesh" type="MeshInstance3D" parent="Pole/Table"]
|
||||
mesh = SubResource("BoxMesh_0273w")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = ExtResource("3_nemau")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Pole/Table"]
|
||||
shape = SubResource("BoxShape3D_0tokh")
|
||||
|
||||
[node name="SaveButton" parent="Pole" instance=ExtResource("4_8b5h5")]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.929358, -0.369179, 0, 0.369179, 0.929358, 0, 0.702817, 0)
|
||||
button = NodePath("Button")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Pole/SaveButton"]
|
||||
shape = SubResource("SphereShape3D_62pep")
|
||||
|
||||
[node name="Button" type="MeshInstance3D" parent="Pole/SaveButton"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0436053, -1.19209e-07)
|
||||
mesh = SubResource("CylinderMesh_wjqor")
|
||||
skeleton = NodePath("../../Table/Mesh")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_lql4b")
|
||||
|
||||
[connection signal="button_pressed" from="Pole/SaveButton" to="." method="_on_save_button_button_pressed"]
|
||||
@@ -0,0 +1,39 @@
|
||||
@tool
|
||||
extends Area3D
|
||||
|
||||
|
||||
## Zone scene file
|
||||
@export_file('*.tscn') var zone_scene : String = ""
|
||||
|
||||
## If true the zone switcher is enabled
|
||||
@export var enabled : bool = true
|
||||
|
||||
## Name of the spawn-point node name in the target scene
|
||||
@export var spawn_node_name := ""
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
connect("body_entered", Callable(self, "_on_body_entered"))
|
||||
|
||||
|
||||
# Called when a body enters this area
|
||||
func _on_body_entered(body : Node3D):
|
||||
# Ignore if not enabled
|
||||
if not enabled:
|
||||
return
|
||||
|
||||
# Skip if it wasn't the player entering
|
||||
if not body.is_in_group("player_body"):
|
||||
return
|
||||
|
||||
# Find our scene base
|
||||
var scene_base : XRToolsSceneBase = XRTools.find_xr_ancestor(self, "*", "XRToolsSceneBase")
|
||||
if not scene_base:
|
||||
return
|
||||
|
||||
# Fire the load_scene signal
|
||||
if zone_scene == "":
|
||||
scene_base.reset_scene(spawn_node_name)
|
||||
else:
|
||||
scene_base.load_scene(zone_scene, spawn_node_name)
|
||||
@@ -0,0 +1 @@
|
||||
uid://d28e8mu0f8dx4
|
||||
@@ -0,0 +1,9 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://vm423o6hdlya"]
|
||||
|
||||
[ext_resource type="Script" path="res://components/helpers/zone_switch_area.gd" id="1"]
|
||||
|
||||
[node name="ZoneSwitchArea" type="Area3D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 524288
|
||||
monitorable = false
|
||||
script = ExtResource("1")
|
||||
Reference in New Issue
Block a user