blob: dc9ae608f3f332d78a198d05a671d3dad3545b91 (
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
using UnityEngine;
public class Balance : MonoBehaviour
{
private Rigidbody handLeft;
private Rigidbody handRight;
private Rigidbody footLeft;
private Rigidbody footRight;
private Rigidbody hip;
private Vector3 centerOfMass;
private Rigidbody[] allRigs;
public float[] balanceForce;
public float[] footCenterForces;
private AnimationHandler animationHandler;
private PlayerDeath death;
private Strength str;
private float muscleMultiplier;
private void Start()
{
death = GetComponent<PlayerDeath>();
str = GetComponent<Strength>();
allRigs = GetComponentsInChildren<Rigidbody>();
HandLeft componentInChildren = GetComponentInChildren<HandLeft>();
if ((bool)componentInChildren)
{
handLeft = componentInChildren.GetComponent<Rigidbody>();
}
HandRight componentInChildren2 = GetComponentInChildren<HandRight>();
if ((bool)componentInChildren2)
{
handRight = componentInChildren2.GetComponent<Rigidbody>();
}
footLeft = GetComponentInChildren<KneeLeft>().GetComponent<Rigidbody>();
footRight = GetComponentInChildren<KneeRight>().GetComponent<Rigidbody>();
hip = GetComponentInChildren<Hip>().GetComponent<Rigidbody>();
animationHandler = GetComponent<AnimationHandler>();
}
private void FixedUpdate()
{
if (!death.dead)
{
muscleMultiplier = str.strength;
centerOfMass = Vector3.zero;
Rigidbody[] array = allRigs;
foreach (Rigidbody rigidbody in array)
{
centerOfMass += rigidbody.worldCenterOfMass;
}
centerOfMass /= (float)allRigs.Length;
centerOfMass.y = 0f;
BalanceLegs();
CenterLegs();
}
}
private void CenterLegs()
{
Vector3 vector = footLeft.transform.position + footLeft.transform.forward * 0.5f;
Vector3 vector2 = footRight.transform.position + footRight.transform.forward * 0.5f;
Vector3 vector3 = vector;
if (vector.y + 0.3f < hip.worldCenterOfMass.y)
{
vector3.y = 0f;
footLeft.AddForceAtPosition((centerOfMass - vector3) * muscleMultiplier * footCenterForces[animationHandler.animationState], vector, ForceMode.Acceleration);
}
Vector3 vector4 = vector2;
if (vector4.y + 0.3f < hip.worldCenterOfMass.y)
{
vector4.y = 0f;
footRight.AddForceAtPosition((centerOfMass - vector4) * muscleMultiplier * footCenterForces[animationHandler.animationState], vector2, ForceMode.Acceleration);
}
}
private void BalanceLegs()
{
Vector3 vector = footLeft.transform.position + footLeft.transform.forward * 0.5f;
Vector3 vector2 = footRight.transform.position + footRight.transform.forward * 0.5f;
Vector3 vector3 = (vector + vector2) / 2f;
if (!(vector3.y + 0.3f > hip.worldCenterOfMass.y))
{
vector3.y = 0f;
Vector3 vector4 = centerOfMass - vector3;
footLeft.AddForceAtPosition(vector4 * muscleMultiplier * balanceForce[animationHandler.animationState], vector, ForceMode.Acceleration);
footRight.AddForceAtPosition(vector4 * muscleMultiplier * balanceForce[animationHandler.animationState], vector2, ForceMode.Acceleration);
}
}
}
|