80 lines
1.9 KiB
C#
80 lines
1.9 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Diagnostics;
|
||
|
using DG.Tweening;
|
||
|
using TMPro;
|
||
|
using UnityEditor.UIElements;
|
||
|
using UnityEngine;
|
||
|
|
||
|
public class Jetpack : MonoBehaviour
|
||
|
{
|
||
|
[Serializable]
|
||
|
private struct Settings
|
||
|
{
|
||
|
public Material trailMat;
|
||
|
public int trimIdx;
|
||
|
public float pulseTime;
|
||
|
public float emissionScale;
|
||
|
public float lightIntensity;
|
||
|
public AnimationCurve trailTimeCurve;
|
||
|
}
|
||
|
|
||
|
[SerializeField] private Settings _settings;
|
||
|
|
||
|
[SerializeField] private TrailRenderer[] _trails;
|
||
|
private float[] _baseTrailTimes;
|
||
|
|
||
|
[SerializeField] private Light _light;
|
||
|
|
||
|
private const string EMISSION_COLOR = "_EmissionColor";
|
||
|
|
||
|
private void Start()
|
||
|
{
|
||
|
_baseTrailTimes = new float[_trails.Length];
|
||
|
for (int i = 0; i < _trails.Length; i++)
|
||
|
{
|
||
|
_baseTrailTimes[i] = _trails[i].time;
|
||
|
_trails[i].time = 0;
|
||
|
}
|
||
|
|
||
|
DisableTrails();
|
||
|
|
||
|
_light.intensity = 0;
|
||
|
}
|
||
|
|
||
|
private void DisableTrails() => SetTrails(false);
|
||
|
private void EnableTrails() => SetTrails(true);
|
||
|
|
||
|
private void SetTrails(bool state)
|
||
|
{
|
||
|
for (int i = 0; i < _trails.Length; i++)
|
||
|
{
|
||
|
_trails[i].Clear();
|
||
|
_trails[i].enabled = state;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Pulse()
|
||
|
{
|
||
|
EnableTrails();
|
||
|
|
||
|
for (int i = 0; i < _trails.Length; i++)
|
||
|
{
|
||
|
_trails[i].time = _baseTrailTimes[i];
|
||
|
_trails[i]
|
||
|
.DOTime(0, _settings.pulseTime);
|
||
|
}
|
||
|
|
||
|
var t = 0f;
|
||
|
DOTween.To(
|
||
|
() => t,
|
||
|
x => { },
|
||
|
1.0f,
|
||
|
_settings.pulseTime)
|
||
|
.OnComplete(DisableTrails);
|
||
|
|
||
|
_light.intensity = _settings.lightIntensity;
|
||
|
_light.DOIntensity(0, _settings.pulseTime);
|
||
|
}
|
||
|
}
|