using System.Collections; using System.Collections.Generic; using UnityEngine; public class ArmBow : MonoBehaviour { [SerializeField] AnimationPlayer AP_arm; [SerializeField] Animator AP_bow; [SerializeField] AnimationPlayer AP_bowForArrow; [SerializeField] GameObject arrow; [SerializeField] BowCamera bowCamera; public HashSet validTargets = new HashSet(); private bool canShoot = false; private bool pulling = false; private bool readying = false; public static ArmBow ins; void Start() { ins = this; this.readyShoot(); } void OnDestroy() { ins = null; } void FixedUpdate() { // if (this.canShoot) // { // DebugBowPower.ins.DoUpdate(); // } } void Update() { if (Input.GetKeyDown(KeyCode.Q)) { this.ADS_fire(); } if (this.pulling) { this.bowCamera.updateFollowPullBow(); } else if (!this.canShoot) { this.bowCamera.updateGiveUpPullBow(); } CrossHair.ins.gameObject.SetActive(this.canShoot); } void onComplete(AnimationPlayerCompleteResult res) { if (res.index == 1) { this.ADS_idle(); } else if (res.index == 3) { this.idle(); } } void idle() { this.arrow.SetActive(false); AP_arm.play(0, WrapMode.Loop); AP_bowForArrow.play(0, WrapMode.Loop); // AP_bow.SetBool("ads", false); // AP_bow.SetBool("fire", false); AP_bow.Play("gong_daiji"); AP_arm.completeCallback = null; this.pulling = false; this.canShoot = false; // DebugBowPower.ins.Init(); } public void idleToADS() { this.arrow.SetActive(true); AP_arm.play(1, WrapMode.Once); AP_bowForArrow.play(1, WrapMode.Once); // AP_bow.SetBool("ads", true); // AP_bow.SetBool("idle", false); AP_bow.Play("gong_lagong"); AP_arm.completeCallback = onComplete; this.pulling = true; this.canShoot = false; } void ADS_idle() { AP_arm.play(2, WrapMode.Loop); AP_bowForArrow.play(2, WrapMode.Loop); AP_bow.Play("gong_lagongdaiji"); AP_arm.completeCallback = null; this.canShoot = true; this.pulling = false; // DebugBowPower.ins.PullFinish(); } public void ADS_fire() { if (!this.canShoot) { return; } this.pulling = false; this.canShoot = false; this.readying = false; AP_arm.play(3, WrapMode.Once); AP_bowForArrow.play(3, WrapMode.Once); // AP_bow.SetBool("fire", true); AP_bow.Play("gong_songshou"); AP_arm.completeCallback = onComplete; this.Invoke("shoot", 0.1f); } public void readyShoot() { this.readying = true; this.bowCamera.setFieldOfView(60, false); this.idle(); this.gameObject.SetActive(true); this.Invoke("idleToADS", 0.5f); } public void shoot() { Vector3 rayHitPoint = CrossHair.ins.getRayHitPoint(); GameObject arrowCopy = GameObject.Instantiate(this.arrow, this.bowCamera.transform.position, this.bowCamera.transform.rotation); Vector3 s1 = arrowCopy.transform.localScale; Vector3 s2 = bowCamera.transform.localScale; arrowCopy.transform.localScale = new Vector3(s1.x * s2.x, s1.y * s2.y, s1.z * s2.z); arrowCopy.transform.LookAt(rayHitPoint); Arrow arrowComp = arrowCopy.AddComponent(); arrowComp.armBow = this; // arrowComp.calculateSpeed(rayHitPoint); // Arrow.speed = BaseSpeedSlider.ins.getValue() * DebugBowPower.ins.getPowerPercent(); // Arrow.speed = BaseSpeedSlider.ins.getValue(); Arrow.speed = ShootCheck.ins.shootSpeed * BaseSpeedSlider.ins.getValue(); arrowCopy.SetActive(true); arrow.SetActive(false); AudioMgr.ins.PlayShoot(AudioMgr.GetAudioSource(arrowCopy)); this.gameObject.SetActive(false); } public void OnEnable() { AudioMgr.GetAudioSource(this.gameObject).clip = null; } //debug public void mouseDown() { if (!this.readying) return; if (this.pulling || this.canShoot) return; this.idleToADS(); } public void mouseUp() { if (!this.readying) return; if (this.pulling) { this.idle(); } else if (this.canShoot) { this.ADS_fire(); } } }