diff --git a/Assets/Audio/Effects/Player Shotgun.wav b/Assets/Audio/Effects/Player Shotgun.wav new file mode 100644 index 0000000000000000000000000000000000000000..c970e149b279ab382838061d51cd514f9a35319a --- /dev/null +++ b/Assets/Audio/Effects/Player Shotgun.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24cf272760716eaf15f007bd76ed6c4110ace4f8667f415c288aded55a52c7ac +size 479310 diff --git a/Assets/Audio/Effects/Player Shotgun.wav.meta b/Assets/Audio/Effects/Player Shotgun.wav.meta new file mode 100644 index 0000000000000000000000000000000000000000..631e35bbcc24563877190b204e144e51ab140b98 --- /dev/null +++ b/Assets/Audio/Effects/Player Shotgun.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ba7220d25e509f9409ceacf04b5962e2 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Level_01.unity b/Assets/Scenes/Level_01.unity index 301b0934253ac5a741d1d14774ff92d8d165068c..18b914bd8c4277450ca9613c8490ab76af477a49 100644 --- a/Assets/Scenes/Level_01.unity +++ b/Assets/Scenes/Level_01.unity @@ -2889,6 +2889,11 @@ MonoBehaviour: m_EditorClassIdentifier: gunMode: 1 damagePerShot: 30 + gunAudioSrc: + - {fileID: 8300000, guid: fa7f046ce321d4021b5e753bf1152916, type: 3} + - {fileID: 8300000, guid: ba7220d25e509f9409ceacf04b5962e2, type: 3} + - {fileID: 0} + - {fileID: 0} --- !u!82 &880479557 AudioSource: m_ObjectHideFlags: 0 @@ -3091,6 +3096,14 @@ LineRenderer: m_Positions: - {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} m_Parameters: serializedVersion: 3 widthMultiplier: 1 @@ -10047,7 +10060,6 @@ MonoBehaviour: isShopOpen: 0 isShopping: 0 petFactory: {fileID: 734232483} - pdm: {fileID: 1546708125} currentWeapon: 0 hudManager: {fileID: 491809539} --- !u!114 &1644740160 diff --git a/Assets/Scripts/Player/PlayerGunSwitcher.cs b/Assets/Scripts/Player/PlayerGunSwitcher.cs new file mode 100644 index 0000000000000000000000000000000000000000..3ff125a5fdc7e845612e7cc678c36777dfcb989c --- /dev/null +++ b/Assets/Scripts/Player/PlayerGunSwitcher.cs @@ -0,0 +1 @@ +// TODO: Switch Gun Mesh for Player \ No newline at end of file diff --git a/Assets/Scripts/Player/PlayerGunSwitcher.cs.meta b/Assets/Scripts/Player/PlayerGunSwitcher.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e11cb5076f0577aad4c0ae358c389d6cb9a39789 --- /dev/null +++ b/Assets/Scripts/Player/PlayerGunSwitcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f089648e71edb4542936007945e8e427 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerShooting.cs b/Assets/Scripts/Player/PlayerShooting.cs index 5214acca086d7f84bd0f423dac157d7f7e5ec3cb..e2a662637513251668ddff57c47a840efe94b98b 100644 --- a/Assets/Scripts/Player/PlayerShooting.cs +++ b/Assets/Scripts/Player/PlayerShooting.cs @@ -9,10 +9,10 @@ public class PlayerShooting : MonoBehaviour  */ public int gunMode = 1; public int damagePerShot = 30; + public AudioClip[] gunAudioSrc = new AudioClip[4]; private float timeBetweenBullets = 0.15f; + private float timeBulletsShot = 0.15f; private float range = 100f; - private bool multiRange = false; - float timer; Ray shootRay = new Ray(); Ray[] shootRays = new Ray[5]; @@ -23,6 +23,7 @@ public class PlayerShooting : MonoBehaviour AudioSource gunAudio; Light gunLight; float effectsDisplayTime = 0.2f; + RaycastHit[] enemiesHit; void Awake () { @@ -45,6 +46,10 @@ public class PlayerShooting : MonoBehaviour { gunMode = 2; } + else if (Input.GetKeyDown("3")) + { + gunMode = 3; + } } void UpdateGunMode(int gunMode) @@ -53,20 +58,18 @@ public class PlayerShooting : MonoBehaviour case 1: damagePerShot = 30; timeBetweenBullets = 0.15f; + range = 100f; - multiRange = false; break; case 2: - damagePerShot = 200; + damagePerShot = 50; timeBetweenBullets = 1f; range = 10f; - multiRange = true; break; default: - damagePerShot = 30; - timeBetweenBullets = 0.15f; - range = 100f; - multiRange = false; + damagePerShot = 80; + timeBetweenBullets = 0.5f; + range = 2f; break; } } @@ -82,7 +85,7 @@ public class PlayerShooting : MonoBehaviour Shoot (); } - if(timer >= timeBetweenBullets * effectsDisplayTime) + if(timer >= timeBulletsShot * effectsDisplayTime) { DisableEffects (); } @@ -98,57 +101,69 @@ public class PlayerShooting : MonoBehaviour gunLight.enabled = false; } - - void Shoot () - { + void GunShoot() { timer = 0f;        //Play audio + gunAudio.clip = gunAudioSrc[0]; gunAudio.Play (); -       //enable Light - gunLight.enabled = true; -        //Play gun particle gunParticles.Stop (); gunParticles.Play (); -       //enable Line renderer dan set first position +       //enable Line renderer gunLine.enabled = true; + gunLine.positionCount = 2; gunLine.SetPosition (0, transform.position); -       //Set posisi ray shoot dan direction - if (multiRange) { - for (int i = 0; i < shootRays.Length; i++) { - shootRays[i].origin = transform.position; - shootRays[i].direction = Quaternion.Euler(0, (-10 + i * 5), 0) * transform.forward; - //Lakukan raycast jika mendeteksi id nemy hit apapun - if (Physics.Raycast (shootRays[i], out shootHit, range, shootableMask)) - { -            //Lakukan raycast hit hace component Enemyhealth - EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> (); - - if(enemyHealth != null) - { -                //Lakukan Take Damage - enemyHealth.TakeDamage (damagePerShot, shootHit.point); - } - -            //Set line end position ke hit position - gunLine.SetPosition (1, shootHit.point); - } - else - { -            //set line end position ke range freom barrel - gunLine.SetPosition (1, shootRays[i].origin + shootRays[i].direction * range); - } + // set shoot rays + shootRay.origin = transform.position; + shootRay.direction = transform.forward; + //Lakukan raycast jika mendeteksi id nemy hit apapun + if (Physics.Raycast (shootRay, out shootHit, range, shootableMask)) + { +           //Lakukan raycast hit hace component Enemyhealth + EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> (); + + if(enemyHealth != null) + { +               //Lakukan Take Damage + enemyHealth.TakeDamage (damagePerShot, shootHit.point); } + +           //Set line end position ke hit position + gunLine.SetPosition (1, shootHit.point); } - else { - shootRays[2].origin = transform.position; - shootRays[2].direction = transform.forward; + else + { +           //set line end position ke range freom barrel + gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range); + } + } + + void ShotgunShoot() { + timer = 0f; + +       //Play audio + gunAudio.clip = gunAudioSrc[1]; + gunAudio.Play (); + +       //Play gun particle + gunParticles.Stop (); + gunParticles.Play (); + +       //enable Line renderer + gunLine.enabled = true; + gunLine.positionCount = 10; + + //set shooting rays + for (int i = 0; i < shootRays.Length; i++) { + gunLine.SetPosition (2 * i, transform.position); + shootRays[i].origin = transform.position; + shootRays[i].direction = Quaternion.Euler(0, (-10 + i * 5), 0) * transform.forward; //Lakukan raycast jika mendeteksi id nemy hit apapun - if (Physics.Raycast (shootRays[2], out shootHit, range, shootableMask)) + if (Physics.Raycast (shootRays[i], out shootHit, range, shootableMask)) {            //Lakukan raycast hit hace component Enemyhealth EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> (); @@ -160,13 +175,37 @@ public class PlayerShooting : MonoBehaviour }            //Set line end position ke hit position - gunLine.SetPosition (1, shootHit.point); + gunLine.SetPosition (2*i+1, shootHit.point); } else {            //set line end position ke range freom barrel - gunLine.SetPosition (1, shootRays[2].origin + shootRays[2].direction * range); + gunLine.SetPosition (2*i+1, shootRays[i].origin + shootRays[i].direction * range); } } } + + void SwordAttack() { + timer = 0f; + + enemiesHit = Physics.SphereCastAll(transform.position, range, transform.forward, 0, shootableMask); + for (int i = 0; i < enemiesHit.Length; i++) { + EnemyHealth enemyHealth = enemiesHit[i].collider.gameObject.GetComponent<EnemyHealth>(); + if(enemyHealth != null) + { +               //Lakukan Take Damage + enemyHealth.TakeDamage (damagePerShot, shootHit.point); + } + } + } + + void Shoot () + { + switch (gunMode) { + case 1: GunShoot(); break; + case 2: ShotgunShoot(); break; + case 3: SwordAttack(); break; + default: GunShoot(); break; + } + } } \ No newline at end of file