public class Boss : CPlayer
{
	private static Image umbrella;

	private int[] xWeb = new int[6];

	private int[] yWeb = new int[6];

	private bool bombShoot;

	private bool isGift_1;

	private bool isGift_2;

	private bool up = true;

	private bool down;

	private int yGift_1;

	private int yGift_2 = MM.mapHeight + 30;

	private new int dy;

	private int frameG;

	private int tG;

	public new static Image gift_1;

	public new static Image bongbong;

	public new static Image gift_2;

	public new static Image gift_empty;

	private int fanFrame;

	private static int deltaYKC;

	private static int tKC;

	public static int xTo;

	private int dxUFO;

	private int dyUFO;

	private int dtXUFO;

	private int dtYUFO;

	private int wLazer = 8;

	private bool changeSign;

	private new int deltaY;

	private new int tB;

	private int deltaX1;

	private int deltaY1;

	private int deltaX2;

	private int gFrame;

	private int tg;

	private int ghostLook;

	private int tBit;

	private int fireFrame;

	private int tFire;

	private int t;

	private int vy = 5;

	private int dyRobot = 18;

	public static int camY;

	public new bool getGift;

	public Boss(int IDDB, sbyte index, int X, int Y, bool isCom, int look, sbyte gunType, int maxHp)
	{
		if (gun == 11)
		{
			new Explosion(x, y, 1);
		}
		if (gun == 13 || gun == 14)
		{
			isJump = true;
		}
		if (gun == 16 || gun == 17 || gun == 19 || gun == 18 || gun == 21 || gun == 20 || gun == 22 || gun == 24 || gun == 25 || gun == 26)
		{
			flyPlayer = true;
		}
		if (gun == 22)
		{
			for (int i = 0; i < 6; i++)
			{
				if (i == 0)
				{
					xWeb[i] = xWeb[i - 1] + 25 + CRes.random(0, MM.mapWidth / 3 - 20);
					yWeb[i] = CRes.random(y - 44, y);
				}
				else
				{
					xWeb[i] = xWeb[i - 1] + 25 + CRes.random(0, MM.mapWidth / 3 - 20);
					yWeb[i] = CRes.random(y - 44, y);
				}
			}
		}
		if (gun == 23)
		{
			new Explosion(x, yGift_1, 1);
		}
		if (gun == 25 || gun == 26)
		{
			new Explosion(x, y, 1);
		}
	}

	public new static void loadImage()
	{
		gift_1 = CCanvas.loadImage("/item/box.png");
		bongbong = CCanvas.loadImage("/item/bongbong.png");
		gift_2 = CCanvas.loadImage("/item/box2.png");
		gift_empty = CCanvas.loadImage("/item/boxEmpty.png");
	}

	public override void input()
	{
		base.input();
	}

	public void paintBigRobot(mGraphics g)
	{
	}

	public void paintKhiCau(mGraphics g)
	{
		g.drawImage(CPlayer.khicau, x, y + deltaYKC, 33, false);
		g.drawRegion(CPlayer.fan1, 0, fanFrame * 23, 4, 23, 0, x - 8, y - 18 + deltaYKC, 33, false);
		if (fanFrame == 0)
		{
			fanFrame = 1;
		}
		else if (fanFrame == 1)
		{
			fanFrame = 0;
		}
		if (CCanvas.gameTick % 2 == 0)
		{
			g.drawImage(CPlayer.fan2, x + 10, y - 35 + deltaYKC, 33, false);
			g.drawImage(CPlayer.fan2, x + 34, y - 35 + deltaYKC, 33, false);
		}
		g.drawImage(CPlayer.front_fan, x - 5, y - 43 + deltaYKC, 33, false);
		g.drawRegion(CPlayer.fan1, 0, fanFrame * 23, 4, 23, 0, x, y - 46 + deltaYKC, 33, false);
		int[] array = new int[3]
		{
			x,
			x - 30,
			x + 20
		};
		int[] array2 = new int[3]
		{
			y - 20,
			y - 35,
			y - 25
		};
		if (state == 5)
		{
			for (int i = 0; i < 3; i++)
			{
				g.drawRegion(CPlayer.injured, 0, i * 12, 14, 12, 0, array[i], array2[i] + deltaYKC, 0, false);
			}
		}
	}

