summaryrefslogtreecommitdiff
path: root/GameCode/SwordArtMove.cs
blob: b521e51669b9ad5200c297036660e9cc543b7c00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using UnityEngine;

public class SwordArtMove : MonoBehaviour
{
	private MoveTransform move;

	public LayerMask mask;

	public AnimationCurve heightCurve;

	public AnimationCurve AwayCurve;

	private Vector3 startUp;

	private Vector3 startForward;

	private Vector3 startPos;

	public float multiplier = 1f;

	public float heightMultiplier = 1f;

	public float awayMultiplier = 1f;

	public float speed = 1f;

	private float counter;

	private ParticleSystem[] parts;

	private void Start()
	{
		parts = GetComponentsInChildren<ParticleSystem>();
		move = GetComponentInParent<MoveTransform>();
		move.enabled = false;
		startForward = base.transform.forward;
		startUp = Vector3.Cross(base.transform.forward, Vector3.forward);
		startPos = base.transform.position;
		awayMultiplier *= Mathf.Pow(move.localForce.magnitude / 40f * 2f, 0.45f);
		awayMultiplier /= 1f + move.drag * 0.05f;
		speed *= Mathf.Pow(awayMultiplier, 0.3f);
	}

	private void Update()
	{
		counter += TimeHandler.deltaTime * speed;
		Vector3 vector = startPos + (heightCurve.Evaluate(counter) * heightMultiplier * startUp + AwayCurve.Evaluate(counter) * awayMultiplier * startForward) * multiplier;
		RaycastHit2D raycastHit2D = Physics2D.Raycast(startPos, (vector - startPos).normalized, Vector3.Distance(vector, startPos), mask);
		if ((bool)raycastHit2D.transform && !raycastHit2D.collider.GetComponent<Damagable>())
		{
			vector = raycastHit2D.point + raycastHit2D.normal * 0.1f;
			for (int i = 0; i < parts.Length; i++)
			{
				parts[i].transform.position = (Vector3)raycastHit2D.point + Vector3.forward * 8f;
				parts[i].transform.rotation = Quaternion.LookRotation(raycastHit2D.normal);
				parts[i].Emit(1);
			}
		}
		base.transform.root.position = vector;
	}
}