using System;
using BetterCombat.Custom;
using BetterCombat.Utils;
using TaleWorlds.InputSystem;
using TaleWorlds.Library;
using TaleWorlds.MountAndBlade;

namespace BetterCombat.MissBehaviours
{
	// Token: 0x0200000C RID: 12
	public class Bandage : MissionBehaviour
	{
		// Token: 0x170000BD RID: 189
		// (get) Token: 0x06000198 RID: 408 RVA: 0x000029DD File Offset: 0x00000BDD
		public override MissionBehaviourType BehaviourType
		{
			get
			{
				return MissionBehaviourType.Other;
			}
		}

		// Token: 0x06000199 RID: 409 RVA: 0x000029E0 File Offset: 0x00000BE0
		public Bandage(HealthManager hm, int bandages)
		{
			this.hm = hm;
			this.bandagesLeft = bandages;
		}

		// Token: 0x0600019A RID: 410 RVA: 0x00003B1C File Offset: 0x00001D1C
		public override void OnMissionTick(float dt)
		{
			base.OnMissionTick(dt);
			try
			{
				bool flag = Mission.Current != null && Mission.Current.MainAgent != null;
				if (flag)
				{
					bool flag2 = Bandage.activlyBandaging;
					if (flag2)
					{
						bool flag3 = Bandage.IsMoving(Mission.Current.MainAgent.MovementVelocity);
						if (flag3)
						{
							Helper.DisplayMsg("移动的时候不能用医疗包！");
							Bandage.activlyBandaging = false;
						}
						bool isPast = Bandage.bandageTime.IsPast;
						if (isPast)
						{
							float healAmount = this.GetHealAmount(Helper.settings.BandageHealAmount);
							bool flag4 = this.hm.AvaiableHealingLeft();
							if (flag4)
							{
								Mission.Current.MainAgent.Health += healAmount;
								this.hm.AddOutput(healAmount);
								this.bandagesLeft--;
							}
							else
							{
								Helper.DisplayMsg("没有更多的医疗包了！");
							}
							Bandage.activlyBandaging = false;
							bool flag5 = this.bandagesLeft < 2;
							string msg;
							if (flag5)
							{
								msg = "医疗包已使用！只剩 " + this.bandagesLeft.ToString() + " 个医疗包！";
							}
							else
							{
								msg = "医疗包已使用！只剩 " + this.bandagesLeft.ToString() + " 个医疗包！";
							}
							Helper.DisplayMsg(msg);
						}
					}
					bool flag6 = Input.IsKeyPressed(Helper.bandageKey);
					if (flag6)
					{
						this.UseBandage();
					}
				}
			}
			catch (Exception ex)
			{
				string str = "Problem with bandages, cause: ";
				Exception ex2 = ex;
				Helper.WriteToLog(str + ((ex2 != null) ? ex2.ToString() : null));
			}
		}

		// Token: 0x0600019B RID: 411 RVA: 0x00003CC0 File Offset: 0x00001EC0
		private float GetHealAmount(float healAmount)
		{
			bool flag = healAmount + Mission.Current.MainAgent.Health > Mission.Current.MainAgent.HealthLimit;
			float result;
			if (flag)
			{
				result = Mission.Current.MainAgent.HealthLimit - Mission.Current.MainAgent.Health;
			}
			else
			{
				result = healAmount;
			}
			return result;
		}

		// Token: 0x0600019C RID: 412 RVA: 0x00003D1C File Offset: 0x00001F1C
		private static bool IsMoving(Vec2 velocity)
		{
			Vec2 vec = Vec2.Zero - new Vec2(1f, 1f);
			Vec2 vec2 = Vec2.Zero + new Vec2(1f, 1f);
			return velocity.x < vec.x || velocity.x > vec2.x || velocity.y < vec.y || velocity.y > vec2.y;
		}

		// Token: 0x0600019D RID: 413 RVA: 0x00003DA0 File Offset: 0x00001FA0
		public void UseBandage()
		{
			bool flag = !Bandage.IsMoving(Mission.Current.MainAgent.MovementVelocity);
			if (flag)
			{
				bool flag2 = this.bandagesLeft > 0;
				if (flag2)
				{
					bool flag3 = !Bandage.activlyBandaging;
					if (flag3)
					{
						bool flag4 = Mission.Current.MainAgent.Health != Mission.Current.MainAgent.HealthLimit;
						if (flag4)
						{
							Bandage.bandageTime = MissionTime.SecondsFromNow(Helper.settings.BandageTime);
							Bandage.activlyBandaging = true;
							Helper.DisplayMsg("正在使用医疗包。这需要 " + Helper.settings.BandageTime.ToString() + " 秒。");
						}
						else
						{
							Helper.DisplayMsg("你不需要医疗包!");
						}
					}
					else
					{
						Helper.DisplayMsg("你已经使用医疗包！");
					}
				}
				else
				{
					Helper.DisplayWarningMsg("医疗包用光了！");
				}
			}
			else
			{
				Helper.DisplayWarningMsg("你不能在移动的时候使用医疗包！");
			}
		}

		// Token: 0x04000088 RID: 136
		private static MissionTime bandageTime;

		// Token: 0x04000089 RID: 137
		private static bool activlyBandaging;

		// Token: 0x0400008A RID: 138
		private int bandagesLeft;

		// Token: 0x0400008B RID: 139
		private HealthManager hm;
	}
}
