shuriken can now be thrown jumping animtions jumping animations timing state machine changes start of online integration
115 lines
4.3 KiB
C#
115 lines
4.3 KiB
C#
|
|
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<string>("state"));
|
|
|
|
// Fly to the target
|
|
if ((string)ReadWeaponVariable<string>("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<string>("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"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |