feat: update shuriken behaviour

shuriken now rotates better
goes towards both target and nothing if no target
hitbox spawns in right location
This commit is contained in:
Chris
2026-01-16 17:42:34 -05:00
parent ca54b5b960
commit 631627009b
2 changed files with 49 additions and 13 deletions

File diff suppressed because one or more lines are too long

View File

@@ -4,7 +4,9 @@ using System.Numerics;
using Unity.Collections.LowLevel.Unsafe; using Unity.Collections.LowLevel.Unsafe;
using Unity.Services.Relay.Models; using Unity.Services.Relay.Models;
using UnityEngine; using UnityEngine;
using UnityEngine.Assertions.Must;
using Quaternion = UnityEngine.Quaternion; using Quaternion = UnityEngine.Quaternion;
using Random = UnityEngine.Random;
using Vector3 = UnityEngine.Vector3; using Vector3 = UnityEngine.Vector3;
namespace Reset.Items{ namespace Reset.Items{
@@ -23,7 +25,8 @@ namespace Reset.Items{
private float rotateSpeed; private float rotateSpeed;
private float rotateSpeedTarget; private float rotateSpeedTarget;
private float rotationAcceleration; private float rotationAcceleration;
private Quaternion targetRotation;
void Awake(){ void Awake(){
// Register Weapon Events // Register Weapon Events
weaponEvents.Add("Set Target", SetTarget); weaponEvents.Add("Set Target", SetTarget);
@@ -33,14 +36,22 @@ namespace Reset.Items{
} }
void SetTarget(){ void SetTarget(){
target = null;
Debug.Log($"{weaponVariables["target"]}, {weaponVariables["target"] as GameObject}"); Debug.Log($"{weaponVariables["target"]}, {weaponVariables["target"] as GameObject}");
target = (Transform)weaponVariables["target"];
if (weaponVariables["target"] != null) {
target = (weaponVariables["target"] as Transform);
}
} }
void FlyToTarget(){ void FlyToTarget(){
rotateSpeedTarget = 1200f; rotateSpeedTarget = 1200f;
rotationAcceleration = 200f; rotationAcceleration = 200f;
RegisterWeaponVariable("state", "Flying To Target"); RegisterWeaponVariable("state", "Flying To Target");
float randomRot = Random.Range(-90f, 180f);
targetRotation = transform.rotation * originalRotation * Quaternion.AngleAxis(randomRot, Vector3.up);
originalParent = relatedObject.transform.parent; originalParent = relatedObject.transform.parent;
originalPosition = relatedObject.transform.localPosition; originalPosition = relatedObject.transform.localPosition;
@@ -67,6 +78,8 @@ namespace Reset.Items{
relatedObject.transform.SetParent(originalParent); relatedObject.transform.SetParent(originalParent);
relatedObject.transform.localPosition = originalPosition; relatedObject.transform.localPosition = originalPosition;
relatedObject.transform.localRotation = originalRotation; relatedObject.transform.localRotation = originalRotation;
target = null;
} }
void Start(){ void Start(){
@@ -75,13 +88,15 @@ namespace Reset.Items{
} }
void Update(){ void Update(){
if (target) { if (target) {
targetPosition = target.transform.position; targetPosition = target.transform.position;
} else { } else {
targetPosition = Vector3.forward * 5f; targetPosition = transform.position + transform.forward * 10f + Vector3.up;
} }
RegisterWeaponVariable("position", transform.position);
rotateSpeed = Mathf.Lerp(rotateSpeed, rotateSpeedTarget, rotationAcceleration * Time.deltaTime); rotateSpeed = Mathf.Lerp(rotateSpeed, rotateSpeedTarget, rotationAcceleration * Time.deltaTime);
bladeRing.transform.Rotate(Vector3.up * (rotateSpeed * Time.deltaTime)); bladeRing.transform.Rotate(Vector3.up * (rotateSpeed * Time.deltaTime));
@@ -90,7 +105,22 @@ namespace Reset.Items{
// Fly to the target // Fly to the target
if ((string)ReadWeaponVariable<string>("state") == "Flying To Target") { if ((string)ReadWeaponVariable<string>("state") == "Flying To Target") {
relatedObject.transform.position = Vector3.Lerp(relatedObject.transform.position, targetPosition, 5f * Time.deltaTime); float offset = 9f;
Vector3 startPos = relatedObject.transform.position;
Vector3 endPos = targetPosition;
Vector3 center = (startPos + endPos) / 2f;
center -= new Vector3(0f, offset, 0f);
Vector3 relativeCenter = startPos - center;
Vector3 relativeEnd = endPos - center;
relatedObject.transform.position = Vector3.Slerp(relativeCenter, relativeEnd, 5f * Time.deltaTime) + center;
relatedObject.transform.rotation = Quaternion.Lerp(relatedObject.transform.rotation, targetRotation, 5f * Time.deltaTime);
// relatedObject.transform.position = Vector3.Slerp(relatedObject.transform.position, targetPosition, 5f * Time.deltaTime);
// When there, set next stage // When there, set next stage
if (Vector3.Distance(relatedObject.transform.position, targetPosition) < .5f) { if (Vector3.Distance(relatedObject.transform.position, targetPosition) < .5f) {
@@ -102,13 +132,17 @@ namespace Reset.Items{
// Fly to the hand // Fly to the hand
if ((string)ReadWeaponVariable<string>("state") as string == "Flying To Hand") { if ((string)ReadWeaponVariable<string>("state") as string == "Flying To Hand") {
relatedObject.transform.position = Vector3.Lerp(relatedObject.transform.position, originalParent.transform.position, 5f * Time.deltaTime); relatedObject.transform.position = Vector3.Slerp(relatedObject.transform.position, originalParent.transform.position, 5f * Time.deltaTime);
relatedObject.transform.rotation = Quaternion.Lerp(relatedObject.transform.rotation, originalParent.transform.rotation * originalRotation , 5f * Time.deltaTime);
// When there, set as finished // When there, set as finished
if (Vector3.Distance(relatedObject.transform.position, originalParent.transform.position) < .5f) { if (Vector3.Distance(relatedObject.transform.position, originalParent.transform.position) < .1f) {
RegisterWeaponVariable("state", new string("At Hand")); RegisterWeaponVariable("state", new string("At Hand"));
} }
} }
RegisterWeaponVariable("relativePosition", relatedObject.transform.position - transform.position);
RegisterWeaponVariable("relativeOffset", new Vector3(0f, relatedObject.transform.position.y, Vector3.Distance(relatedObject.transform.position, transform.position)));
} }
} }
} }