BloodAndGore/Assets/Scripts/Guns/Gun.cs

111 lines
3.6 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
2019-08-14 16:17:48 +02:00
using Saltosion.OneWeapon.Player;
2019-08-14 20:35:06 +02:00
using Saltosion.OneWeapon.Effects;
2019-08-14 16:17:48 +02:00
namespace Saltosion.OneWeapon.Guns {
public class Gun : MonoBehaviour {
[Header("Essentials")]
public Bullet Bullet;
public SpriteRenderer Sprite;
public float MaxCooldown = 0.5f;
public float MinCooldown = 0.2f;
2019-08-22 19:13:49 +02:00
public bool IsAutomatic = false;
[Header("Effects")]
public Transform BulletHole;
2019-08-14 20:35:06 +02:00
public Bobbing Bobbing;
public ParticleSystem LaunchExplosion;
public CustomLight LaunchLight;
public float LaunchLightIntensity = 2;
public float LaunchLightIntensityDegrade = 2;
private bool IsHeld = false;
2019-08-04 20:01:28 +02:00
private float CurrCooldown = 0;
private float CurrLaunchLight = 0;
2019-08-04 20:01:28 +02:00
private Bullet CurrentBullet;
private bool HasShotBullet = false;
2019-08-18 18:44:26 +02:00
private float BulletHoleOriginalY;
void Start() {
BulletHoleOriginalY = BulletHole.localPosition.y;
if (LaunchExplosion != null) {
LaunchExplosion.Stop();
}
2019-08-18 18:44:26 +02:00
}
2019-08-04 20:01:28 +02:00
void Update() {
if (CurrCooldown > 0) {
CurrCooldown -= Time.deltaTime;
}
if (HasShotBullet && (CurrentBullet.HasExploded || CurrentBullet == null)) {
CurrCooldown = Mathf.Min(CurrCooldown, MinCooldown);
CurrentBullet = null;
HasShotBullet = false;
}
if (CurrLaunchLight > 0) {
CurrLaunchLight -= Time.deltaTime * LaunchLightIntensityDegrade;
LaunchLight.LightIntensity = CurrLaunchLight;
}
2019-08-04 20:01:28 +02:00
}
2019-08-14 18:21:27 +02:00
void OnCollisionEnter2D(Collision2D collision) {
if (IsHeld) {
return;
}
2019-08-14 18:21:27 +02:00
PlayerController Player = collision.collider.GetComponent<PlayerController>();
if (Player != null) {
IsHeld = true;
2019-08-14 20:35:06 +02:00
Bobbing.BobbingMultiplier = 0;
Destroy(GetComponent<BoxCollider2D>());
2019-08-14 18:21:27 +02:00
Destroy(GetComponent<Rigidbody2D>());
2019-08-14 20:35:06 +02:00
Player.SetGun(this);
}
}
2019-08-22 19:13:49 +02:00
public bool Shoot(Vector2 direction, float rotation, bool automatic) {
if (automatic && !IsAutomatic) {
return false;
}
if (Bullet == null) {
Debug.LogError("THERE IS NO BULLET");
} else {
2019-08-04 20:01:28 +02:00
if (CurrCooldown <= 0) {
CurrCooldown = MaxCooldown;
if (LaunchExplosion != null) {
LaunchExplosion.Play();
}
if (LaunchLight != null) {
CurrLaunchLight = LaunchLightIntensity;
LaunchLight.LightIntensity = CurrLaunchLight;
}
2019-08-04 20:01:28 +02:00
Bullet ShotBullet = Instantiate(Bullet, BulletHole.position, new Quaternion());
ShotBullet.Direction = direction.normalized;
ShotBullet.InitialRotation = rotation;
CurrentBullet = ShotBullet;
HasShotBullet = true;
2019-08-04 20:01:28 +02:00
return true;
}
}
2019-08-04 20:01:28 +02:00
return false;
}
public void FlipGun(bool flipped) {
Sprite.flipY = flipped;
2019-08-18 18:44:26 +02:00
float y = BulletHoleOriginalY;
if (flipped) {
y = -y;
}
BulletHole.localPosition = new Vector2(BulletHole.localPosition.x, y);
}
}
}