add train moving logic

This commit is contained in:
2022-11-12 01:52:31 +05:00
parent 6e2872c60d
commit ea7a810971
274 changed files with 40843 additions and 1440 deletions
+106
View File
@@ -0,0 +1,106 @@
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
public enum TrainType
{
EP2D,
Ivolga2,
Ivolga3
}
public class LocomotionHandler : MonoBehaviour
{
[SerializeField] private Train[] trains;
[SerializeField] private Material[] materials;
[SerializeField] private float effectDuration;
public float trainSpeed;
public float pullUpPositionBefore;
public float pullUpPositionAfter;
public readonly float pullUpPosition = -12;
private Coroutine c_effect;
void Update()
{
if(Input.GetKeyDown(KeyCode.Alpha1))
ShowTrain(TrainType.EP2D);
if(Input.GetKeyDown(KeyCode.Alpha2))
ShowTrain(TrainType.Ivolga2);
if(Input.GetKeyDown(KeyCode.Alpha3))
ShowTrain(TrainType.Ivolga3);
}
void Start()
{
foreach(var train in trains)
{
train.gameObject.SetActive(false);
}
foreach(var material in materials)
{
material.SetFloat("_EffectPosition", 5);
}
}
public void ShowTrain(TrainType trainType)
{
var activeTrain = trains.FirstOrDefault(x => x.gameObject.activeSelf);
if(activeTrain != null)
activeTrain.Hide();
trains.First(x => x.type == trainType)
.gameObject.SetActive(true);
}
// void SetEffect(bool isShow)
// {
// if(c_effect != null)
// {
// StopCoroutine(c_effect);
// c_effect = null;
// }
// c_effect = StartCoroutine(SetEffectRoutine(isShow));
// }
IEnumerator SetEffectRoutine(bool isShow)
{
float startPosition = materials[0].GetFloat("_EffectPosition");
float currentValue = startPosition;
float endPosition = 0;
if(isShow) endPosition = 5;
else endPosition = -5;
float progress = 0;
float duration = effectDuration;;
while(progress < 1)
{
currentValue = Mathf.Lerp(startPosition, endPosition, progress);
for(int i = 0; i < materials.Length; i++)
{
materials[i]
.SetFloat("_EffectPosition", currentValue);
}
progress += duration * Time.deltaTime;
yield return null;
}
for(int i = 0; i < materials.Length; i++)
{
materials[i]
.SetFloat("_EffectPosition", endPosition);
}
}
}