	public void checkFrameBalloonGun()
	{
		if (xTo <= x + 50 && xTo >= x - 50)
		{
			curFrame = 1;
		}
		else if (xTo > x + 50)
		{
			curFrame = 0;
			look = 0;
		}
		else if (xTo < x - 50)
		{
			curFrame = 0;
			look = 2;
		}
	}

	public void paintFan1(mGraphics g)
	{
		int num = ((state != 5) ? deltaYKC : 0);
		g.drawImage(CPlayer.back_fan, x, y + num, 33, false);
	}

	public void paintFan2(mGraphics g)
	{
	}

	public void paintEye(mGraphics g)
	{
	}

	public void paintGunKhiCau(mGraphics g)
	{
	}

	public void paintBombKhiCau(mGraphics g)
	{
		int num = ((state != 5) ? deltaYKC : 0);
		g.drawImage(CPlayer.bombKhiCau, x, y + num, 33, false);
	}

	public void paintUFO(mGraphics g)
	{
		if (state == 8)
		{
			g.drawRegion(CPlayer.imgUFO, 0, 46, 51, 46, 0, x + dxUFO, y + dyUFO, 33, false);
		}
		else if (state == 5)
		{
			g.drawRegion(CPlayer.imgUFO, 0, 92, 51, 46, 0, x + dxUFO, y + dyUFO, 33, false);
		}
		else
		{
			g.drawRegion(CPlayer.imgUFO, 0, 0, 51, 46, 0, x + dxUFO, y + dyUFO, 33, false);
		}
		if (state == 5)
		{
			return;
		}
		if (CCanvas.gameTick % 3 == 0)
		{
			g.drawRegion(CPlayer.imgUFOFire, 0, 0, 16, 11, 0, x + dxUFO, y + dyUFO - 5, 17, false);
		}
		else
		{
			g.drawRegion(CPlayer.imgUFOFire, 0, 11, 16, 11, 0, x + dxUFO, y + dyUFO - 5, 17, false);
		}
		if (!isPointActive)
		{
			return;
		}
		g.setColor(149905);
		for (int i = 0; i < wLazer; i++)
		{
			if (i < wLazer / 2 + wLazer / 3 && i > wLazer / 2 - wLazer / 3)
			{
				g.setColor(16777215);
			}
			else
			{
				g.setColor(5880763);
			}
			g.drawLineWp(x - wLazer / 2 + i + dxUFO, y + dyUFO, x - wLazer / 2 + i + dxUFO, yPoint, false);
		}
		if (wLazer == 0)
		{
			changeSign = true;
		}
		if (wLazer == 8)
		{
			changeSign = false;
		}
		if (CCanvas.gameTick % 2 == 0)
		{
			if (!changeSign)
			{
				wLazer--;
			}
			else
			{
				wLazer++;
			}
		}
	}

	public void paintSpider(mGraphics g)
	{
		g.setColor(8026746);
		for (int i = 0; i < 3; i++)
		{
			g.drawLineWp(0, capY + i * 22 - 44, MM.mapWidth, capY + i * 22 - 44, false);
		}
		for (int j = 0; j < 3; j++)
		{
			g.drawImage(CPlayer.web, xWeb[j], yWeb[j], 3, false);
		}
		if (sLook == CPlayer.SLEFT)
		{
			g.drawRegion(CPlayer.spider, 0, fspider * 22, 41, 22, 1, x + 1, y, 33, false);
			g.drawRegion(CPlayer.spider, 0, fspider * 22, 41, 22, 0, x, y - 22, 33, false);
		}
		if (sLook == CPlayer.SRIGHT)
		{
			g.drawRegion(CPlayer.spider, 0, fspider * 22, 41, 22, 3, x, y, 33, false);
			g.drawRegion(CPlayer.spider, 0, fspider * 22, 41, 22, 2, x, y - 22, 33, false);
		}
		if (sLook == CPlayer.SUP)
		{
			g.drawRegion(CPlayer.spider, 0, fspider * 22, 41, 22, 4, x, y, 40, false);
			g.drawRegion(CPlayer.spider, 0, fspider * 22, 41, 22, 5, x + 22, y, 40, false);
		}
		if (sLook == CPlayer.SDOWN)
		{
			g.drawRegion(CPlayer.spider, 0, fspider * 22, 41, 22, 6, x, y, 40, false);
			g.drawRegion(CPlayer.spider, 0, fspider * 22, 41, 22, 7, x + 22, y, 40, false);
		}
		if (isCapture)
		{
			g.setColor(5395026);
			g.fillRect(capX, capY - 41, 1, y - capY, false);
		}
	}

