diff options
Diffstat (limited to 'Client/Assembly-CSharp/NormalPlayerTask.cs')
-rw-r--r-- | Client/Assembly-CSharp/NormalPlayerTask.cs | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/NormalPlayerTask.cs b/Client/Assembly-CSharp/NormalPlayerTask.cs new file mode 100644 index 0000000..bd5133a --- /dev/null +++ b/Client/Assembly-CSharp/NormalPlayerTask.cs @@ -0,0 +1,284 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; + +public class NormalPlayerTask : PlayerTask +{ + public override int TaskStep + { + get + { + return this.taskStep; + } + } + + public override bool IsComplete + { + get + { + return this.taskStep >= this.MaxStep; + } + } + + public int taskStep; + + public int MaxStep; + + public bool ShowTaskStep = true; + + public bool ShowTaskTimer; + + public NormalPlayerTask.TimerState TimerStarted; + + public float TaskTimer; + + public byte[] Data; + + public ArrowBehaviour Arrow; + + public enum TimerState + { + NotStarted, + Started, + Finished + } + + public override void Initialize() + { + if (this.Arrow && !base.Owner.AmOwner) + { + this.Arrow.gameObject.SetActive(false); + } + this.HasLocation = true; + this.LocationDirty = true; + TaskTypes taskType = this.TaskType; + switch (taskType) + { + case TaskTypes.PrimeShields: + { + this.Data = new byte[1]; + int num = 0; + for (int i = 0; i < 7; i++) + { + byte b = (byte)(1 << i); + if (BoolRange.Next(0.7f)) + { + byte[] data = this.Data; + int num2 = 0; + data[num2] |= b; + num++; + } + } + byte[] data2 = this.Data; + int num3 = 0; + data2[num3] &= 118; + return; + } + case TaskTypes.FuelEngines: + this.Data = new byte[2]; + return; + case TaskTypes.ChartCourse: + this.Data = new byte[4]; + return; + case TaskTypes.StartReactor: + this.Data = new byte[6]; + return; + case TaskTypes.SwipeCard: + case TaskTypes.ClearAsteroids: + case TaskTypes.UploadData: + case TaskTypes.EmptyChute: + case TaskTypes.EmptyGarbage: + break; + case TaskTypes.InspectSample: + this.Data = new byte[2]; + return; + case TaskTypes.AlignEngineOutput: + this.Data = new byte[2]; + this.Data[0] = AlignGame.ToByte((float)IntRange.RandomSign() * FloatRange.Next(1f, 3f)); + this.Data[1] = (byte)(IntRange.RandomSign() * IntRange.Next(25, 255)); + return; + case TaskTypes.FixWiring: + { + this.Data = new byte[this.MaxStep]; + List<global::Console> list = (from t in ShipStatus.Instance.AllConsoles + where t.TaskTypes.Contains(TaskTypes.FixWiring) + select t).ToList<global::Console>(); + List<global::Console> list2 = new List<global::Console>(list); + for (int j = 0; j < this.Data.Length; j++) + { + int index = list2.RandomIdx<global::Console>(); + this.Data[j] = (byte)list2[index].ConsoleId; + list2.RemoveAt(index); + } + Array.Sort<byte>(this.Data); + global::Console console = list.First((global::Console v) => v.ConsoleId == (int)this.Data[0]); + this.StartAt = console.Room; + break; + } + default: + if (taskType == TaskTypes.EnterIdCode) + { + this.Data = BitConverter.GetBytes(IntRange.Next(1, 99999)); + return; + } + break; + } + } + + public void NextStep() + { + this.taskStep++; + this.UpdateArrow(); + if (this.taskStep >= this.MaxStep) + { + this.taskStep = this.MaxStep; + if (PlayerControl.LocalPlayer) + { + if (DestroyableSingleton<HudManager>.InstanceExists) + { + DestroyableSingleton<HudManager>.Instance.ShowTaskComplete(); + StatsManager instance = StatsManager.Instance; + uint num = instance.TasksCompleted; + instance.TasksCompleted = num + 1U; + if (PlayerTask.AllTasksCompleted(PlayerControl.LocalPlayer)) + { + StatsManager instance2 = StatsManager.Instance; + num = instance2.CompletedAllTasks; + instance2.CompletedAllTasks = num + 1U; + } + } + PlayerControl.LocalPlayer.RpcCompleteTask(base.Id); + return; + } + } + else if (this.ShowTaskStep && Constants.ShouldPlaySfx()) + { + SoundManager.Instance.PlaySound(DestroyableSingleton<HudManager>.Instance.TaskUpdateSound, false, 1f); + } + } + + public void UpdateArrow() + { + if (!this.Arrow) + { + return; + } + if (!base.Owner.AmOwner) + { + this.Arrow.gameObject.SetActive(false); + return; + } + if (!this.IsComplete) + { + this.Arrow.gameObject.SetActive(true); + if (this.TaskType == TaskTypes.FixWiring) + { + global::Console console3 = base.FindSpecialConsole((global::Console c) => c.TaskTypes.Contains(TaskTypes.FixWiring) && c.ConsoleId == (int)this.Data[this.taskStep]); + this.Arrow.target = console3.transform.position; + this.StartAt = console3.Room; + } + else if (this.TaskType == TaskTypes.AlignEngineOutput) + { + if (AlignGame.IsSuccess(this.Data[0])) + { + this.Arrow.target = base.FindSpecialConsole((global::Console c) => c.TaskTypes.Contains(TaskTypes.AlignEngineOutput) && c.ConsoleId == 1).transform.position; + this.StartAt = SystemTypes.UpperEngine; + } + else + { + this.Arrow.target = base.FindSpecialConsole((global::Console console) => console.TaskTypes.Contains(TaskTypes.AlignEngineOutput) && console.ConsoleId == 0).transform.position; + this.StartAt = SystemTypes.LowerEngine; + } + } + else + { + global::Console console2 = base.FindObjectPos(); + this.Arrow.target = console2.transform.position; + this.StartAt = console2.Room; + } + this.LocationDirty = true; + return; + } + this.Arrow.gameObject.SetActive(false); + } + + private void FixedUpdate() + { + if (this.TimerStarted == NormalPlayerTask.TimerState.Started) + { + this.TaskTimer -= Time.fixedDeltaTime; + if (this.TaskTimer <= 0f) + { + this.TaskTimer = 0f; + this.TimerStarted = NormalPlayerTask.TimerState.Finished; + } + } + } + + public override bool ValidConsole(global::Console console) + { + if (this.TaskType == TaskTypes.FixWiring) + { + return console.TaskTypes.Contains(this.TaskType) && console.ConsoleId == (int)this.Data[this.taskStep]; + } + if (this.TaskType == TaskTypes.AlignEngineOutput) + { + return console.TaskTypes.Contains(this.TaskType) && !AlignGame.IsSuccess(this.Data[console.ConsoleId]); + } + if (this.TaskType == TaskTypes.FuelEngines) + { + return (console.TaskTypes.Contains(this.TaskType) && console.ConsoleId == (int)this.Data[1]) || console.ValidTasks.Any((TaskSet set) => this.TaskType == set.taskType && set.taskStep.Contains((int)this.Data[1])); + } + return console.TaskTypes.Any((TaskTypes tt) => tt == this.TaskType) || console.ValidTasks.Any((TaskSet set) => this.TaskType == set.taskType && set.taskStep.Contains(this.taskStep)); + } + + public override void Complete() + { + this.taskStep = this.MaxStep; + } + + public override void AppendTaskText(StringBuilder sb) + { + bool flag = this.ShouldYellowText(); + if (flag) + { + if (this.IsComplete) + { + sb.Append("[00DD00FF]"); + } + else + { + sb.Append("[FFFF00FF]"); + } + } + sb.Append(DestroyableSingleton<TranslationController>.Instance.GetString(this.StartAt)); + sb.Append(": "); + sb.Append(DestroyableSingleton<TranslationController>.Instance.GetString(this.TaskType)); + if (this.ShowTaskTimer && this.TimerStarted == NormalPlayerTask.TimerState.Started) + { + sb.Append(" ("); + sb.Append((int)this.TaskTimer); + sb.Append("s)"); + } + else if (this.ShowTaskStep) + { + sb.Append(" ("); + sb.Append(this.taskStep); + sb.Append("/"); + sb.Append(this.MaxStep); + sb.Append(")"); + } + if (flag) + { + sb.Append("[]"); + } + sb.AppendLine(); + } + + private bool ShouldYellowText() + { + return (this.TaskType == TaskTypes.FuelEngines && this.Data[1] > 0) || this.taskStep > 0 || this.TimerStarted > NormalPlayerTask.TimerState.NotStarted; + } +} |