namespace Assets.src.rpg
{
	public class ShotRPG : CObject
	{
		public const sbyte TYPE_MISSILE = 0;

		private CPlayer target;

		public new static int xView;

		public new static int yView;

		private int angle;

		private int v;

		private int va;

		private int tx;

		private int ty;

		private int type;

		private new bool sleep;

		private int direction;

		private int life;

		public int power;

		public void set(sbyte type, int x, int y, int angle, CPlayer target)
		{
			base.x = x;
			base.y = y;
			this.type = type;
			this.target = target;
			vx = 0;
			vy = 0;
			va = 0;
			life = 100;
			z = 0;
			w = 5;
			h = 5;
			if (type == 0)
			{
				va = 0;
				power = 3;
			}
			vx = va * CRes.cos(angle) >> 10;
			vy = va * CRes.sin(angle) >> 10;
			switch (angle)
			{
			case 0:
				direction = 3;
				break;
			case 90:
				direction = 1;
				break;
			case 180:
				direction = 2;
				break;
			case 270:
				direction = 0;
				break;
			}
			sleep = false;
		}

		public void update()
		{
			if (life <= 0)
			{
				sleep = true;
				return;
			}
			if (type == 0 && target != null)
			{
				int num = target.x + (target.w >> 1) - x;
				int num2 = target.y - 17 + (target.h >> 1) - y;
				int num3 = CRes.angle(num, num2);
				if (Math.abs(num3 - angle) < 90 || num * num + num2 * num2 > 4096)
				{
					if (Math.abs(num3 - angle) < 15)
					{
						angle = num3;
					}
					else if ((num3 - angle >= 0 && num3 - angle < 180) || num3 - angle < -180)
					{
						angle = CRes.fixangle(angle + 15);
					}
					else
					{
						angle = CRes.fixangle(angle - 15);
					}
				}
				if (va < 8192)
				{
					va += 1024;
				}
				vx = va * CRes.cos(angle) >> 10;
				vy = va * CRes.sin(angle) >> 10;
				if (z < target.z)
				{
					z++;
				}
				if (z > target.z)
				{
					z--;
				}
				tx = (x - xView) * z / CObject.z0 + x;
				ty = (y - yView) * z / CObject.z0 + y;
				if (CCanvas.gameTick % 3 == 0)
				{
					GameScr.sm.addSmoke(tx, ty, 1);
				}
				if (z == target.z && target.beHurt(this))
				{
					sleep = true;
				}
			}
			move();
			if (life > 0)
			{
				life--;
			}
		}

		public new void paint(mGraphics g)
		{
			if (type == 0)
			{
				tx = (x - xView) * z / CObject.z0 + x;
				ty = (y - yView) * z / CObject.z0 + y;
				int num = tx + (5 * CRes.cos(angle) >> 10);
				int num2 = ty + (5 * CRes.sin(angle) >> 10);
				MyVector vLine = new MyVector();
				g.drawLine(tx, ty, num, num2, 16777215, ref vLine);
			}
		}
	}
}
