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:
File diff suppressed because one or more lines are too long
@@ -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)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user