	public void paintBugRobot(mGraphics g)
	{
	}

	private void paintBossHP(mGraphics g, int h)
	{
		if (state != 5 && hp > 0)
		{
			g.setColor(16777215);
			g.fillRect(x - 15 + dxUFO, y + 5 - h + dyUFO, 25, 4, false);
			if (hpRectW > 16)
			{
				g.setColor(65280);
			}
			else if (hpRectW > 8)
			{
				g.setColor(16744512);
			}
			else
			{
				g.setColor(16711680);
			}
			if (hpRectW > 25)
			{
				hpRectW = 25;
			}
			g.fillRect(x - 15 + dxUFO, y + 5 - h + dyUFO, hpRectW, 4, false);
			g.setColor(0);
			g.drawRect(x - 15 + dxUFO, y + 5 - h + dyUFO, 25, 4, false);
		}
	}

	public void paintGhost(mGraphics g, int type)
	{
		g.drawRegion((type != 0) ? CPlayer.ghost2 : CPlayer.ghost, 0, gFrame * 32, 35, 32, look, x, y, 33, false);
	}

	public override void paint(mGraphics g)
	{
		if (!isPaint)
		{
			return;
		}
		if (gun == 13)
		{
			paintBugRobot(g);
			paintBossHP(g, 50);
			painthpChange(g);
			return;
		}
		if (gun == 16)
		{
			paintUFO(g);
			paintBossHP(g, 55);
			painthpChange(g);
			return;
		}
		if (gun == 17)
		{
			paintKhiCau(g);
			return;
		}
		if (gun == 18)
		{
			paintGunKhiCau(g);
			paintBossHP(g, -7);
			painthpChange(g);
			return;
		}
		if (gun == 21)
		{
			paintEye(g);
			paintBossHP(g, 15);
			painthpChange(g);
			return;
		}
		if (gun == 19)
		{
			paintBombKhiCau(g);
			paintBossHP(g, -7);
			painthpChange(g);
			return;
		}
		if (gun == 20)
		{
			paintFan1(g);
			paintBossHP(g, 30);
			painthpChange(g);
			return;
		}
		if (gun == 22)
		{
			paintSpider(g);
			paintBossHP(g, 48);
			painthpChange(g);
			return;
		}
		if (gun == 14 && (isFly || isBum))
		{
			tFire++;
			if (tFire == 10)
			{
				tFire = 0;
			}
			if (tFire <= 5)
			{
				fireFrame = 0;
			}
			else
			{
				fireFrame = 1;
			}
			g.drawRegion(CPlayer.imgfire, 0, 10 * fireFrame, 5, 10, 0, x - 5, y + 2, mGraphics.HCENTER | mGraphics.TOP, false);
			g.drawRegion(CPlayer.imgfire, 0, 10 * fireFrame, 5, 10, 0, x + 5, y + 2, mGraphics.HCENTER | mGraphics.TOP, false);
		}
		if (gun == 25)
		{
			paintGhost(g, 0);
			paintBossHP(g, 40);
			painthpChange(g);
		}
		else if (gun == 26)
		{
			paintGhost(g, 1);
			paintBossHP(g, 40);
			painthpChange(g);
		}
		else if (gun == 23)
		{
			if (state != 5 && hp > 0)
			{
				g.drawImage(gift_1, x, yGift_1, 33, false);
			}
		}
		else if (gun == 24)
		{
			if (state != 5)
			{
				tG++;
				if (tG == 10)
				{
					tG = 0;
				}
				if (tG < 5)
				{
					frameG = 0;
				}
				else
				{
					frameG = 1;
				}
				g.drawImage(gift_2, x, yGift_2 - 8, 33, false);
				g.drawRegion(bongbong, 0, frameG * 35, 35, 35, 0, x, yGift_2, 33, false);
			}
		}
		else
		{
			base.paint(g);
		}
	}

