566 lines
15 KiB
C#
566 lines
15 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
// Token: 0x020000DE RID: 222
|
|
public class TimelineIcon : MonoBehaviour
|
|
{
|
|
// Token: 0x060014AD RID: 5293 RVA: 0x001902D1 File Offset: 0x0018E4D1
|
|
private void Awake()
|
|
{
|
|
this.tr = base.transform;
|
|
this.SetAsActive(false);
|
|
this.speed = 0.5f;
|
|
}
|
|
|
|
// Token: 0x060014AE RID: 5294 RVA: 0x001902F1 File Offset: 0x0018E4F1
|
|
public void Hover(bool state)
|
|
{
|
|
if (state)
|
|
{
|
|
this.portrait.color = this.hoverColor;
|
|
return;
|
|
}
|
|
this.portrait.color = this.normalColor;
|
|
}
|
|
|
|
// Token: 0x060014AF RID: 5295 RVA: 0x0019031C File Offset: 0x0018E51C
|
|
public void Setup(Character newCharacter, int index, bool setIconAtBeginning)
|
|
{
|
|
this.character = newCharacter;
|
|
this.offsetTime = 0f;
|
|
if (this.character.npc)
|
|
{
|
|
this.start = Links.x.hudControl.startEnemy;
|
|
this.end = Links.x.hudControl.endEnemy;
|
|
this.action = Links.x.hudControl.actionEnemy;
|
|
}
|
|
else
|
|
{
|
|
this.start = Links.x.hudControl.startParty;
|
|
this.end = Links.x.hudControl.endParty;
|
|
this.action = Links.x.hudControl.actionParty;
|
|
}
|
|
Vector3.Distance(this.start.position, this.end.position);
|
|
this.t = Random.Range(0f, 0.75f);
|
|
if (!Records.x.turnBased)
|
|
{
|
|
this.t = 0f;
|
|
this.updateTime = 0f;
|
|
}
|
|
this.tr.position = Vector3.Lerp(this.start.position, this.end.position, this.t);
|
|
bool flag = false;
|
|
if (Records.x.editor && flag)
|
|
{
|
|
Links.x.renderPortraits.AddCharacter(this.character, this.character.stats.xmlName, null, true, this, null, null, null);
|
|
if (this.portrait && this.texturesIdle != null)
|
|
{
|
|
this.portrait.texture = this.texturesIdle;
|
|
}
|
|
}
|
|
this.SetAsActive(true);
|
|
this.Hover(false);
|
|
this.character.timelineIcon = this;
|
|
if (this.character == Links.x.combat.characterStartingAttack)
|
|
{
|
|
this.tr.position = this.end.position;
|
|
}
|
|
if (!Records.x.turnBased && !this.character.moving && setIconAtBeginning)
|
|
{
|
|
this.Beginning();
|
|
return;
|
|
}
|
|
if (!Records.x.turnBased && !setIconAtBeginning)
|
|
{
|
|
this.waitingToPickAction = true;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060014B0 RID: 5296 RVA: 0x00190538 File Offset: 0x0018E738
|
|
public void SetAsActive(bool state)
|
|
{
|
|
Image[] array = this.images;
|
|
for (int i = 0; i < array.Length; i++)
|
|
{
|
|
array[i].enabled = state;
|
|
}
|
|
this.portrait.enabled = state;
|
|
base.enabled = state;
|
|
}
|
|
|
|
// Token: 0x060014B1 RID: 5297 RVA: 0x00190578 File Offset: 0x0018E778
|
|
public void End()
|
|
{
|
|
if (!this.character)
|
|
{
|
|
return;
|
|
}
|
|
this.SetAsActive(false);
|
|
if (this.character.npc)
|
|
{
|
|
Links.x.cellar.ReturnTimelineIconEnemy(this);
|
|
}
|
|
else
|
|
{
|
|
Links.x.cellar.ReturnTimelineIcon(this);
|
|
}
|
|
this.character = null;
|
|
this.animator.Stop();
|
|
this.sheen.enabled = false;
|
|
Links.x.combat.RemoveTimelineIcon(this);
|
|
}
|
|
|
|
// Token: 0x060014B2 RID: 5298 RVA: 0x001905F8 File Offset: 0x0018E7F8
|
|
private void Update()
|
|
{
|
|
if (!this.character.hasActions)
|
|
{
|
|
return;
|
|
}
|
|
if (((!this.character.turning && !this.character.stats.pinned && !this.knockedOut && !this.downed && !this.character.downed && !this.character.body.IsHit() && !Links.x.combat.combatCinematics && !this.waitingForAction && !this.waitingToPickAction && !this.character.moving && this.character.waitingForPath == 0 && this.character.NodesCount() == 0 && !this.character.actions.ai.findingAction && !Records.x.paused && !this.character.isHit && !Records.x.dialogue && !this.character.actions.cannotInterrupt && !this.character.inQueuedAbility) || (this.character.mainSelected && this.overridePause && !this.character.body.animationHold)) && (!Records.x.pocketPause || (Records.x.pocketPause && ((this.character.mainSelected && this.overridePause && !this.character.body.animationHold) || this.character == Links.x.combat.rallyCharacter))))
|
|
{
|
|
if (Records.x.turnBased)
|
|
{
|
|
this.t += Time.deltaTime / this.speed;
|
|
this.tr.position = Vector3.Lerp(this.start.position, this.end.position, this.t);
|
|
if (this.tr.position == this.end.position)
|
|
{
|
|
if (Records.x.turnBased)
|
|
{
|
|
this.PickAction();
|
|
}
|
|
else
|
|
{
|
|
this.DoAction();
|
|
}
|
|
this.waitingForAction = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.doingRepath = false;
|
|
this.updateTime += Time.deltaTime;
|
|
if (this.updateTime > 0.25f)
|
|
{
|
|
this.updateTime = 0f;
|
|
if (this.character.hasActions)
|
|
{
|
|
this.doingRepath = this.character.actions.CheckForRepathWhileWaitingToAttack();
|
|
}
|
|
}
|
|
if (this.hasAction)
|
|
{
|
|
if (!this.doingRepath)
|
|
{
|
|
if (this.doingAction)
|
|
{
|
|
this.t += Time.deltaTime / this.speed;
|
|
if (this.character.ActionAnimID() && this.needsSpeed && this.character.animator)
|
|
{
|
|
this.clipInfo = this.character.animator.GetCurrentAnimatorClipInfo(0);
|
|
if (this.clipInfo.Length != 0)
|
|
{
|
|
this.clip = this.clipInfo[0].clip;
|
|
if (this.clip)
|
|
{
|
|
this.clipInfoName = this.clip.name;
|
|
this.clipLength = this.clip.length;
|
|
this.events = this.clipInfo[0].clip.events;
|
|
if (this.events != null)
|
|
{
|
|
for (int i = 0; i < this.events.Length; i++)
|
|
{
|
|
this.stateInfo = this.character.animator.GetCurrentAnimatorStateInfo(0);
|
|
if (this.events[i].functionName.Contains("ttack") || this.events[i].functionName.Contains("ast") || this.events[i].functionName.Contains("inket"))
|
|
{
|
|
this.speed = this.clipLength;
|
|
if (this.character.mainSelected && this.character.stats.HandCount() > 1f)
|
|
{
|
|
this.speed += 0.1f;
|
|
}
|
|
this.needsSpeed = false;
|
|
this.stateInfo = this.character.animator.GetCurrentAnimatorStateInfo(0);
|
|
this.currentHash = this.stateInfo.shortNameHash;
|
|
this.character.body.recoveryTime = this.clipLength - this.events[i].time;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.tr.position = Vector3.Lerp(this.action.position, this.end.position, this.t);
|
|
if (this.tr.position == this.end.position)
|
|
{
|
|
this.offsetTime = 0f;
|
|
this.overridePause = false;
|
|
if (this.character.hasActions)
|
|
{
|
|
if (this.character.IsAttacking(this.currentHash))
|
|
{
|
|
this.character.actions.EndAttackTime(0f);
|
|
}
|
|
else if (this.character.IsCasting(this.currentHash) || this.casting)
|
|
{
|
|
if (this.character.animID == 14)
|
|
{
|
|
this.character.animID = 0;
|
|
}
|
|
}
|
|
else if (!this.character.IsTrinketing(this.currentHash))
|
|
{
|
|
if (!Links.x.combat.miniEvent && Records.x.editor && this.currentHash != 0)
|
|
{
|
|
string[] array = new string[9];
|
|
array[0] = "ERROR ";
|
|
int num = 1;
|
|
Character character = this.character;
|
|
array[num] = ((character != null) ? character.ToString() : null);
|
|
array[2] = "'s clip ";
|
|
array[3] = this.clipInfoName;
|
|
array[4] = " ";
|
|
array[5] = this.character.animID.ToString();
|
|
array[6] = " ";
|
|
array[7] = this.currentHash.ToString();
|
|
array[8] = " did not trigger end of action";
|
|
Debug.Log(string.Concat(array));
|
|
}
|
|
if (this.character.actions && !Links.x.combat.miniEvent && Records.x.editor && this.currentHash != 0)
|
|
{
|
|
string text = "Last action for ";
|
|
Character character2 = this.character;
|
|
Debug.Log(text + ((character2 != null) ? character2.ToString() : null) + " :" + this.character.actions.ai.lastAction);
|
|
}
|
|
}
|
|
if (this.character && this.character.actions)
|
|
{
|
|
this.character.actions.EndTurnAfterAction();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.t += Time.deltaTime / this.speed;
|
|
this.tr.position = Vector3.Lerp(this.start.position, this.action.position, this.t);
|
|
if (this.tr.position == this.action.position)
|
|
{
|
|
if (this.character.hasActions)
|
|
{
|
|
this.updateTime += Time.deltaTime;
|
|
if (this.updateTime > 0.25f)
|
|
{
|
|
this.updateTime = 0f;
|
|
if (this.character.hasActions)
|
|
{
|
|
this.doingRepath = this.character.actions.CheckForRepathWhileWaitingToAttack();
|
|
}
|
|
}
|
|
}
|
|
if (!this.doingRepath)
|
|
{
|
|
this.needsSpeed = true;
|
|
this.doingAction = true;
|
|
this.speed = 1f;
|
|
this.t = 0f;
|
|
this.DoAction();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (this.character && this.character.actions && this.speed > 0f)
|
|
{
|
|
this.t += Time.deltaTime / this.speed;
|
|
this.tr.position = Vector3.Lerp(this.start.position, this.action.position, this.t);
|
|
if (this.tr.position == this.action.position)
|
|
{
|
|
this.DoAction();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.character)
|
|
{
|
|
if (this.character.actions.castingSpell && this.character.actions.spellCasterFX)
|
|
{
|
|
this.character.actions.spellCasterFX.transform.position = this.character.tr.position + new Vector3(0f, 0.2f, 0f);
|
|
}
|
|
if (this.character.dead || !this.character.hasActions || this.character.stunned)
|
|
{
|
|
this.End();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060014B3 RID: 5299 RVA: 0x00190F28 File Offset: 0x0018F128
|
|
public void AddSecondAttack()
|
|
{
|
|
if (this.character && this.character.animator)
|
|
{
|
|
this.speed = 0f;
|
|
this.clipInfo = this.character.animator.GetCurrentAnimatorClipInfo(0);
|
|
if (this.clipInfo.Length != 0)
|
|
{
|
|
this.clip = this.clipInfo[0].clip;
|
|
if (this.clip)
|
|
{
|
|
this.events = this.clipInfo[0].clip.events;
|
|
if (this.events != null)
|
|
{
|
|
for (int i = 0; i < this.events.Length; i++)
|
|
{
|
|
this.stateInfo = this.character.animator.GetCurrentAnimatorStateInfo(0);
|
|
if (this.events[i].functionName.Contains("ttack") || this.events[i].functionName.Contains("ast") || this.events[i].functionName.Contains("inket"))
|
|
{
|
|
this.clipInfoName = this.clip.name;
|
|
this.clipLength = this.events[i].time + 0.2f;
|
|
this.speed = this.clipLength;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.tr.position = this.action.position;
|
|
if (this.speed < 0.01f)
|
|
{
|
|
this.speed = 1.5f;
|
|
}
|
|
this.t = 0f;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060014B4 RID: 5300 RVA: 0x001910C0 File Offset: 0x0018F2C0
|
|
public void DoAction()
|
|
{
|
|
if (this.character.actions)
|
|
{
|
|
if (this.character.actions.cannotInterrupt)
|
|
{
|
|
this.character.actions.EndTurnAfterAction();
|
|
this.Beginning();
|
|
return;
|
|
}
|
|
if (this.hasAction)
|
|
{
|
|
this.character.actions.ContinueAction();
|
|
return;
|
|
}
|
|
this.Beginning();
|
|
}
|
|
}
|
|
|
|
// Token: 0x060014B5 RID: 5301 RVA: 0x00191128 File Offset: 0x0018F328
|
|
public void PickAction()
|
|
{
|
|
if (Records.x.combat)
|
|
{
|
|
Links.x.combat.GetNextAction(this.character);
|
|
return;
|
|
}
|
|
if (this.character.actions)
|
|
{
|
|
this.character.actions.ChooseAction();
|
|
return;
|
|
}
|
|
this.End();
|
|
}
|
|
|
|
// Token: 0x060014B6 RID: 5302 RVA: 0x00191180 File Offset: 0x0018F380
|
|
public void RecordOffset()
|
|
{
|
|
if (this.character.npc)
|
|
{
|
|
this.offsetTime = 1f - this.t;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060014B7 RID: 5303 RVA: 0x001911A4 File Offset: 0x0018F3A4
|
|
public void Clear()
|
|
{
|
|
this.tr.position = this.start.position;
|
|
this.speed = 0f;
|
|
this.casting = false;
|
|
this.doingRepath = false;
|
|
this.doingAction = false;
|
|
this.waitingForAction = false;
|
|
this.hasAction = false;
|
|
this.waitingToPickAction = true;
|
|
this.overridePause = false;
|
|
}
|
|
|
|
// Token: 0x060014B8 RID: 5304 RVA: 0x00191204 File Offset: 0x0018F404
|
|
public void SetAtBeginningPosition()
|
|
{
|
|
this.waitingForAction = false;
|
|
this.casting = false;
|
|
this.tr.position = this.start.position;
|
|
this.hasAction = false;
|
|
if (!Records.x.turnBased)
|
|
{
|
|
this.waitingToPickAction = true;
|
|
this.PickAction();
|
|
}
|
|
}
|
|
|
|
// Token: 0x060014B9 RID: 5305 RVA: 0x00191255 File Offset: 0x0018F455
|
|
public bool Nothing()
|
|
{
|
|
return !this.waitingForAction && !this.hasAction && !this.doingAction;
|
|
}
|
|
|
|
// Token: 0x060014BA RID: 5306 RVA: 0x00191278 File Offset: 0x0018F478
|
|
public void Beginning()
|
|
{
|
|
if (!this.character)
|
|
{
|
|
return;
|
|
}
|
|
if (this.animator.enabled)
|
|
{
|
|
this.animator.Stop();
|
|
}
|
|
this.sheen.enabled = false;
|
|
this.t = 0f - this.offsetTime;
|
|
this.updateTime = 0f;
|
|
this.speed = 1f;
|
|
this.tr.position = this.start.position;
|
|
this.doingAction = false;
|
|
this.waitingForAction = false;
|
|
this.hasAction = false;
|
|
if (!Records.x.turnBased)
|
|
{
|
|
this.waitingToPickAction = true;
|
|
if (!this.character.mainSelected || (this.character.mainSelected && (Records.x.freeAttack || Records.x.cyclingAttacks)))
|
|
{
|
|
this.PickAction();
|
|
}
|
|
}
|
|
this.overridePause = false;
|
|
}
|
|
|
|
// Token: 0x060014BB RID: 5307 RVA: 0x0019135C File Offset: 0x0018F55C
|
|
public void WaitForAction(float actionSpeed, bool doActionAtEnd, bool skipReset)
|
|
{
|
|
if (this.animator.enabled)
|
|
{
|
|
this.animator.Stop();
|
|
}
|
|
if (!this.character)
|
|
{
|
|
return;
|
|
}
|
|
this.sheen.enabled = false;
|
|
this.casting = false;
|
|
this.doingAction = false;
|
|
if (!skipReset)
|
|
{
|
|
this.tr.position = this.start.position;
|
|
this.t = 0f - this.offsetTime;
|
|
this.updateTime = 0f;
|
|
}
|
|
this.speed = actionSpeed;
|
|
this.waitingToPickAction = false;
|
|
this.waitingForAction = false;
|
|
this.hasAction = doActionAtEnd;
|
|
}
|
|
|
|
// Token: 0x040023C4 RID: 9156
|
|
public Character character;
|
|
|
|
// Token: 0x040023C5 RID: 9157
|
|
public Transform start;
|
|
|
|
// Token: 0x040023C6 RID: 9158
|
|
public Transform end;
|
|
|
|
// Token: 0x040023C7 RID: 9159
|
|
public Transform action;
|
|
|
|
// Token: 0x040023C8 RID: 9160
|
|
public float speed;
|
|
|
|
// Token: 0x040023C9 RID: 9161
|
|
public bool knockedOut;
|
|
|
|
// Token: 0x040023CA RID: 9162
|
|
public bool downed;
|
|
|
|
// Token: 0x040023CB RID: 9163
|
|
public bool waitingForAction;
|
|
|
|
// Token: 0x040023CC RID: 9164
|
|
public bool waitingToPickAction;
|
|
|
|
// Token: 0x040023CD RID: 9165
|
|
public bool hasAction;
|
|
|
|
// Token: 0x040023CE RID: 9166
|
|
public bool doingAction;
|
|
|
|
// Token: 0x040023CF RID: 9167
|
|
public bool doingRepath;
|
|
|
|
// Token: 0x040023D0 RID: 9168
|
|
private Transform tr;
|
|
|
|
// Token: 0x040023D1 RID: 9169
|
|
public float t;
|
|
|
|
// Token: 0x040023D2 RID: 9170
|
|
public float updateTime;
|
|
|
|
// Token: 0x040023D3 RID: 9171
|
|
public Image[] images;
|
|
|
|
// Token: 0x040023D4 RID: 9172
|
|
public RawImage portrait;
|
|
|
|
// Token: 0x040023D5 RID: 9173
|
|
public float offsetTime;
|
|
|
|
// Token: 0x040023D6 RID: 9174
|
|
public Color normalColor;
|
|
|
|
// Token: 0x040023D7 RID: 9175
|
|
public Color hoverColor;
|
|
|
|
// Token: 0x040023D8 RID: 9176
|
|
public RenderTexture texturesIdle;
|
|
|
|
// Token: 0x040023D9 RID: 9177
|
|
private AnimatorStateInfo stateInfo;
|
|
|
|
// Token: 0x040023DA RID: 9178
|
|
private AnimatorClipInfo[] clipInfo;
|
|
|
|
// Token: 0x040023DB RID: 9179
|
|
private AnimationClip clip;
|
|
|
|
// Token: 0x040023DC RID: 9180
|
|
private AnimationEvent[] events;
|
|
|
|
// Token: 0x040023DD RID: 9181
|
|
public bool needsSpeed;
|
|
|
|
// Token: 0x040023DE RID: 9182
|
|
public Image sheen;
|
|
|
|
// Token: 0x040023DF RID: 9183
|
|
public HannahAnimator animator;
|
|
|
|
// Token: 0x040023E0 RID: 9184
|
|
public string clipInfoName;
|
|
|
|
// Token: 0x040023E1 RID: 9185
|
|
private int currentHash;
|
|
|
|
// Token: 0x040023E2 RID: 9186
|
|
public float clipLength;
|
|
|
|
// Token: 0x040023E3 RID: 9187
|
|
public bool overridePause;
|
|
|
|
// Token: 0x040023E4 RID: 9188
|
|
public bool casting;
|
|
}
|