Add source files
This commit is contained in:
@@ -0,0 +1,436 @@
|
||||
using System;
|
||||
using RootMotion.FinalIK;
|
||||
using UnityEngine;
|
||||
|
||||
// Token: 0x02000037 RID: 55
|
||||
public class LookAtController : MonoBehaviour
|
||||
{
|
||||
// Token: 0x060007DA RID: 2010 RVA: 0x000ADC8D File Offset: 0x000ABE8D
|
||||
private void Awake()
|
||||
{
|
||||
this.Setup();
|
||||
}
|
||||
|
||||
// Token: 0x060007DB RID: 2011 RVA: 0x000ADC98 File Offset: 0x000ABE98
|
||||
private void Setup()
|
||||
{
|
||||
this.body = base.gameObject.GetComponent<Body>();
|
||||
this.lookIK = this.body.GetLookIK();
|
||||
if (!this.lookIK)
|
||||
{
|
||||
base.enabled = false;
|
||||
}
|
||||
if (!this.thisTarget && this.lookIK)
|
||||
{
|
||||
GameObject gameObject = new GameObject("Aim IK Target");
|
||||
this.thisTarget = gameObject.transform;
|
||||
if (Links.x.fellowship)
|
||||
{
|
||||
this.thisTarget.transform.SetParent(Links.x.fellowship.transform);
|
||||
}
|
||||
}
|
||||
if (this.lookIK)
|
||||
{
|
||||
this.lookIK.solver.IKPositionWeight = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x060007DC RID: 2012 RVA: 0x000ADD5E File Offset: 0x000ABF5E
|
||||
private void Start()
|
||||
{
|
||||
}
|
||||
|
||||
// Token: 0x060007DD RID: 2013 RVA: 0x000ADD60 File Offset: 0x000ABF60
|
||||
public void SetAsActive(bool state)
|
||||
{
|
||||
if (this.lookIK)
|
||||
{
|
||||
base.enabled = state;
|
||||
if (state)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.lookIK.enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x060007DE RID: 2014 RVA: 0x000ADD88 File Offset: 0x000ABF88
|
||||
public void EndLook()
|
||||
{
|
||||
this.target = null;
|
||||
this.hasTarget = false;
|
||||
if (this.body.headAnim)
|
||||
{
|
||||
if (this.body.character && (this.body.character.sleeping || this.body.character.stunned || this.body.character.downed))
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.body.headAnim.PlayAnimation(FaceAnimations.AnimationNames.Blink);
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x060007DF RID: 2015 RVA: 0x000ADE10 File Offset: 0x000AC010
|
||||
public void EndLookFast(bool playFace)
|
||||
{
|
||||
this.target = null;
|
||||
this.hasTarget = false;
|
||||
if (this.body.headAnim && playFace)
|
||||
{
|
||||
if (this.body.character && (this.body.character.sleeping || this.body.character.stunned || this.body.character.downed))
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.body.headAnim.PlayAnimation(FaceAnimations.AnimationNames.Blink);
|
||||
}
|
||||
if (this.lookIK)
|
||||
{
|
||||
this.lookIK.solver.IKPositionWeight = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x060007E0 RID: 2016 RVA: 0x000ADEBC File Offset: 0x000AC0BC
|
||||
public void SetNewTargetTestForCloser(Transform newTarget, float targetTime, float newDelay, bool useHand)
|
||||
{
|
||||
if (!this.hasTarget || !this.target)
|
||||
{
|
||||
this.SetNewTarget(newTarget, targetTime, newDelay, false);
|
||||
return;
|
||||
}
|
||||
if ((newTarget.position - this.body.transform.position).sqrMagnitude < (this.target.position - this.body.transform.position).sqrMagnitude)
|
||||
{
|
||||
this.SetNewTarget(newTarget, targetTime, newDelay, false);
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x060007E1 RID: 2017 RVA: 0x000ADF40 File Offset: 0x000AC140
|
||||
public void SetNewTarget(Transform newTarget, float targetTime, float newDelay, bool useHand)
|
||||
{
|
||||
if (!this.lookIK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!this.body.character && !this.body.inMenu)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (newTarget == this.target && this.hasTarget && targetTime == this.targetTimer)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.target;
|
||||
if (Records.x.inMenus)
|
||||
{
|
||||
this.lastDialogueUpdateTime = Time.realtimeSinceStartup;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.lastDialogueUpdateTime = Time.timeSinceLevelLoad;
|
||||
}
|
||||
if (this.body.character)
|
||||
{
|
||||
if (this.body.character.sleeping || this.body.character.stunned || this.body.character.downed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (this.body.character.stats.animal)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.SetAsActive(true);
|
||||
this.target = newTarget;
|
||||
this.speedTarget = 1f;
|
||||
this.speedWeight = 2f;
|
||||
this.speedFall = 2f;
|
||||
if (!this.body.inMenu)
|
||||
{
|
||||
if (newTarget == this.body.character.lookAtTurnTarget)
|
||||
{
|
||||
this.speedTarget = 2f;
|
||||
this.speedWeight = 2f;
|
||||
this.speedFall = 2f;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Links.x.questEnd.enabled)
|
||||
{
|
||||
this.speedTarget = 5f;
|
||||
}
|
||||
else if (base.enabled)
|
||||
{
|
||||
this.speedTarget = 0.5f;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.speedTarget = 1.5f;
|
||||
}
|
||||
this.speedFall = 0.5f;
|
||||
}
|
||||
this.lookIK.solver.target = this.thisTarget;
|
||||
this.lookIK.enabled = true;
|
||||
this.delay = newDelay;
|
||||
if (this.thisTarget && this.target && !this.hasTarget)
|
||||
{
|
||||
this.thisTarget.position = this.target.position;
|
||||
this.SetTargetYToHeadBone();
|
||||
}
|
||||
this.left = false;
|
||||
this.right = false;
|
||||
Vector3 vector = new Vector3(this.thisTarget.position.x, this.body.tr.position.y, this.thisTarget.position.z) - this.body.tr.position;
|
||||
if (this.AngleDir(this.body.tr.forward, Vector3.Normalize(vector), this.body.tr.up) < 0f)
|
||||
{
|
||||
this.left = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.right = true;
|
||||
}
|
||||
if (this.left && this.body.headAnim)
|
||||
{
|
||||
this.body.headAnim.PlayAnimation(FaceAnimations.AnimationNames.LookLeftLoop);
|
||||
}
|
||||
if (this.right && this.body.headAnim)
|
||||
{
|
||||
this.body.headAnim.PlayAnimation(FaceAnimations.AnimationNames.LookRightLoop);
|
||||
}
|
||||
this.hasTarget = true;
|
||||
this.startTime = Time.timeSinceLevelLoad;
|
||||
if (targetTime > 0f)
|
||||
{
|
||||
this.targetTimer = targetTime;
|
||||
return;
|
||||
}
|
||||
this.targetTimer = 0f;
|
||||
}
|
||||
|
||||
// Token: 0x060007E2 RID: 2018 RVA: 0x000AE278 File Offset: 0x000AC478
|
||||
public void SetTargetYToHeadBone()
|
||||
{
|
||||
Vector3 position = this.thisTarget.position;
|
||||
if (this.body.headBone)
|
||||
{
|
||||
this.thisTarget.position = new Vector3(position.x, this.body.headBone.position.y - 1f, position.z);
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x060007E3 RID: 2019 RVA: 0x000AE2DC File Offset: 0x000AC4DC
|
||||
private void Update()
|
||||
{
|
||||
float num = Time.deltaTime;
|
||||
if (Records.x.paused)
|
||||
{
|
||||
num = Time.unscaledDeltaTime;
|
||||
if (Records.x.filming)
|
||||
{
|
||||
num /= Records.x.filmingAnimatorSpeed;
|
||||
}
|
||||
}
|
||||
if (this.hasTarget)
|
||||
{
|
||||
if (!this.target)
|
||||
{
|
||||
this.hasTarget = false;
|
||||
}
|
||||
if (this.hasTarget)
|
||||
{
|
||||
this.dot = 0.5f;
|
||||
bool flag = false;
|
||||
if (Records.x.dialogue || Records.x.inMenus)
|
||||
{
|
||||
if ((this.body.gameObject.layer == 4 || this.body.gameObject.layer == 25) && Links.x.dialogue.npcTalking)
|
||||
{
|
||||
this.dot = 1f;
|
||||
if ((Records.x.dialogue && Time.timeSinceLevelLoad > this.lastDialogueUpdateTime + 0.08f) || (Records.x.inMenus && Time.realtimeSinceStartup > this.lastDialogueUpdateTime + 0.15f))
|
||||
{
|
||||
Vector3 vector = this.body.headBone.position + this.body.headBone.forward * 10f;
|
||||
if (Records.x.inMenus)
|
||||
{
|
||||
vector.y -= 1f;
|
||||
}
|
||||
if (this.body.headBone.position.y - this.body.tr.position.y < 2.7f)
|
||||
{
|
||||
vector.y += 2f;
|
||||
}
|
||||
else
|
||||
{
|
||||
vector.y -= 1f;
|
||||
}
|
||||
float num2 = -1f;
|
||||
float num3 = 0.5f;
|
||||
this.thisTarget.position = vector + new Vector3(Random.Range(num2, num3), Random.Range(num2, num3), Random.Range(num2, num3));
|
||||
Vector3 position = this.thisTarget.position;
|
||||
if (Mathf.Abs(position.x - vector.x) > 6f)
|
||||
{
|
||||
position.x = this.target.position.x;
|
||||
}
|
||||
if (Mathf.Abs(position.y - vector.y) > 6f)
|
||||
{
|
||||
position.y = this.target.position.y;
|
||||
}
|
||||
if (Mathf.Abs(position.z - vector.z) > 6f)
|
||||
{
|
||||
position.z = this.target.position.z;
|
||||
}
|
||||
this.thisTarget.position = position;
|
||||
if (Records.x.inMenus)
|
||||
{
|
||||
this.lastDialogueUpdateTime = Time.realtimeSinceStartup;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.lastDialogueUpdateTime = Time.timeSinceLevelLoad;
|
||||
}
|
||||
}
|
||||
flag = true;
|
||||
}
|
||||
else if (this.body.gameObject.layer == 25 && !Links.x.dialogue.npcTalking)
|
||||
{
|
||||
Vector3 vector2 = this.body.headBone.position + this.body.headBone.forward * 10f;
|
||||
vector2.y -= 1f;
|
||||
if (this.body.headBone.position.y - this.body.tr.position.y < 2.7f)
|
||||
{
|
||||
vector2.y += 2f;
|
||||
}
|
||||
this.thisTarget.position = vector2;
|
||||
}
|
||||
if (Links.x.dialogue.noBobbling)
|
||||
{
|
||||
this.dot = -1f;
|
||||
}
|
||||
}
|
||||
if (this.body.character)
|
||||
{
|
||||
Vector3 vector3 = Vector3.Lerp(this.thisTarget.position, new Vector3(this.target.position.x, this.body.headBone.position.y, this.target.position.z), num * this.speedTarget);
|
||||
Vector3 forward = this.body.character.tr.forward;
|
||||
Vector3 vector4 = Vector3.Normalize(new Vector3(vector3.x, this.body.character.tr.position.y, vector3.z) - this.body.character.tr.position);
|
||||
this.dot = Vector3.Dot(forward, vector4);
|
||||
if (this.dot < -0.5f)
|
||||
{
|
||||
Vector3 vector5 = this.body.character.tr.right;
|
||||
vector3 += vector5 * 2f;
|
||||
vector4 = Vector3.Normalize(new Vector3(vector3.x, this.body.character.tr.position.y, vector3.z) - this.body.character.tr.position);
|
||||
this.dot = Vector3.Dot(forward, vector4);
|
||||
if (!flag)
|
||||
{
|
||||
this.thisTarget.position = vector3;
|
||||
}
|
||||
}
|
||||
else if (!flag)
|
||||
{
|
||||
this.thisTarget.position = vector3;
|
||||
}
|
||||
if ((this.body.character.animID != 0 && !Records.x.dialogue) || this.body.character.animator.GetBool("Combat"))
|
||||
{
|
||||
this.dot = -1f;
|
||||
}
|
||||
if (this.body.character.IsWalking())
|
||||
{
|
||||
this.dot = -1f;
|
||||
}
|
||||
}
|
||||
else if (!flag)
|
||||
{
|
||||
this.thisTarget.position = Vector3.Lerp(this.thisTarget.position, new Vector3(this.target.position.x, this.body.headBone.position.y, this.target.position.z), num * this.speedTarget);
|
||||
}
|
||||
if (!flag)
|
||||
{
|
||||
this.SetTargetYToHeadBone();
|
||||
}
|
||||
if (this.delay == 0f || Time.timeSinceLevelLoad > this.startTime + this.delay)
|
||||
{
|
||||
float num4 = 1f;
|
||||
if (this.dot < 0.25f)
|
||||
{
|
||||
num4 = this.lookIK.solver.IKPositionWeight;
|
||||
}
|
||||
if (this.dot == -1f)
|
||||
{
|
||||
num4 = 0f;
|
||||
}
|
||||
if (this.body.inMenu)
|
||||
{
|
||||
num4 *= 0.8f;
|
||||
}
|
||||
this.lookIK.solver.IKPositionWeight = Mathf.Lerp(this.lookIK.solver.IKPositionWeight, num4, num * this.speedWeight);
|
||||
}
|
||||
if (this.targetTimer > 0f && Time.timeSinceLevelLoad > this.startTime + this.targetTimer + this.delay)
|
||||
{
|
||||
this.hasTarget = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!this.hasTarget && this.lookIK.solver.IKPositionWeight > 0.01f)
|
||||
{
|
||||
this.lookIK.solver.IKPositionWeight = Mathf.Lerp(this.lookIK.solver.IKPositionWeight, 0f, num * this.speedFall);
|
||||
return;
|
||||
}
|
||||
if (!this.hasTarget)
|
||||
{
|
||||
this.SetAsActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x060007E4 RID: 2020 RVA: 0x000AEA1C File Offset: 0x000ACC1C
|
||||
public float AngleDir(Vector3 fwd, Vector3 targetDir, Vector3 up)
|
||||
{
|
||||
float num = Vector3.Dot(Vector3.Cross(fwd, targetDir), up);
|
||||
if ((double)num > 0.0)
|
||||
{
|
||||
return 1f;
|
||||
}
|
||||
if ((double)num < 0.0)
|
||||
{
|
||||
return -1f;
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
// Token: 0x04000C3F RID: 3135
|
||||
private Body body;
|
||||
|
||||
// Token: 0x04000C40 RID: 3136
|
||||
private LookAtIK lookIK;
|
||||
|
||||
// Token: 0x04000C41 RID: 3137
|
||||
public Transform target;
|
||||
|
||||
// Token: 0x04000C42 RID: 3138
|
||||
public bool hasTarget;
|
||||
|
||||
// Token: 0x04000C43 RID: 3139
|
||||
public float targetTimer;
|
||||
|
||||
// Token: 0x04000C44 RID: 3140
|
||||
private float startTime;
|
||||
|
||||
// Token: 0x04000C45 RID: 3141
|
||||
public float delay;
|
||||
|
||||
// Token: 0x04000C46 RID: 3142
|
||||
public Transform thisTarget;
|
||||
|
||||
// Token: 0x04000C47 RID: 3143
|
||||
public Transform bodyTarget;
|
||||
|
||||
// Token: 0x04000C48 RID: 3144
|
||||
private float speedTarget;
|
||||
|
||||
// Token: 0x04000C49 RID: 3145
|
||||
private float speedWeight;
|
||||
|
||||
// Token: 0x04000C4A RID: 3146
|
||||
private float speedFall;
|
||||
|
||||
// Token: 0x04000C4B RID: 3147
|
||||
private bool left;
|
||||
|
||||
// Token: 0x04000C4C RID: 3148
|
||||
private bool right;
|
||||
|
||||
// Token: 0x04000C4D RID: 3149
|
||||
public float dot;
|
||||
|
||||
// Token: 0x04000C4E RID: 3150
|
||||
private float lastDialogueUpdateTime;
|
||||
}
|
Reference in New Issue
Block a user