	public void frameMoveCheck()
	{
		t++;
		if (t == 10)
		{
			t = 0;
		}
		if (t < 5)
		{
			curFrame = 1;
		}
		else
		{
			curFrame = 2;
		}
	}

	public void frameStandCheck()
	{
		if (bombShoot)
		{
			curFrame = 4;
			return;
		}
		t++;
		if (t == 10)
		{
			t = 0;
		}
		if (t < 5)
		{
			curFrame = 0;
		}
		else
		{
			curFrame = 1;
		}
	}

	public override void update()
	{
		base.update();
		switch (gun)
		{
		case 23:
			if (PrepareScr.currLevel == 7 && MessageHandler.nextTurnFlag)
			{
				yGift_1 = y;
				isGift_1 = true;
				mSystem.mNotify();
			}
			if (!isGift_1)
			{
				dy++;
				yGift_1 += dy;
				GameScr.cam.setTargetPointMode(x, yGift_1);
				if (yGift_1 > y)
				{
					isGift_1 = true;
					yGift_1 = y;
					GameScr.time.seconds += 2;
					CCanvas.tNotify = 0;
					CCanvas.lockNotify = true;
				}
			}
			if (state == 5 && !getGift)
			{
				getGift = true;
				new Explosion(x, y, 1);
			}
			break;
		case 24:
			if (PrepareScr.currLevel == 7 && MessageHandler.nextTurnFlag)
			{
				yGift_2 = y;
				isGift_2 = true;
				mSystem.mNotify();
			}
			if (!isGift_2)
			{
				yGift_2 -= 9;
				GameScr.cam.setTargetPointMode(x, yGift_2);
				if (yGift_2 < y)
				{
					isGift_2 = true;
					yGift_2 = y;
					GameScr.time.seconds += 2;
					CCanvas.tNotify = 0;
					CCanvas.lockNotify = true;
				}
			}
			else
			{
				if (up)
				{
					yGift_2--;
				}
				if (down)
				{
					yGift_2++;
				}
				if (yGift_2 < y - 3)
				{
					down = true;
					up = false;
				}
				if (yGift_2 > y + 3)
				{
					down = false;
					up = true;
				}
			}
			if (state == 5 && !getGift)
			{
				getGift = true;
				new Explosion(x, y, 1);
			}
			break;
		case 14:
			if (isBum)
			{
				y -= dyRobot;
				dyRobot--;
				if (dyRobot == 0)
				{
					isBum = false;
					dyRobot = 18;
					falling = true;
				}
			}
			break;
		case 11:
		case 12:
			if (state == 5)
			{
				curFrame = 3;
				break;
			}
			if (isCom && !isJump)
			{
				if (nextx < x && !falling)
				{
					move(2);
					frameMoveCheck();
					break;
				}
				if (nextx > x && !falling)
				{
					move(0);
					frameMoveCheck();
					break;
				}
				if (nextx == x && nexty != y && state == 0 && !falling)
				{
					y = nexty;
				}
			}
			if (shootFrame)
			{
				if (gun == 12)
				{
					bombShoot = true;
				}
			}
			else
			{
				bombShoot = false;
			}
			frameStandCheck();
			break;
		case 13:
			if (state == 5)
			{
				frameleg_1 = 2;
				framebd_1 = 1;
				curFrame = 0;
				break;
			}
			if (xBugBack < 0)
			{
				xBugBack += 2;
			}
			if (xBugBack > 0)
			{
				xBugBack = 0;
			}
			if (yBugBack > 0)
			{
				yBugBack--;
			}
			if (yBugBack < 0)
			{
				yBugBack = 0;
			}
			if (state != 4)
			{
				tB++;
				if (tB == 10)
				{
					tB = 0;
				}
				if (tB == 5)
				{
					deltaY = 1;
				}
				if (tB == 0)
				{
					deltaY = 0;
				}
			}
			if (state == 4)
			{
				tB = 0;
				deltaY = 0;
			}
			if (frameleg_1 != 0)
			{
				if (x < xBug)
				{
					look = 0;
				}
				else
				{
					look = 2;
				}
			}
			break;
		case 17:
		{
			if (state == 5)
			{
				y++;
				falling = false;
				if (CCanvas.gameTick % 5 == 0)
				{
					new Explosion(CRes.random(x - 50, x + 50), CRes.random(y - 40, y), 0);
				}
			}
			if (flyActive)
			{
				flyTo(10);
				deltaYKC = 0;
				if (bulletType == 43)
				{
					camY += 2;
					GameScr.cam.setTargetPointMode(x, y + camY);
				}
			}
			else
			{
				camY = 0;
				deltaYKC = PM.deltaYKC;
			}
			for (int i = 0; i < PM.p.Length; i++)
			{
				if (PM.p[i] == null)
				{
					continue;
				}
				if (PM.p[i].state != 5)
				{
					if (PM.p[i].gun == 18)
					{
						PM.p[i].x = x + 51;
						PM.p[i].y = y + 10;
					}
					if (PM.p[i].gun == 19)
					{
						PM.p[i].x = x - 10;
						PM.p[i].y = y + 30;
					}
					if (PM.p[i].gun == 20)
					{
						PM.p[i].x = x - 60;
						PM.p[i].y = y - 13;
					}
				}
				if (PM.p[i].gun == 21)
				{
					PM.p[i].x = x + 53;
					PM.p[i].y = y - 24;
				}
			}
			break;
		}
		case 16:
			if (flyActive)
			{
				flyTo(10);
			}
			else if (state != 4 && state != 5)
			{
				if (CCanvas.gameTick % 2 == 0)
				{
					dtXUFO++;
					if (dtXUFO == 20)
					{
						dtXUFO = 0;
					}
					if (dtXUFO < 10)
					{
						dxUFO++;
					}
					else
					{
						dxUFO--;
					}
					dtYUFO++;
					if (dtYUFO == 10)
					{
						dtYUFO = 0;
					}
					if (dtYUFO < 5)
					{
						dyUFO--;
					}
					else
					{
						dyUFO++;
					}
				}
			}
			else
			{
				dxUFO = 0;
				dyUFO = 0;
			}
			break;
		case 25:
		case 26:
			if (!ghostBit)
			{
				tg++;
				if (tg == 10)
				{
					tg = 0;
				}
				if (tg < 5)
				{
					gFrame = 0;
				}
				else
				{
					gFrame = 1;
				}
				tBit = 0;
			}
			else
			{
				tBit++;
				if (tBit == 5)
				{
					gFrame = 2;
				}
				if (tBit == 10)
				{
					gFrame = 3;
					PM.p[playerHit].activeHurt((look != 2) ? 2 : 0);
					GameScr.sm.addSmoke(PM.p[playerHit].x, PM.p[playerHit].y, 22);
				}
				if (tBit == 18)
				{
					ghostBit = false;
					mSystem.mNotify();
				}
			}
			if (flyActive)
			{
				flyTo(10);
			}
			break;
		case 22:
			runSpeed = 5;
			if (flyActive)
			{
				t++;
				if (t == 4)
				{
					t = 0;
				}
				if (t < 2)
				{
					fspider = 0;
				}
				else
				{
					fspider = 1;
				}
			}
			else if (state == 5)
			{
				fspider = 3;
			}
			else if (state == 8)
			{
				fspider = 2;
			}
			else
			{
				fspider = 0;
			}
			if (flyActive)
			{
				flyTo(8);
			}
			if (isCapture)
			{
				capturePlayer();
			}
			break;
		case 15:
		case 18:
		case 19:
		case 20:
		case 21:
			break;
		}
	}
}
