732 lines
19 KiB
C#
732 lines
19 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Pathfinding;
|
|
using UnityEngine;
|
|
|
|
// Token: 0x02000019 RID: 25
|
|
public class Boro : MonoBehaviour
|
|
{
|
|
// Token: 0x060002C1 RID: 705 RVA: 0x00038B3F File Offset: 0x00036D3F
|
|
private void Start()
|
|
{
|
|
}
|
|
|
|
// Token: 0x060002C2 RID: 706 RVA: 0x00038B41 File Offset: 0x00036D41
|
|
public void Setup()
|
|
{
|
|
this.character = base.gameObject.GetComponent<Character>();
|
|
this.party = Links.x.portraitOrder;
|
|
}
|
|
|
|
// Token: 0x060002C3 RID: 707 RVA: 0x00038B64 File Offset: 0x00036D64
|
|
private void OnDisable()
|
|
{
|
|
this.Stop();
|
|
}
|
|
|
|
// Token: 0x060002C4 RID: 708 RVA: 0x00038B6C File Offset: 0x00036D6C
|
|
public void Call(Character callingParty)
|
|
{
|
|
if (this.corout == null && Links.x.gaia.pathfindingReady)
|
|
{
|
|
if (this.leaveCoroutine != null)
|
|
{
|
|
base.StopCoroutine(this.leaveCoroutine);
|
|
this.leaveCoroutine = null;
|
|
}
|
|
if (this.attempt == 0)
|
|
{
|
|
string text = "Calling " + Records.x.boroName + "...";
|
|
Links.x.gameFeed.AddFeed(text);
|
|
}
|
|
this.corout = this.FindSpot(callingParty, true);
|
|
base.StartCoroutine(this.corout);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060002C5 RID: 709 RVA: 0x00038BFC File Offset: 0x00036DFC
|
|
public void Move(Character callingParty)
|
|
{
|
|
if (this.corout != null)
|
|
{
|
|
base.StopCoroutine(this.corout);
|
|
this.corout = null;
|
|
}
|
|
if (this.corout == null && Links.x.gaia.pathfindingReady)
|
|
{
|
|
this.corout = this.FindSpot(callingParty, true);
|
|
base.StartCoroutine(this.corout);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060002C6 RID: 710 RVA: 0x00038C58 File Offset: 0x00036E58
|
|
private IEnumerator FindSpot(Character callingParty, bool instant)
|
|
{
|
|
float radius = 12f;
|
|
ConstantPath constPath = ConstantPath.ConstructFast(callingParty.node, Records.x.GetConstantPathRadius((int)radius), null);
|
|
this.SetNodeConstraint(null, false);
|
|
this.nodeConstraint.constrainWalkability = false;
|
|
constPath.nnConstraint = this.nodeConstraint;
|
|
AstarPath.StartPath(constPath, false);
|
|
yield return base.StartCoroutine(constPath.WaitForPath());
|
|
constPath.Claim(this);
|
|
this.allNodes = constPath.allNodes;
|
|
int num = this.allNodes.Count;
|
|
int num2 = num - 1;
|
|
this.SetNodeConstraint(this.character, true);
|
|
this.suitableNodes.Clear();
|
|
this.edgeNodes.Clear();
|
|
this.nearNodes.Clear();
|
|
radius *= Records.x.nodeSize;
|
|
for (int i = num2; i >= 0; i--)
|
|
{
|
|
GraphNode graphNode = this.allNodes[i];
|
|
if (((Vector3)graphNode.position - (Vector3)callingParty.node.position).sqrMagnitude < radius * radius && this.nodeConstraint.Suitable(graphNode))
|
|
{
|
|
this.suitableNodes.Add(graphNode);
|
|
}
|
|
}
|
|
constPath.Release(this, false);
|
|
num = this.suitableNodes.Count;
|
|
Vector3 position = callingParty.tr.position;
|
|
this.added.Clear();
|
|
for (int j = 0; j < num; j++)
|
|
{
|
|
this.added.Add(false);
|
|
}
|
|
for (int k = 0; k < 15; k++)
|
|
{
|
|
float num3 = float.PositiveInfinity;
|
|
int num4 = -1;
|
|
for (int l = 0; l < num; l++)
|
|
{
|
|
if (!this.added[l])
|
|
{
|
|
float sqrMagnitude = this.SubtractVectors(position, (Vector3)this.suitableNodes[l].position).sqrMagnitude;
|
|
if (sqrMagnitude < num3)
|
|
{
|
|
num3 = sqrMagnitude;
|
|
num4 = l;
|
|
}
|
|
}
|
|
}
|
|
if (num4 > -1)
|
|
{
|
|
this.added[num4] = true;
|
|
this.edgeNodes.Add(this.suitableNodes[num4]);
|
|
}
|
|
}
|
|
if (this.edgeNodes.Count > 0)
|
|
{
|
|
this.character.SetMeshState(false);
|
|
Links.x.gaia.boro.body.SetMeshState(false, true);
|
|
if (Links.x.gaia.boro.circleTr)
|
|
{
|
|
Links.x.gaia.boro.circleTr.gameObject.SetActive(false);
|
|
}
|
|
float num5 = Vector3.Distance(this.character.tr.position, callingParty.tr.position);
|
|
num5 *= 0.05f;
|
|
if (num5 < 1f)
|
|
{
|
|
num5 = 1f;
|
|
}
|
|
if (this.attempt == 0 && !instant)
|
|
{
|
|
yield return new WaitForSeconds(num5);
|
|
}
|
|
else if (this.attempt == 0 && instant)
|
|
{
|
|
yield return new WaitForSeconds(0.5f);
|
|
}
|
|
GraphNode graphNode2 = this.edgeNodes[this.edgeNodes.Count - 1];
|
|
int num6 = this.edgeNodes.Count - 1;
|
|
this.attempt = 0;
|
|
if (this.character.inactive)
|
|
{
|
|
this.character.TurnScriptsOn();
|
|
}
|
|
this.boroInvisible = false;
|
|
Records.x.boroInvisible = this.boroInvisible;
|
|
this.character.tr.position = (Vector3)this.edgeNodes[num6].position;
|
|
this.character.SetRotation(Quaternion.LookRotation(callingParty.tr.position - this.character.tr.position), false, true);
|
|
this.character.FirstPosition(this.edgeNodes[num6]);
|
|
this.character.SetMeshState(true);
|
|
Links.x.gaia.boro.body.SetMeshState(true, true);
|
|
if (Links.x.gaia.boro.circleTr)
|
|
{
|
|
Links.x.gaia.boro.circleTr.gameObject.SetActive(true);
|
|
}
|
|
Links.x.gaia.boro.body.SeeThroughColliders(true);
|
|
Links.x.gaia.boro.thisCollider.enabled = true;
|
|
this.character.PlaySoundFX(0, 6);
|
|
Links.x.hudControl.ToggleBoroButtonSprite();
|
|
}
|
|
else if (this.attempt < 5)
|
|
{
|
|
this.attempt++;
|
|
yield return new WaitForSeconds(0.5f);
|
|
this.corout = null;
|
|
this.Call(callingParty);
|
|
}
|
|
else
|
|
{
|
|
Links.x.hudControl.ToggleBoroButtonSprite();
|
|
Links.x.gameFeed.AddFeed("Boro cannot stand here");
|
|
Links.x.gameFeed.ShowNotice("Boro cannot find a place to stand here");
|
|
}
|
|
this.corout = null;
|
|
yield return new WaitForSeconds(0.1f);
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x060002C7 RID: 711 RVA: 0x00038C78 File Offset: 0x00036E78
|
|
public bool BoroNearby()
|
|
{
|
|
return this.character.sailing || (!this.boroInvisible && (Links.x.hasMain && (Links.x.main.currentPosition - this.character.tr.position).sqrMagnitude < 900f));
|
|
}
|
|
|
|
// Token: 0x060002C8 RID: 712 RVA: 0x00038CE0 File Offset: 0x00036EE0
|
|
public void StartLeaveWait()
|
|
{
|
|
if (this.leaveCoroutine == null)
|
|
{
|
|
this.leaveCoroutine = this.WaitToLeave(false);
|
|
base.StartCoroutine(this.leaveCoroutine);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060002C9 RID: 713 RVA: 0x00038D04 File Offset: 0x00036F04
|
|
private IEnumerator WaitToLeave(bool fromButton)
|
|
{
|
|
Links.x.hudControl.ToggleBoroButtonSprite();
|
|
float timeToLerp = 3f;
|
|
float percentage = 0f;
|
|
float startTime = Time.time;
|
|
if (fromButton)
|
|
{
|
|
timeToLerp = 1f;
|
|
this.character.Flee(Links.x.main.node, false, Links.x.gameplay.seconds, 10f);
|
|
}
|
|
if (!Links.x.gaia.sceneLoaded)
|
|
{
|
|
timeToLerp = 0.0001f;
|
|
fromButton = true;
|
|
}
|
|
while (percentage < 1f && (!this.BoroNearby() || fromButton))
|
|
{
|
|
percentage = (Time.time - startTime) / timeToLerp;
|
|
yield return null;
|
|
}
|
|
if (!this.BoroNearby() || fromButton)
|
|
{
|
|
bool sceneLoaded = Links.x.gaia.sceneLoaded;
|
|
this.character.SetMeshState(false);
|
|
this.character.body.SetMeshState(false, sceneLoaded);
|
|
this.boroInvisible = true;
|
|
Records.x.boroInvisible = this.boroInvisible;
|
|
Links.x.gaia.boro.body.SeeThroughColliders(false);
|
|
Links.x.gaia.boro.thisCollider.enabled = false;
|
|
yield return new WaitForSeconds(0.5f);
|
|
this.character.RemoveLastNode(true);
|
|
this.character.TurnScriptsOff();
|
|
}
|
|
Links.x.hudControl.ToggleBoroButtonSprite();
|
|
this.leaveCoroutine = null;
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x060002CA RID: 714 RVA: 0x00038D1C File Offset: 0x00036F1C
|
|
public void Leave()
|
|
{
|
|
if (Records.x.partySailing)
|
|
{
|
|
return;
|
|
}
|
|
if (this.leaveCoroutine != null)
|
|
{
|
|
base.StopCoroutine(this.leaveCoroutine);
|
|
this.leaveCoroutine = null;
|
|
}
|
|
this.leaveCoroutine = this.WaitToLeave(true);
|
|
base.StartCoroutine(this.leaveCoroutine);
|
|
}
|
|
|
|
// Token: 0x060002CB RID: 715 RVA: 0x00038D6C File Offset: 0x00036F6C
|
|
public void BackToBeach()
|
|
{
|
|
if (this.coroutBack == null && Records.x.boroLastBeachPoint != Vector3.zero)
|
|
{
|
|
this.coroutBack = this.Back();
|
|
base.StartCoroutine(this.coroutBack);
|
|
return;
|
|
}
|
|
Links.x.gameFeed.AddFeed("Boro is busy");
|
|
}
|
|
|
|
// Token: 0x060002CC RID: 716 RVA: 0x00038DC5 File Offset: 0x00036FC5
|
|
private IEnumerator Back()
|
|
{
|
|
this.SetNodeConstraint(this.character, true);
|
|
GraphNode beachNode = this.character.NearNode(Records.x.boroLastBeachPoint, true, 0, -1, 0);
|
|
bool flag;
|
|
if (beachNode == null)
|
|
{
|
|
flag = false;
|
|
Links.x.gameFeed.AddFeed("Boro cannot find a place on beach");
|
|
Links.x.gameFeed.ShowNotice("Boro cannot find a place to stand");
|
|
}
|
|
else
|
|
{
|
|
flag = true;
|
|
}
|
|
if (flag)
|
|
{
|
|
this.character.SetMeshState(false);
|
|
Links.x.gaia.boro.body.SetMeshState(false, true);
|
|
if (Links.x.gaia.boro.circleTr)
|
|
{
|
|
Links.x.gaia.boro.circleTr.gameObject.SetActive(false);
|
|
}
|
|
float t = 0.5f;
|
|
yield return new WaitForSeconds(t);
|
|
this.character.tr.position = (Vector3)beachNode.position;
|
|
this.character.FirstPosition(beachNode);
|
|
yield return new WaitForSeconds(t);
|
|
this.character.SetMeshState(true);
|
|
Links.x.gaia.boro.body.SetMeshState(true, true);
|
|
if (Links.x.gaia.boro.circleTr)
|
|
{
|
|
Links.x.gaia.boro.circleTr.gameObject.SetActive(true);
|
|
}
|
|
this.character.PlaySoundFX(0, 6);
|
|
}
|
|
this.coroutBack = null;
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x060002CD RID: 717 RVA: 0x00038DD4 File Offset: 0x00036FD4
|
|
public void LeavingForCombat()
|
|
{
|
|
if (this.boroInvisible)
|
|
{
|
|
return;
|
|
}
|
|
if (this.character.sailing)
|
|
{
|
|
return;
|
|
}
|
|
if (this.coroutCombat != null)
|
|
{
|
|
base.StopCoroutine(this.coroutCombat);
|
|
this.coroutCombat = null;
|
|
}
|
|
if (this.coroutCombat == null && !this.boroInvisible)
|
|
{
|
|
this.savedNode = this.character.node;
|
|
this.coroutCombat = this.FindCombatRetreat(false, true);
|
|
base.StartCoroutine(this.coroutCombat);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060002CE RID: 718 RVA: 0x00038E50 File Offset: 0x00037050
|
|
public void ComingBackFromCombat()
|
|
{
|
|
if (this.character.sailing)
|
|
{
|
|
return;
|
|
}
|
|
if (!Links.x.gaia.pathfindingReady)
|
|
{
|
|
return;
|
|
}
|
|
if (this.boroInvisible)
|
|
{
|
|
return;
|
|
}
|
|
if (this.coroutCombat != null)
|
|
{
|
|
base.StopCoroutine(this.coroutCombat);
|
|
this.coroutCombat = null;
|
|
}
|
|
if (this.coroutCombat == null && this.character.node == null)
|
|
{
|
|
this.coroutCombat = this.FindCombatRetreat(true, true);
|
|
base.StartCoroutine(this.coroutCombat);
|
|
return;
|
|
}
|
|
if (this.character.node != null)
|
|
{
|
|
this.character.TurnScriptsOn();
|
|
this.boroInvisible = false;
|
|
Records.x.boroInvisible = this.boroInvisible;
|
|
Links.x.gaia.boro.body.SetMeshState(true, true);
|
|
this.character.EndPath();
|
|
Links.x.gaia.boro.body.SeeThroughColliders(true);
|
|
Links.x.gaia.boro.thisCollider.enabled = true;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060002CF RID: 719 RVA: 0x00038F5B File Offset: 0x0003715B
|
|
private IEnumerator FindCombatRetreat(bool state, bool instant)
|
|
{
|
|
bool enoughNodes = false;
|
|
float radius = 12f;
|
|
if (!state)
|
|
{
|
|
this.character.CircleAnimation("");
|
|
}
|
|
GraphNode centerNode = this.character.node;
|
|
if (state)
|
|
{
|
|
this.character.TurnScriptsOn();
|
|
this.character.FindCurrentNode(true);
|
|
}
|
|
if (this.character.node == null && Links.x.diorama.playerStartBoatDefault)
|
|
{
|
|
this.character.tr.position = Links.x.diorama.playerStartBoatDefault.position;
|
|
this.character.FirstPosition(null);
|
|
}
|
|
if (this.character.node == null)
|
|
{
|
|
Debug.Log("Sheep node is null");
|
|
this.character.SetMeshState(state);
|
|
Links.x.gaia.boro.body.SetMeshState(state, true);
|
|
if (!state)
|
|
{
|
|
this.boroInvisible = true;
|
|
}
|
|
else
|
|
{
|
|
this.boroInvisible = false;
|
|
}
|
|
Records.x.boroInvisible = this.boroInvisible;
|
|
if (this.boroInvisible)
|
|
{
|
|
Links.x.gaia.boro.body.SeeThroughColliders(false);
|
|
Links.x.gaia.boro.thisCollider.enabled = false;
|
|
}
|
|
else
|
|
{
|
|
Links.x.gaia.boro.body.SeeThroughColliders(true);
|
|
Links.x.gaia.boro.thisCollider.enabled = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (state)
|
|
{
|
|
this.character.tr.position = (Vector3)this.character.node.position;
|
|
centerNode = this.savedNode;
|
|
}
|
|
ConstantPath constPath = ConstantPath.ConstructFast(centerNode, Records.x.GetConstantPathRadius((int)radius), null);
|
|
this.SetNodeConstraint(null, true);
|
|
this.nodeConstraint.constrainWalkability = false;
|
|
constPath.nnConstraint = this.nodeConstraint;
|
|
AstarPath.StartPath(constPath, false);
|
|
yield return base.StartCoroutine(constPath.WaitForPath());
|
|
constPath.Claim(this);
|
|
this.allNodes = constPath.allNodes;
|
|
int num = this.allNodes.Count;
|
|
int num2 = num - 1;
|
|
Vector3 zero = Vector3.zero;
|
|
Vector3 zero2 = Vector3.zero;
|
|
Vector3 zero3 = Vector3.zero;
|
|
Vector3 zero4 = Vector3.zero;
|
|
Vector3 forward = Vector3.forward;
|
|
Vector3 zero5 = Vector3.zero;
|
|
Vector3 zero6 = Vector3.zero;
|
|
this.SetNodeConstraint(this.character, true);
|
|
this.suitableNodes.Clear();
|
|
this.edgeNodes.Clear();
|
|
this.nearNodes.Clear();
|
|
radius *= Records.x.nodeSize;
|
|
if (!state)
|
|
{
|
|
for (int j = num2; j >= 0; j--)
|
|
{
|
|
GraphNode graphNode = this.allNodes[j];
|
|
if (((Vector3)graphNode.position - (Vector3)centerNode.position).sqrMagnitude < radius * radius && this.nodeConstraint.Suitable(graphNode))
|
|
{
|
|
this.suitableNodes.Add(graphNode);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int k = 0; k < num; k++)
|
|
{
|
|
GraphNode graphNode = this.allNodes[k];
|
|
if (((Vector3)graphNode.position - (Vector3)centerNode.position).sqrMagnitude < radius * radius && this.nodeConstraint.Suitable(graphNode))
|
|
{
|
|
this.suitableNodes.Add(graphNode);
|
|
}
|
|
}
|
|
}
|
|
num = this.suitableNodes.Count;
|
|
num2 = num - 1;
|
|
Vector3 position = this.character.tr.position;
|
|
for (int l = 0; l < num; l++)
|
|
{
|
|
if (!enoughNodes)
|
|
{
|
|
GraphNode graphNode = this.suitableNodes[l];
|
|
this.edgeNodes.Add(graphNode);
|
|
if (this.edgeNodes.Count >= 100)
|
|
{
|
|
enoughNodes = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
constPath.Release(this, false);
|
|
this.character.PlaySoundFX(0, 6);
|
|
int nodeIndex = -1;
|
|
if (this.edgeNodes.Count > 0)
|
|
{
|
|
bool foundPath = false;
|
|
int num3;
|
|
for (int i = 0; i < this.edgeNodes.Count; i = num3 + 1)
|
|
{
|
|
if (!foundPath)
|
|
{
|
|
ABPath p = ABPath.ConstructFast(this.character.node, this.edgeNodes[i], null);
|
|
p.nnConstraint = this.nodeConstraint;
|
|
AstarPath.StartPath(p, false);
|
|
yield return base.StartCoroutine(p.WaitForPath());
|
|
p.Claim(this);
|
|
if (!p.error)
|
|
{
|
|
foundPath = true;
|
|
nodeIndex = i;
|
|
}
|
|
p.Release(this, false);
|
|
p = null;
|
|
}
|
|
num3 = i;
|
|
}
|
|
}
|
|
GraphNode graphNode2 = null;
|
|
if (nodeIndex > -1)
|
|
{
|
|
graphNode2 = this.edgeNodes[nodeIndex];
|
|
}
|
|
if (graphNode2 == null || instant)
|
|
{
|
|
this.character.SetMeshState(state);
|
|
Links.x.gaia.boro.body.SetMeshState(state, true);
|
|
if (!state)
|
|
{
|
|
this.boroInvisible = true;
|
|
}
|
|
else
|
|
{
|
|
this.boroInvisible = false;
|
|
}
|
|
Records.x.boroInvisible = this.boroInvisible;
|
|
if (this.boroInvisible)
|
|
{
|
|
Links.x.gaia.boro.body.SeeThroughColliders(false);
|
|
Links.x.gaia.boro.thisCollider.enabled = false;
|
|
}
|
|
else
|
|
{
|
|
Links.x.gaia.boro.body.SeeThroughColliders(true);
|
|
Links.x.gaia.boro.thisCollider.enabled = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bool flag = true;
|
|
if (state)
|
|
{
|
|
flag = false;
|
|
}
|
|
this.character.MakePath(this.edgeNodes[nodeIndex], 10, false, flag, true);
|
|
yield return new WaitForSecondsRealtime(2f);
|
|
this.character.SetMeshState(state);
|
|
Links.x.gaia.boro.body.SetMeshState(state, true);
|
|
if (state)
|
|
{
|
|
this.character.CircleAnimation("");
|
|
}
|
|
if (!state)
|
|
{
|
|
this.boroInvisible = true;
|
|
}
|
|
else
|
|
{
|
|
this.boroInvisible = false;
|
|
}
|
|
Records.x.boroInvisible = this.boroInvisible;
|
|
if (this.boroInvisible)
|
|
{
|
|
Links.x.gaia.boro.body.SeeThroughColliders(false);
|
|
Links.x.gaia.boro.thisCollider.enabled = false;
|
|
}
|
|
else
|
|
{
|
|
Links.x.gaia.boro.body.SeeThroughColliders(true);
|
|
Links.x.gaia.boro.thisCollider.enabled = true;
|
|
}
|
|
if (!state)
|
|
{
|
|
yield return new WaitForSecondsRealtime(2f);
|
|
this.character.TargetReached();
|
|
this.character.RemoveLastNode(true);
|
|
this.character.TurnScriptsOff();
|
|
}
|
|
}
|
|
constPath = null;
|
|
}
|
|
Links.x.hudControl.ToggleBoroButtonSprite();
|
|
this.coroutCombat = null;
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x060002D0 RID: 720 RVA: 0x00038F78 File Offset: 0x00037178
|
|
private GraphNode GetSuitableNode()
|
|
{
|
|
for (int i = 0; i < this.edgeNodes.Count; i++)
|
|
{
|
|
if (this.nodeConstraint.Suitable(this.edgeNodes[i]))
|
|
{
|
|
return this.edgeNodes[i];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Token: 0x060002D1 RID: 721 RVA: 0x00038FC2 File Offset: 0x000371C2
|
|
public void Stop()
|
|
{
|
|
this.attempt = 0;
|
|
if (this.corout != null)
|
|
{
|
|
base.StopCoroutine(this.corout);
|
|
this.corout = null;
|
|
}
|
|
if (this.coroutCombat != null)
|
|
{
|
|
base.StopCoroutine(this.coroutCombat);
|
|
this.coroutCombat = null;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060002D2 RID: 722 RVA: 0x00039001 File Offset: 0x00037201
|
|
public void Sail()
|
|
{
|
|
}
|
|
|
|
// Token: 0x060002D3 RID: 723 RVA: 0x00039003 File Offset: 0x00037203
|
|
public void LevelUp()
|
|
{
|
|
}
|
|
|
|
// Token: 0x060002D4 RID: 724 RVA: 0x00039008 File Offset: 0x00037208
|
|
public void SetNodeConstraint(Character pathfinder, bool constrainTags)
|
|
{
|
|
this.nodeConstraint.constrainWalkability = true;
|
|
this.nodeConstraint.walkable = true;
|
|
this.nodeConstraint.constrainTags = constrainTags;
|
|
this.nodeConstraint.checkCircleID = 0;
|
|
if (!pathfinder)
|
|
{
|
|
this.nodeConstraint.passID = 0;
|
|
this.nodeConstraint.passID2 = 0;
|
|
this.nodeConstraint.checkConnections = 0;
|
|
this.nodeConstraint.constrainPenalty = 0;
|
|
}
|
|
else
|
|
{
|
|
this.nodeConstraint.passID = pathfinder.nodeStationaryID;
|
|
this.nodeConstraint.passID2 = pathfinder.nodeMovingID;
|
|
this.nodeConstraint.checkConnections = pathfinder.ConnectionNumber();
|
|
this.nodeConstraint.constrainPenalty = 0;
|
|
}
|
|
this.nodeConstraint.constrainToArea = -1;
|
|
}
|
|
|
|
// Token: 0x060002D5 RID: 725 RVA: 0x000390CC File Offset: 0x000372CC
|
|
public Vector3 CustomNormalize(Vector3 v)
|
|
{
|
|
double num = Math.Sqrt((double)(v.x * v.x + v.y * v.y + v.z * v.z));
|
|
if (num > 9.99999974737875E-06)
|
|
{
|
|
float num2 = (float)num;
|
|
v.x /= num2;
|
|
v.y /= num2;
|
|
v.z /= num2;
|
|
return v;
|
|
}
|
|
return Vector3.zero;
|
|
}
|
|
|
|
// Token: 0x060002D6 RID: 726 RVA: 0x00039143 File Offset: 0x00037343
|
|
public float GetDot(Vector3 vector1, Vector3 vector2)
|
|
{
|
|
return vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z;
|
|
}
|
|
|
|
// Token: 0x060002D7 RID: 727 RVA: 0x00039170 File Offset: 0x00037370
|
|
public Vector3 SubtractVectors(Vector3 a, Vector3 b)
|
|
{
|
|
Vector3 vector;
|
|
vector.x = a.x - b.x;
|
|
vector.y = a.y - b.y;
|
|
vector.z = a.z - b.z;
|
|
return vector;
|
|
}
|
|
|
|
// Token: 0x040004EE RID: 1262
|
|
private IEnumerator corout;
|
|
|
|
// Token: 0x040004EF RID: 1263
|
|
private IEnumerator coroutCombat;
|
|
|
|
// Token: 0x040004F0 RID: 1264
|
|
private IEnumerator coroutBack;
|
|
|
|
// Token: 0x040004F1 RID: 1265
|
|
private NNConstraint nodeConstraint = new NNConstraint();
|
|
|
|
// Token: 0x040004F2 RID: 1266
|
|
private List<GraphNode> allNodes;
|
|
|
|
// Token: 0x040004F3 RID: 1267
|
|
private Character character;
|
|
|
|
// Token: 0x040004F4 RID: 1268
|
|
private List<GraphNode> suitableNodes = new List<GraphNode>();
|
|
|
|
// Token: 0x040004F5 RID: 1269
|
|
private List<GraphNode> edgeNodes = new List<GraphNode>();
|
|
|
|
// Token: 0x040004F6 RID: 1270
|
|
private List<GraphNode> nearNodes = new List<GraphNode>();
|
|
|
|
// Token: 0x040004F7 RID: 1271
|
|
public int attempt;
|
|
|
|
// Token: 0x040004F8 RID: 1272
|
|
public bool nearbyDuringCombat;
|
|
|
|
// Token: 0x040004F9 RID: 1273
|
|
private List<Character> party;
|
|
|
|
// Token: 0x040004FA RID: 1274
|
|
private GraphNode savedNode;
|
|
|
|
// Token: 0x040004FB RID: 1275
|
|
public Vector3 lastBeachPoint;
|
|
|
|
// Token: 0x040004FC RID: 1276
|
|
public bool boroInvisible;
|
|
|
|
// Token: 0x040004FD RID: 1277
|
|
private List<bool> added = new List<bool>();
|
|
|
|
// Token: 0x040004FE RID: 1278
|
|
private IEnumerator leaveCoroutine;
|
|
}
|