From ffd1d5af496e0a0eff343b27c4f0f965bbbf79eb Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 31 Aug 2021 19:07:21 +0800 Subject: *projectile --- .../WebDemo/scripts/projectileActor.cs | 253 +++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 Assets/Art/Vfx/StylizedProjectilePack1/WebDemo/scripts/projectileActor.cs (limited to 'Assets/Art/Vfx/StylizedProjectilePack1/WebDemo/scripts/projectileActor.cs') diff --git a/Assets/Art/Vfx/StylizedProjectilePack1/WebDemo/scripts/projectileActor.cs b/Assets/Art/Vfx/StylizedProjectilePack1/WebDemo/scripts/projectileActor.cs new file mode 100644 index 00000000..86fc9fea --- /dev/null +++ b/Assets/Art/Vfx/StylizedProjectilePack1/WebDemo/scripts/projectileActor.cs @@ -0,0 +1,253 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +public class projectileActor : MonoBehaviour { + + public Transform spawnLocator; + public Transform spawnLocatorMuzzleFlare; + public Transform shellLocator; + public Animator recoilAnimator; + + public Transform[] shotgunLocator; + + [System.Serializable] + public class projectile + { + public string name; + public Rigidbody bombPrefab; + public GameObject muzzleflare; + public float min, max; + public bool rapidFire; + public float rapidFireCooldown; + + public bool shotgunBehavior; + public int shotgunPellets; + public GameObject shellPrefab; + public bool hasShells; + } + public projectile[] bombList; + + + string FauxName; + public Text UiText; + + public bool UImaster = true; + public bool CameraShake = true; + public float rapidFireDelay; + public CameraShake CameraShakeCaller; + + float firingTimer; + public bool firing; + public int bombType = 0; + + // public ParticleSystem muzzleflare; + + public bool swarmMissileLauncher = false; + int projectileSimFire = 1; + + public bool Torque = false; + public float Tor_min, Tor_max; + + public bool MinorRotate; + public bool MajorRotate = false; + int seq = 0; + + + // Use this for initialization + void Start () + { + if (UImaster) + { + UiText.text = bombList[bombType].name.ToString(); + } + if (swarmMissileLauncher) + { + projectileSimFire = 5; + } + } + + // Update is called once per frame + void Update () + { + //Movement + if(Input.GetButton("Horizontal")) + { + if (Input.GetAxis("Horizontal") < 0) + { + gameObject.transform.Rotate(Vector3.up, -25 * Time.deltaTime); + } + else + { + gameObject.transform.Rotate(Vector3.up, 25 * Time.deltaTime); + } + } + + //BULLETS + if (Input.GetKeyDown(KeyCode.D)) + { + Switch(-1); + } + if (Input.GetButtonDown("Fire2") || Input.GetKeyDown(KeyCode.A)) + { + Switch(1); + } + + if(Input.GetButtonDown("Fire1")) + { + firing = true; + Fire(); + } + if (Input.GetButtonUp("Fire1")) + { + firing = false; + firingTimer = 0; + } + + if (bombList[bombType].rapidFire && firing) + { + if(firingTimer > bombList[bombType].rapidFireCooldown+rapidFireDelay) + { + Fire(); + firingTimer = 0; + } + } + + if(firing) + { + firingTimer += Time.deltaTime; + } + } + + public void Switch(int value) + { + bombType += value; + if (bombType < 0) + { + bombType = bombList.Length; + bombType--; + } + else if (bombType >= bombList.Length) + { + bombType = 0; + } + if (UImaster) + { + UiText.text = bombList[bombType].name.ToString(); + } + } + + public void Fire() + { + if(CameraShake) + { + CameraShakeCaller.ShakeCamera(); + } + Instantiate(bombList[bombType].muzzleflare, spawnLocatorMuzzleFlare.position, spawnLocatorMuzzleFlare.rotation); + // bombList[bombType].muzzleflare.Play(); + + if (bombList[bombType].hasShells) + { + Instantiate(bombList[bombType].shellPrefab, shellLocator.position, shellLocator.rotation); + } + recoilAnimator.SetTrigger("recoil_trigger"); + + Rigidbody rocketInstance; + rocketInstance = Instantiate(bombList[bombType].bombPrefab, spawnLocator.position,spawnLocator.rotation) as Rigidbody; + // Quaternion.Euler(0,90,0) + rocketInstance.AddForce(spawnLocator.forward * Random.Range(bombList[bombType].min, bombList[bombType].max)); + + if (bombList[bombType].shotgunBehavior) + { + for(int i = 0; i < bombList[bombType].shotgunPellets ;i++ ) + { + Rigidbody rocketInstanceShotgun; + rocketInstanceShotgun = Instantiate(bombList[bombType].bombPrefab, shotgunLocator[i].position, shotgunLocator[i].rotation) as Rigidbody; + // Quaternion.Euler(0,90,0) + rocketInstanceShotgun.AddForce(shotgunLocator[i].forward * Random.Range(bombList[bombType].min, bombList[bombType].max)); + } + } + + if (Torque) + { + rocketInstance.AddTorque(spawnLocator.up * Random.Range(Tor_min, Tor_max)); + } + if (MinorRotate) + { + RandomizeRotation(); + } + if (MajorRotate) + { + Major_RandomizeRotation(); + } + } + + + void RandomizeRotation() + { + if (seq == 0) + { + seq++; + transform.Rotate(0, 1, 0); + } + else if (seq == 1) + { + seq++; + transform.Rotate(1, 1, 0); + } + else if (seq == 2) + { + seq++; + transform.Rotate(1, -3, 0); + } + else if (seq == 3) + { + seq++; + transform.Rotate(-2, 1, 0); + } + else if (seq == 4) + { + seq++; + transform.Rotate(1, 1, 1); + } + else if (seq == 5) + { + seq = 0; + transform.Rotate(-1, -1, -1); + } + } + + void Major_RandomizeRotation() + { + if (seq == 0) + { + seq++; + transform.Rotate(0, 25, 0); + } + else if (seq == 1) + { + seq++; + transform.Rotate(0, -50, 0); + } + else if (seq == 2) + { + seq++; + transform.Rotate(0, 25, 0); + } + else if (seq == 3) + { + seq++; + transform.Rotate(25, 0, 0); + } + else if (seq == 4) + { + seq++; + transform.Rotate(-50, 0, 0); + } + else if (seq == 5) + { + seq = 0; + transform.Rotate(25, 0, 0); + } + } +} -- cgit v1.1-26-g67d0