init
This commit is contained in:
commit
341a877b4a
2338 changed files with 1346408 additions and 0 deletions
123
Assets/Scripts/Enemies/BulletMovement.cs
Normal file
123
Assets/Scripts/Enemies/BulletMovement.cs
Normal file
|
@ -0,0 +1,123 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class BulletMovement : MonoBehaviour
|
||||
{
|
||||
public enum BulletMovementType
|
||||
{
|
||||
Linear, ZigZag, Wave
|
||||
}
|
||||
|
||||
[Header("General settings")]
|
||||
public BulletMovementType movementType;
|
||||
public int damage = 1;
|
||||
public float speed=1;
|
||||
public float lifetime = 5;
|
||||
|
||||
//Wave data
|
||||
[Header("Wave settings")]
|
||||
[DrawIf("movementType", BulletMovementType.Linear, DrawIfAttribute.DisablingType.ReadOnly, DrawIfAttribute.Comparator.NotEqual)]
|
||||
public float waveLength = 1;
|
||||
[DrawIf("movementType", BulletMovementType.Linear, DrawIfAttribute.DisablingType.ReadOnly, DrawIfAttribute.Comparator.NotEqual)]
|
||||
public float waveAmplitude = 1;
|
||||
|
||||
[Space(3)]
|
||||
public GameObject father = null;
|
||||
|
||||
[Header("Materials")]
|
||||
public Material regularMat;
|
||||
public Material waveMat;
|
||||
public Material zigzagMat;
|
||||
|
||||
[Header("VFX")]
|
||||
public GameObject explosionParticle;
|
||||
|
||||
private float timestamp = 0;
|
||||
private Vector3 lastPosition;
|
||||
private Vector3 startPosition;
|
||||
|
||||
private void setUp()
|
||||
{
|
||||
lastPosition = transform.position;
|
||||
startPosition = transform.position;
|
||||
|
||||
gameObject.LeanScale(transform.localScale, .75f).setFrom(Vector3.zero).setEaseOutElastic();
|
||||
timestamp = Time.time;
|
||||
|
||||
switch (movementType)
|
||||
{
|
||||
case BulletMovementType.Linear:
|
||||
GetComponent<ParticleSystemRenderer>().material = regularMat;
|
||||
break;
|
||||
case BulletMovementType.Wave:
|
||||
GetComponent<ParticleSystemRenderer>().material = waveMat;
|
||||
break;
|
||||
case BulletMovementType.ZigZag:
|
||||
GetComponent<ParticleSystemRenderer>().material = zigzagMat;
|
||||
break;
|
||||
}
|
||||
|
||||
CancelInvoke();
|
||||
InvokeRepeating(nameof(hitScan), 0, .25f);
|
||||
Invoke(nameof(shutDown), lifetime);
|
||||
}
|
||||
private void Start()
|
||||
{
|
||||
setUp();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
setUp();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
Vector3 frameOffset = Vector3.zero;
|
||||
frameOffset += transform.position+transform.forward * speed * Time.deltaTime;
|
||||
|
||||
if (movementType == BulletMovementType.Wave)
|
||||
{
|
||||
float sinFunc = Mathf.Asin(Mathf.Sin((Time.time - timestamp) * 1 / waveLength + Mathf.PI*.67f)) * waveAmplitude * Time.deltaTime;
|
||||
frameOffset += sinFunc * transform.right;
|
||||
}
|
||||
else if (movementType == BulletMovementType.ZigZag)
|
||||
{
|
||||
float sinFunc = (Utils.step(Mathf.Sin((Time.time - timestamp) * 1 / waveLength + Mathf.PI*.67f ), 0)*2-1)*waveAmplitude*Time.deltaTime;
|
||||
frameOffset += sinFunc * transform.right;
|
||||
}
|
||||
|
||||
|
||||
transform.position = frameOffset;
|
||||
}
|
||||
|
||||
void hitScan()
|
||||
{
|
||||
RaycastHit[] rayHits=Physics.RaycastAll(lastPosition, (transform.position - lastPosition), (transform.position - lastPosition).magnitude, ~LayerMask.GetMask("Bullet"));
|
||||
Debug.DrawLine(lastPosition, transform.position, Color.magenta, .1f);
|
||||
|
||||
foreach (RaycastHit rh in rayHits)
|
||||
{
|
||||
if (rh.collider != null && !rh.collider.isTrigger && rh.collider.gameObject!=gameObject && !rh.collider.gameObject.CompareTag("Player"))
|
||||
bulletHit();
|
||||
}
|
||||
|
||||
lastPosition = transform.position;
|
||||
}
|
||||
|
||||
public int bulletHit()
|
||||
{
|
||||
GetComponent<ParticleSystem>().Stop();
|
||||
ObjectPooler.instance.SpawnFromPool("BulletExplosion", transform.position);
|
||||
Invoke(nameof(shutDown), .1f);
|
||||
return damage;
|
||||
}
|
||||
void shutDown()
|
||||
{
|
||||
if (GameMaster.Instance.Pooler != null)
|
||||
gameObject.SetActive(false);
|
||||
else
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue