From 408949e5c26ca59edbd2ae9b552ac40fee652206 Mon Sep 17 00:00:00 2001 From: henrisel Date: Mon, 1 Dec 2025 17:19:31 +0200 Subject: [PATCH] WIP: spawn generated model as archery range target --- .../Components/Bow/Scripts/ArcheryRange.cs | 24 +++++++++++++------ .../_PROJECT/Scenes/DeltaBuilding_base.unity | 4 ++-- .../3DModeGeneration/PipelineManager.cs | 1 - 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Assets/_PROJECT/Components/Bow/Scripts/ArcheryRange.cs b/Assets/_PROJECT/Components/Bow/Scripts/ArcheryRange.cs index f2b4b6d3..435a00be 100644 --- a/Assets/_PROJECT/Components/Bow/Scripts/ArcheryRange.cs +++ b/Assets/_PROJECT/Components/Bow/Scripts/ArcheryRange.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using _PROJECT.Scripts.Bow; using FishNet.Object; using FishNet.Object.Synchronizing; @@ -36,6 +37,8 @@ public class ArcheryRange : NetworkBehaviour private float _nextTargetTime; private bool _roundActive; + private string targetModelName; + private readonly List _presentPlayers = new(); private XROrigin _scoredPlayer; @@ -112,7 +115,7 @@ public class ArcheryRange : NetworkBehaviour } } - private void SpawnTarget() + async private void SpawnTarget() { if (!IsServer) return; @@ -122,18 +125,22 @@ public class ArcheryRange : NetworkBehaviour Random.Range(minRandomOffset.z, maxRandomOffset.z) ); - var target = SpawnTarget(randomPos); + var target = await SpawnTarget(randomPos); _targets.Add(target); } - private ArcheryTarget SpawnTarget(Vector3 randomPos) + async private Task SpawnTarget(Vector3 randomPos) { - var prefab = Instantiate(targetPrefab, randomPos, Quaternion.identity, null); + var targetObject = Instantiate(targetPrefab, randomPos, Quaternion.identity, null); + GameObject targetReplacement = await PipelineManager.Instance.SpawnModel(targetModelName); // TODO: replace target prefab's child with the generated model - ArcheryTarget target = prefab.GetComponent(); + targetReplacement.transform.parent = targetObject.transform; + targetReplacement.transform.position = targetObject.transform.position; + + ArcheryTarget target = targetObject.GetComponent(); target.endPosition = targetEndPosition.position; target.addScore = AddScore; - Spawn(prefab); + Spawn(targetObject); return target; } @@ -176,9 +183,12 @@ public class ArcheryRange : NetworkBehaviour SetTimeLeftText(""); } - public void StartRound() + async public void StartRound() { if (!IsServer) return; + + targetModelName = await PipelineManager.Instance.GenerateModelAsync("unicorn with golden horn and long fluffy tail and butterfly wings"); + _roundEndTime = Time.time + roundLength; _nextTargetTime = Time.time; _roundActive = true; diff --git a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity index 56a49281..04c08551 100644 --- a/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity +++ b/Assets/_PROJECT/Scenes/DeltaBuilding_base.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82fdda2d339b0491cf35eec7b12f32500980662caff77ffda2a62cf34f59c700 -size 63212155 +oid sha256:c5a3483afb42ddf286000fa40d44274fffdd9a37f12294910ab73d1f2a23cae9 +size 63221012 diff --git a/Assets/_PROJECT/Scripts/3DModeGeneration/PipelineManager.cs b/Assets/_PROJECT/Scripts/3DModeGeneration/PipelineManager.cs index b443657c..e871e47b 100644 --- a/Assets/_PROJECT/Scripts/3DModeGeneration/PipelineManager.cs +++ b/Assets/_PROJECT/Scripts/3DModeGeneration/PipelineManager.cs @@ -82,7 +82,6 @@ public class PipelineManager : MonoBehaviour if (loadSuccess) { GameObject spawnedObject = new GameObject("spawned model"); - bool spawnSuccess = await gltf.InstantiateMainSceneAsync(spawnedObject.transform); if (spawnSuccess)