using System; using System.Collections.Generic; using System.Numerics; using Unity.Collections.LowLevel.Unsafe; using Unity.Services.Relay.Models; using UnityEngine; using Quaternion = UnityEngine.Quaternion; using Vector3 = UnityEngine.Vector3; namespace Reset.Items{ public class ShurikenActor : WeaponActor{ public GameObject bladeRing; public Transform target; private Vector3 targetPosition; private Transform originalParent; private Quaternion originalRotation; private Vector3 originalPosition; private Vector3 originalWorldPosition; private float rotateSpeed; private float rotateSpeedTarget; private float rotationAcceleration; void Awake(){ // Register Weapon Events weaponEvents.Add("Set Target", SetTarget); weaponEvents.Add("Fly To Target", FlyToTarget); weaponEvents.Add("Fly To Hand", FlyToHand); weaponEvents.Add("Return To Hand", ReturnToHand); } void SetTarget(){ Debug.Log($"{weaponVariables["target"]}, {weaponVariables["target"] as GameObject}"); target = (Transform)weaponVariables["target"]; } void FlyToTarget(){ rotateSpeedTarget = 1200f; rotationAcceleration = 200f; RegisterWeaponVariable("state", "Flying To Target"); originalParent = relatedObject.transform.parent; originalPosition = relatedObject.transform.localPosition; originalRotation = relatedObject.transform.localRotation; originalWorldPosition = relatedObject.transform.position; relatedObject.transform.SetParent(null, true); } void FlyToHand(){ rotateSpeed = 3000f; rotateSpeedTarget = 50f; rotationAcceleration = 2f; RegisterWeaponVariable("state", new string("Flying To Hand")); } void ReturnToHand(){ rotateSpeedTarget = 250f; rotationAcceleration = 1f; RegisterWeaponVariable("state", new string("Back In Hand")); relatedObject.transform.SetParent(originalParent); relatedObject.transform.localPosition = originalPosition; relatedObject.transform.localRotation = originalRotation; } void Start(){ // Save refernce to the blade outer ring bladeRing = relatedObject.transform.GetChild(0).gameObject; } void Update(){ if (target) { targetPosition = target.transform.position; } else { targetPosition = Vector3.forward * 5f; } RegisterWeaponVariable("position", transform.position); rotateSpeed = Mathf.Lerp(rotateSpeed, rotateSpeedTarget, rotationAcceleration * Time.deltaTime); bladeRing.transform.Rotate(Vector3.up * (rotateSpeed * Time.deltaTime)); Debug.Log((string)ReadWeaponVariable("state")); // Fly to the target if ((string)ReadWeaponVariable("state") == "Flying To Target") { relatedObject.transform.position = Vector3.Lerp(relatedObject.transform.position, targetPosition, 5f * Time.deltaTime); // When there, set next stage if (Vector3.Distance(relatedObject.transform.position, targetPosition) < .5f) { rotationAcceleration = 50f; rotateSpeedTarget = 1200f; RegisterWeaponVariable("state", new string("At Target")); } } // Fly to the hand if ((string)ReadWeaponVariable("state") as string == "Flying To Hand") { relatedObject.transform.position = Vector3.Lerp(relatedObject.transform.position, originalParent.transform.position, 5f * Time.deltaTime); // When there, set as finished if (Vector3.Distance(relatedObject.transform.position, originalParent.transform.position) < .5f) { RegisterWeaponVariable("state", new string("At Hand")); } } } } }