/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
	coins: 0,
	playerLevel: 1,
	playerHealth: 100,
	playerMaxHealth: 100,
	playerStrength: 10,
	playerDefense: 5,
	playerAgility: 5,
	wins: 0
});
/**** 
* Classes
****/ 
var ActionButton = Container.expand(function (label, callback) {
	var self = Container.call(this);
	var button = self.attachAsset('actionButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var text = new Text2(label, {
		size: 40,
		fill: 0xFFFFFF
	});
	text.anchor.set(0.5, 0.5);
	self.addChild(text);
	self.setEnabled = function (enabled) {
		self.enabled = enabled;
		self.alpha = enabled ? 1.0 : 0.5;
	};
	self.down = function () {
		if (self.enabled) {
			tween(button, {
				scaleX: 0.9,
				scaleY: 0.9
			}, {
				duration: 100
			});
		}
	};
	self.up = function () {
		if (self.enabled) {
			tween(button, {
				scaleX: 1.0,
				scaleY: 1.0
			}, {
				duration: 100
			});
			if (callback) {
				callback();
			}
		}
	};
	self.setEnabled(true);
	return self;
});
var CoinDisplay = Container.expand(function () {
	var self = Container.call(this);
	var coinIcon = self.attachAsset('coin', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -30,
		y: 0
	});
	var coinText = new Text2(storage.coins.toString(), {
		size: 40,
		fill: 0xFFFFFF
	});
	coinText.anchor.set(0, 0.5);
	coinText.x = 10;
	self.addChild(coinText);
	self.update = function () {
		coinText.setText(storage.coins.toString());
	};
	return self;
});
var CombatLog = Container.expand(function () {
	var self = Container.call(this);
	var logText = new Text2("", {
		size: 35,
		fill: 0xFFFFFF
	});
	logText.anchor.set(0.5, 0);
	self.addChild(logText);
	self.addEntry = function (message) {
		logText.setText(message);
		// Clear the message after a delay
		LK.setTimeout(function () {
			if (logText.text === message) {
				// Only clear if it hasn't been changed
				logText.setText("");
			}
		}, 3000);
	};
	return self;
});
var Gladiator = Container.expand(function (isPlayer) {
	var self = Container.call(this);
	var sprite = self.attachAsset(isPlayer ? 'player' : 'enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.isPlayer = isPlayer;
	self.health = isPlayer ? storage.playerMaxHealth : 0;
	self.maxHealth = isPlayer ? storage.playerMaxHealth : 0;
	self.strength = isPlayer ? storage.playerStrength : 0;
	self.defense = isPlayer ? storage.playerDefense : 0;
	self.agility = isPlayer ? storage.playerAgility : 0;
	self.level = isPlayer ? storage.playerLevel : 1;
	self.healthBar = new HealthBar();
	self.healthBar.y = -sprite.height / 2 - 40;
	self.healthBar.x = -self.healthBar.width / 2;
	self.addChild(self.healthBar);
	var levelText = new Text2("Lvl " + self.level, {
		size: 40,
		fill: 0xFFFFFF
	});
	levelText.anchor.set(0.5, 0.5);
	levelText.y = sprite.height / 2 + 40;
	self.addChild(levelText);
	self.takeDamage = function (amount) {
		var actualDamage = Math.max(1, amount - self.defense / 2);
		self.health = Math.max(0, self.health - actualDamage);
		self.healthBar.setHealth(self.health, self.maxHealth);
		// Visual feedback
		tween(sprite, {
			tint: 0xFF0000
		}, {
			duration: 200,
			onFinish: function onFinish() {
				tween(sprite, {
					tint: 0xFFFFFF
				}, {
					duration: 200
				});
			}
		});
		return actualDamage;
	};
	self.heal = function (amount) {
		self.health = Math.min(self.maxHealth, self.health + amount);
		self.healthBar.setHealth(self.health, self.maxHealth);
		// Visual feedback
		tween(sprite, {
			tint: 0x00FF00
		}, {
			duration: 200,
			onFinish: function onFinish() {
				tween(sprite, {
					tint: 0xFFFFFF
				}, {
					duration: 200
				});
			}
		});
	};
	self.isDead = function () {
		return self.health <= 0;
	};
	self.reset = function () {
		if (self.isPlayer) {
			self.health = storage.playerMaxHealth;
			self.maxHealth = storage.playerMaxHealth;
			self.strength = storage.playerStrength;
			self.defense = storage.playerDefense;
			self.agility = storage.playerAgility;
			self.level = storage.playerLevel;
			levelText.setText("Lvl " + self.level);
		}
		self.healthBar.setHealth(self.health, self.maxHealth);
	};
	self.generateEnemy = function (difficulty) {
		if (!self.isPlayer) {
			self.level = Math.max(1, difficulty);
			self.health = 80 + self.level * 20;
			self.maxHealth = self.health;
			self.strength = 8 + self.level * 2;
			self.defense = 3 + Math.floor(self.level * 1.5);
			self.agility = 3 + Math.floor(self.level * 1.2);
			levelText.setText("Lvl " + self.level);
			self.healthBar.setHealth(self.health, self.maxHealth);
		}
	};
	self.healthBar.setHealth(self.health, self.maxHealth);
	return self;
});
var HealthBar = Container.expand(function () {
	var self = Container.call(this);
	var background = self.attachAsset('healthBarBg', {
		anchorX: 0,
		anchorY: 0
	});
	var bar = self.attachAsset('healthBar', {
		anchorX: 0,
		anchorY: 0
	});
	self.setHealth = function (current, max) {
		var percentage = Math.max(0, Math.min(1, current / max));
		bar.scale.x = percentage;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x302b2a
});
/**** 
* Game Code
****/ 
// Game state
var gameState = "menu"; // menu, combat, upgrade, victory, defeat
var currentTurn = "player"; // player, enemy
var currentRound = 0;
var battleWon = false;
// Create arena
var arena = LK.getAsset('arena', {
	anchorX: 0.5,
	anchorY: 0.5
});
arena.x = 2048 / 2;
arena.y = 2732 / 2;
game.addChild(arena);
// Create gladiators
var player = new Gladiator(true);
player.x = 2048 / 2 - 300;
player.y = 2732 / 2;
game.addChild(player);
var enemy = new Gladiator(false);
enemy.x = 2048 / 2 + 300;
enemy.y = 2732 / 2;
game.addChild(enemy);
// Generate enemy based on player's level
enemy.generateEnemy(storage.playerLevel);
// Create UI elements
var combatLog = new CombatLog();
combatLog.x = 2048 / 2;
combatLog.y = 2732 / 2 - 300;
game.addChild(combatLog);
var coinDisplay = new CoinDisplay();
coinDisplay.x = 2048 - 150;
coinDisplay.y = 150;
game.addChild(coinDisplay);
// Battle UI
var actionButtons = [];
// Attack button
var attackButton = new ActionButton("Attack", function () {
	performPlayerAttack();
});
attackButton.x = 2048 / 2 - 250;
attackButton.y = 2732 - 200;
game.addChild(attackButton);
actionButtons.push(attackButton);
// Defend button
var defendButton = new ActionButton("Defend", function () {
	performPlayerDefend();
});
defendButton.x = 2048 / 2;
defendButton.y = 2732 - 200;
game.addChild(defendButton);
actionButtons.push(defendButton);
// Special attack button
var specialButton = new ActionButton("Special", function () {
	performPlayerSpecial();
});
specialButton.x = 2048 / 2 + 250;
specialButton.y = 2732 - 200;
game.addChild(specialButton);
actionButtons.push(specialButton);
// Next battle button (shown after victory)
var nextBattleButton = new ActionButton("Next Battle", function () {
	startNextBattle();
});
nextBattleButton.x = 2048 / 2;
nextBattleButton.y = 2732 - 200;
nextBattleButton.visible = false;
game.addChild(nextBattleButton);
// Upgrade buttons (shown after victory)
var upgradeButtons = [];
var upgradeHealthButton = new ActionButton("Health +20", function () {
	upgradeHealth();
});
upgradeHealthButton.x = 2048 / 2 - 250;
upgradeHealthButton.y = 2732 - 300;
upgradeHealthButton.visible = false;
game.addChild(upgradeHealthButton);
upgradeButtons.push(upgradeHealthButton);
var upgradeStrengthButton = new ActionButton("Strength +2", function () {
	upgradeStrength();
});
upgradeStrengthButton.x = 2048 / 2;
upgradeStrengthButton.y = 2732 - 300;
upgradeStrengthButton.visible = false;
game.addChild(upgradeStrengthButton);
upgradeButtons.push(upgradeStrengthButton);
var upgradeDefenseButton = new ActionButton("Defense +2", function () {
	upgradeDefense();
});
upgradeDefenseButton.x = 2048 / 2 + 250;
upgradeDefenseButton.y = 2732 - 300;
upgradeDefenseButton.visible = false;
game.addChild(upgradeDefenseButton);
upgradeButtons.push(upgradeDefenseButton);
// Title text
var titleText = new Text2("ARENA GLADIATOR", {
	size: 120,
	fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 500;
game.addChild(titleText);
// Start game button
var startButton = new ActionButton("Start Battle", function () {
	startGame();
});
startButton.x = 2048 / 2;
startButton.y = 800;
game.addChild(startButton);
// Status text
var statusText = new Text2("", {
	size: 60,
	fill: 0xFFFFFF
});
statusText.anchor.set(0.5, 0.5);
statusText.x = 2048 / 2;
statusText.y = 400;
game.addChild(statusText);
// Game functions
function startGame() {
	gameState = "combat";
	currentTurn = "player";
	currentRound = 1;
	battleWon = false;
	// Reset gladiators
	player.reset();
	enemy.generateEnemy(storage.playerLevel);
	// Update UI visibility
	titleText.visible = false;
	startButton.visible = false;
	showCombatUI(true);
	showUpgradeUI(false);
	nextBattleButton.visible = false;
	statusText.setText("Round " + currentRound);
	combatLog.addEntry("The battle begins! It's your turn.");
	// Play arena music
	LK.playMusic('arenaMusic');
}
function showCombatUI(visible) {
	for (var i = 0; i < actionButtons.length; i++) {
		actionButtons[i].visible = visible;
	}
}
function showUpgradeUI(visible) {
	for (var i = 0; i < upgradeButtons.length; i++) {
		upgradeButtons[i].visible = visible;
	}
}
function performPlayerAttack() {
	if (gameState !== "combat" || currentTurn !== "player") {
		return;
	}
	// Disable buttons during animation
	setActionButtonsEnabled(false);
	// Calculate damage
	var baseDamage = player.strength;
	var criticalChance = player.agility / 100;
	var isCritical = Math.random() < criticalChance;
	var damage = baseDamage * (isCritical ? 2 : 1);
	// Apply damage to enemy
	var actualDamage = enemy.takeDamage(damage);
	// Show combat log
	if (isCritical) {
		combatLog.addEntry("Critical hit! You dealt " + actualDamage + " damage!");
		LK.getSound('critical').play();
	} else {
		combatLog.addEntry("You attacked for " + actualDamage + " damage!");
		LK.getSound('hit').play();
	}
	// Check if enemy is defeated
	if (enemy.isDead()) {
		LK.setTimeout(function () {
			endBattle(true);
		}, 1000);
	} else {
		// Enemy turn after a delay
		LK.setTimeout(function () {
			currentTurn = "enemy";
			performEnemyTurn();
		}, 1000);
	}
}
function performPlayerDefend() {
	if (gameState !== "combat" || currentTurn !== "player") {
		return;
	}
	// Disable buttons during animation
	setActionButtonsEnabled(false);
	// Add temporary defense bonus
	var tempDefenseBonus = Math.floor(player.defense * 0.5);
	player.defense += tempDefenseBonus;
	combatLog.addEntry("You take a defensive stance! (+" + tempDefenseBonus + " DEF)");
	LK.getSound('block').play();
	// Enemy turn after a delay
	LK.setTimeout(function () {
		currentTurn = "enemy";
		performEnemyTurn();
		// Remove temporary defense bonus after enemy turn
		LK.setTimeout(function () {
			player.defense -= tempDefenseBonus;
		}, 1000);
	}, 1000);
}
function performPlayerSpecial() {
	if (gameState !== "combat" || currentTurn !== "player") {
		return;
	}
	// Disable buttons during animation
	setActionButtonsEnabled(false);
	// Special attack has higher damage but might miss
	var hitChance = 0.7 + player.agility / 100;
	var isHit = Math.random() < hitChance;
	if (isHit) {
		// Calculate damage (higher than normal attack)
		var damage = Math.floor(player.strength * 1.5);
		var actualDamage = enemy.takeDamage(damage);
		combatLog.addEntry("Special attack hits for " + actualDamage + " damage!");
		LK.getSound('critical').play();
		// Check if enemy is defeated
		if (enemy.isDead()) {
			LK.setTimeout(function () {
				endBattle(true);
			}, 1000);
		} else {
			// Enemy turn after a delay
			LK.setTimeout(function () {
				currentTurn = "enemy";
				performEnemyTurn();
			}, 1000);
		}
	} else {
		combatLog.addEntry("Special attack missed!");
		// Enemy turn after a delay
		LK.setTimeout(function () {
			currentTurn = "enemy";
			performEnemyTurn();
		}, 1000);
	}
}
function performEnemyTurn() {
	if (gameState !== "combat" || currentTurn !== "enemy") {
		return;
	}
	// Enemy AI - randomly choose between attack types
	var moveType = Math.random();
	if (moveType < 0.7) {
		// Basic attack
		var damage = enemy.strength;
		var actualDamage = player.takeDamage(damage);
		combatLog.addEntry("Enemy attacks for " + actualDamage + " damage!");
		LK.getSound('hit').play();
	} else if (moveType < 0.9) {
		// Strong attack
		var damage = Math.floor(enemy.strength * 1.3);
		var actualDamage = player.takeDamage(damage);
		combatLog.addEntry("Enemy strikes hard for " + actualDamage + " damage!");
		LK.getSound('critical').play();
	} else {
		// Heal
		var healAmount = Math.floor(enemy.maxHealth * 0.1);
		enemy.heal(healAmount);
		combatLog.addEntry("Enemy recovers " + healAmount + " health!");
	}
	// Check if player is defeated
	if (player.isDead()) {
		LK.setTimeout(function () {
			endBattle(false);
		}, 1000);
	} else {
		// Player turn after a delay
		LK.setTimeout(function () {
			currentTurn = "player";
			currentRound++;
			statusText.setText("Round " + currentRound);
			combatLog.addEntry("Your turn!");
			setActionButtonsEnabled(true);
		}, 1000);
	}
}
function endBattle(playerWon) {
	gameState = playerWon ? "victory" : "defeat";
	battleWon = playerWon;
	if (playerWon) {
		// Award coins based on enemy level
		var coinsEarned = 10 + enemy.level * 5;
		storage.coins += coinsEarned;
		storage.wins += 1;
		coinDisplay.update();
		statusText.setText("VICTORY!");
		combatLog.addEntry("You won! Earned " + coinsEarned + " coins.");
		LK.getSound('victory').play();
		// Show upgrade options
		showCombatUI(false);
		showUpgradeUI(true);
		nextBattleButton.visible = true;
	} else {
		statusText.setText("DEFEAT!");
		combatLog.addEntry("You were defeated. Try again!");
		LK.getSound('defeat').play();
		// Show restart button
		showCombatUI(false);
		startButton.visible = true;
		startButton.x = 2048 / 2;
		startButton.y = 2732 - 200;
	}
}
function startNextBattle() {
	if (gameState !== "victory") {
		return;
	}
	// Level up player
	storage.playerLevel += 1;
	// Start new battle
	startGame();
}
function upgradeHealth() {
	if (gameState !== "victory" || storage.coins < 20) {
		return;
	}
	storage.coins -= 20;
	storage.playerMaxHealth += 20;
	coinDisplay.update();
	combatLog.addEntry("Health increased! (20 coins spent)");
	updateUpgradeButtons();
}
function upgradeStrength() {
	if (gameState !== "victory" || storage.coins < 15) {
		return;
	}
	storage.coins -= 15;
	storage.playerStrength += 2;
	coinDisplay.update();
	combatLog.addEntry("Strength increased! (15 coins spent)");
	updateUpgradeButtons();
}
function upgradeDefense() {
	if (gameState !== "victory" || storage.coins < 15) {
		return;
	}
	storage.coins -= 15;
	storage.playerDefense += 2;
	coinDisplay.update();
	combatLog.addEntry("Defense increased! (15 coins spent)");
	updateUpgradeButtons();
}
function updateUpgradeButtons() {
	upgradeHealthButton.setEnabled(storage.coins >= 20);
	upgradeStrengthButton.setEnabled(storage.coins >= 15);
	upgradeDefenseButton.setEnabled(storage.coins >= 15);
}
function setActionButtonsEnabled(enabled) {
	for (var i = 0; i < actionButtons.length; i++) {
		actionButtons[i].setEnabled(enabled);
	}
}
// Initialize button states
updateUpgradeButtons();
// Game initialization state
player.visible = false;
enemy.visible = false;
statusText.visible = false;
combatLog.visible = false;
// Game main update loop
game.update = function () {
	// Update game state
	if (gameState === "menu") {
		titleText.visible = true;
		startButton.visible = true;
		player.visible = false;
		enemy.visible = false;
		statusText.visible = false;
		combatLog.visible = false;
		showCombatUI(false);
		showUpgradeUI(false);
		nextBattleButton.visible = false;
	} else if (gameState === "combat" || gameState === "victory" || gameState === "defeat") {
		titleText.visible = false;
		player.visible = true;
		enemy.visible = true;
		statusText.visible = true;
		combatLog.visible = true;
	}
};
// Start with menu
gameState = "menu"; /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
	coins: 0,
	playerLevel: 1,
	playerHealth: 100,
	playerMaxHealth: 100,
	playerStrength: 10,
	playerDefense: 5,
	playerAgility: 5,
	wins: 0
});
/**** 
* Classes
****/ 
var ActionButton = Container.expand(function (label, callback) {
	var self = Container.call(this);
	var button = self.attachAsset('actionButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var text = new Text2(label, {
		size: 40,
		fill: 0xFFFFFF
	});
	text.anchor.set(0.5, 0.5);
	self.addChild(text);
	self.setEnabled = function (enabled) {
		self.enabled = enabled;
		self.alpha = enabled ? 1.0 : 0.5;
	};
	self.down = function () {
		if (self.enabled) {
			tween(button, {
				scaleX: 0.9,
				scaleY: 0.9
			}, {
				duration: 100
			});
		}
	};
	self.up = function () {
		if (self.enabled) {
			tween(button, {
				scaleX: 1.0,
				scaleY: 1.0
			}, {
				duration: 100
			});
			if (callback) {
				callback();
			}
		}
	};
	self.setEnabled(true);
	return self;
});
var CoinDisplay = Container.expand(function () {
	var self = Container.call(this);
	var coinIcon = self.attachAsset('coin', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -30,
		y: 0
	});
	var coinText = new Text2(storage.coins.toString(), {
		size: 40,
		fill: 0xFFFFFF
	});
	coinText.anchor.set(0, 0.5);
	coinText.x = 10;
	self.addChild(coinText);
	self.update = function () {
		coinText.setText(storage.coins.toString());
	};
	return self;
});
var CombatLog = Container.expand(function () {
	var self = Container.call(this);
	var logText = new Text2("", {
		size: 35,
		fill: 0xFFFFFF
	});
	logText.anchor.set(0.5, 0);
	self.addChild(logText);
	self.addEntry = function (message) {
		logText.setText(message);
		// Clear the message after a delay
		LK.setTimeout(function () {
			if (logText.text === message) {
				// Only clear if it hasn't been changed
				logText.setText("");
			}
		}, 3000);
	};
	return self;
});
var Gladiator = Container.expand(function (isPlayer) {
	var self = Container.call(this);
	var sprite = self.attachAsset(isPlayer ? 'player' : 'enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.isPlayer = isPlayer;
	self.health = isPlayer ? storage.playerMaxHealth : 0;
	self.maxHealth = isPlayer ? storage.playerMaxHealth : 0;
	self.strength = isPlayer ? storage.playerStrength : 0;
	self.defense = isPlayer ? storage.playerDefense : 0;
	self.agility = isPlayer ? storage.playerAgility : 0;
	self.level = isPlayer ? storage.playerLevel : 1;
	self.healthBar = new HealthBar();
	self.healthBar.y = -sprite.height / 2 - 40;
	self.healthBar.x = -self.healthBar.width / 2;
	self.addChild(self.healthBar);
	var levelText = new Text2("Lvl " + self.level, {
		size: 40,
		fill: 0xFFFFFF
	});
	levelText.anchor.set(0.5, 0.5);
	levelText.y = sprite.height / 2 + 40;
	self.addChild(levelText);
	self.takeDamage = function (amount) {
		var actualDamage = Math.max(1, amount - self.defense / 2);
		self.health = Math.max(0, self.health - actualDamage);
		self.healthBar.setHealth(self.health, self.maxHealth);
		// Visual feedback
		tween(sprite, {
			tint: 0xFF0000
		}, {
			duration: 200,
			onFinish: function onFinish() {
				tween(sprite, {
					tint: 0xFFFFFF
				}, {
					duration: 200
				});
			}
		});
		return actualDamage;
	};
	self.heal = function (amount) {
		self.health = Math.min(self.maxHealth, self.health + amount);
		self.healthBar.setHealth(self.health, self.maxHealth);
		// Visual feedback
		tween(sprite, {
			tint: 0x00FF00
		}, {
			duration: 200,
			onFinish: function onFinish() {
				tween(sprite, {
					tint: 0xFFFFFF
				}, {
					duration: 200
				});
			}
		});
	};
	self.isDead = function () {
		return self.health <= 0;
	};
	self.reset = function () {
		if (self.isPlayer) {
			self.health = storage.playerMaxHealth;
			self.maxHealth = storage.playerMaxHealth;
			self.strength = storage.playerStrength;
			self.defense = storage.playerDefense;
			self.agility = storage.playerAgility;
			self.level = storage.playerLevel;
			levelText.setText("Lvl " + self.level);
		}
		self.healthBar.setHealth(self.health, self.maxHealth);
	};
	self.generateEnemy = function (difficulty) {
		if (!self.isPlayer) {
			self.level = Math.max(1, difficulty);
			self.health = 80 + self.level * 20;
			self.maxHealth = self.health;
			self.strength = 8 + self.level * 2;
			self.defense = 3 + Math.floor(self.level * 1.5);
			self.agility = 3 + Math.floor(self.level * 1.2);
			levelText.setText("Lvl " + self.level);
			self.healthBar.setHealth(self.health, self.maxHealth);
		}
	};
	self.healthBar.setHealth(self.health, self.maxHealth);
	return self;
});
var HealthBar = Container.expand(function () {
	var self = Container.call(this);
	var background = self.attachAsset('healthBarBg', {
		anchorX: 0,
		anchorY: 0
	});
	var bar = self.attachAsset('healthBar', {
		anchorX: 0,
		anchorY: 0
	});
	self.setHealth = function (current, max) {
		var percentage = Math.max(0, Math.min(1, current / max));
		bar.scale.x = percentage;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x302b2a
});
/**** 
* Game Code
****/ 
// Game state
var gameState = "menu"; // menu, combat, upgrade, victory, defeat
var currentTurn = "player"; // player, enemy
var currentRound = 0;
var battleWon = false;
// Create arena
var arena = LK.getAsset('arena', {
	anchorX: 0.5,
	anchorY: 0.5
});
arena.x = 2048 / 2;
arena.y = 2732 / 2;
game.addChild(arena);
// Create gladiators
var player = new Gladiator(true);
player.x = 2048 / 2 - 300;
player.y = 2732 / 2;
game.addChild(player);
var enemy = new Gladiator(false);
enemy.x = 2048 / 2 + 300;
enemy.y = 2732 / 2;
game.addChild(enemy);
// Generate enemy based on player's level
enemy.generateEnemy(storage.playerLevel);
// Create UI elements
var combatLog = new CombatLog();
combatLog.x = 2048 / 2;
combatLog.y = 2732 / 2 - 300;
game.addChild(combatLog);
var coinDisplay = new CoinDisplay();
coinDisplay.x = 2048 - 150;
coinDisplay.y = 150;
game.addChild(coinDisplay);
// Battle UI
var actionButtons = [];
// Attack button
var attackButton = new ActionButton("Attack", function () {
	performPlayerAttack();
});
attackButton.x = 2048 / 2 - 250;
attackButton.y = 2732 - 200;
game.addChild(attackButton);
actionButtons.push(attackButton);
// Defend button
var defendButton = new ActionButton("Defend", function () {
	performPlayerDefend();
});
defendButton.x = 2048 / 2;
defendButton.y = 2732 - 200;
game.addChild(defendButton);
actionButtons.push(defendButton);
// Special attack button
var specialButton = new ActionButton("Special", function () {
	performPlayerSpecial();
});
specialButton.x = 2048 / 2 + 250;
specialButton.y = 2732 - 200;
game.addChild(specialButton);
actionButtons.push(specialButton);
// Next battle button (shown after victory)
var nextBattleButton = new ActionButton("Next Battle", function () {
	startNextBattle();
});
nextBattleButton.x = 2048 / 2;
nextBattleButton.y = 2732 - 200;
nextBattleButton.visible = false;
game.addChild(nextBattleButton);
// Upgrade buttons (shown after victory)
var upgradeButtons = [];
var upgradeHealthButton = new ActionButton("Health +20", function () {
	upgradeHealth();
});
upgradeHealthButton.x = 2048 / 2 - 250;
upgradeHealthButton.y = 2732 - 300;
upgradeHealthButton.visible = false;
game.addChild(upgradeHealthButton);
upgradeButtons.push(upgradeHealthButton);
var upgradeStrengthButton = new ActionButton("Strength +2", function () {
	upgradeStrength();
});
upgradeStrengthButton.x = 2048 / 2;
upgradeStrengthButton.y = 2732 - 300;
upgradeStrengthButton.visible = false;
game.addChild(upgradeStrengthButton);
upgradeButtons.push(upgradeStrengthButton);
var upgradeDefenseButton = new ActionButton("Defense +2", function () {
	upgradeDefense();
});
upgradeDefenseButton.x = 2048 / 2 + 250;
upgradeDefenseButton.y = 2732 - 300;
upgradeDefenseButton.visible = false;
game.addChild(upgradeDefenseButton);
upgradeButtons.push(upgradeDefenseButton);
// Title text
var titleText = new Text2("ARENA GLADIATOR", {
	size: 120,
	fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 500;
game.addChild(titleText);
// Start game button
var startButton = new ActionButton("Start Battle", function () {
	startGame();
});
startButton.x = 2048 / 2;
startButton.y = 800;
game.addChild(startButton);
// Status text
var statusText = new Text2("", {
	size: 60,
	fill: 0xFFFFFF
});
statusText.anchor.set(0.5, 0.5);
statusText.x = 2048 / 2;
statusText.y = 400;
game.addChild(statusText);
// Game functions
function startGame() {
	gameState = "combat";
	currentTurn = "player";
	currentRound = 1;
	battleWon = false;
	// Reset gladiators
	player.reset();
	enemy.generateEnemy(storage.playerLevel);
	// Update UI visibility
	titleText.visible = false;
	startButton.visible = false;
	showCombatUI(true);
	showUpgradeUI(false);
	nextBattleButton.visible = false;
	statusText.setText("Round " + currentRound);
	combatLog.addEntry("The battle begins! It's your turn.");
	// Play arena music
	LK.playMusic('arenaMusic');
}
function showCombatUI(visible) {
	for (var i = 0; i < actionButtons.length; i++) {
		actionButtons[i].visible = visible;
	}
}
function showUpgradeUI(visible) {
	for (var i = 0; i < upgradeButtons.length; i++) {
		upgradeButtons[i].visible = visible;
	}
}
function performPlayerAttack() {
	if (gameState !== "combat" || currentTurn !== "player") {
		return;
	}
	// Disable buttons during animation
	setActionButtonsEnabled(false);
	// Calculate damage
	var baseDamage = player.strength;
	var criticalChance = player.agility / 100;
	var isCritical = Math.random() < criticalChance;
	var damage = baseDamage * (isCritical ? 2 : 1);
	// Apply damage to enemy
	var actualDamage = enemy.takeDamage(damage);
	// Show combat log
	if (isCritical) {
		combatLog.addEntry("Critical hit! You dealt " + actualDamage + " damage!");
		LK.getSound('critical').play();
	} else {
		combatLog.addEntry("You attacked for " + actualDamage + " damage!");
		LK.getSound('hit').play();
	}
	// Check if enemy is defeated
	if (enemy.isDead()) {
		LK.setTimeout(function () {
			endBattle(true);
		}, 1000);
	} else {
		// Enemy turn after a delay
		LK.setTimeout(function () {
			currentTurn = "enemy";
			performEnemyTurn();
		}, 1000);
	}
}
function performPlayerDefend() {
	if (gameState !== "combat" || currentTurn !== "player") {
		return;
	}
	// Disable buttons during animation
	setActionButtonsEnabled(false);
	// Add temporary defense bonus
	var tempDefenseBonus = Math.floor(player.defense * 0.5);
	player.defense += tempDefenseBonus;
	combatLog.addEntry("You take a defensive stance! (+" + tempDefenseBonus + " DEF)");
	LK.getSound('block').play();
	// Enemy turn after a delay
	LK.setTimeout(function () {
		currentTurn = "enemy";
		performEnemyTurn();
		// Remove temporary defense bonus after enemy turn
		LK.setTimeout(function () {
			player.defense -= tempDefenseBonus;
		}, 1000);
	}, 1000);
}
function performPlayerSpecial() {
	if (gameState !== "combat" || currentTurn !== "player") {
		return;
	}
	// Disable buttons during animation
	setActionButtonsEnabled(false);
	// Special attack has higher damage but might miss
	var hitChance = 0.7 + player.agility / 100;
	var isHit = Math.random() < hitChance;
	if (isHit) {
		// Calculate damage (higher than normal attack)
		var damage = Math.floor(player.strength * 1.5);
		var actualDamage = enemy.takeDamage(damage);
		combatLog.addEntry("Special attack hits for " + actualDamage + " damage!");
		LK.getSound('critical').play();
		// Check if enemy is defeated
		if (enemy.isDead()) {
			LK.setTimeout(function () {
				endBattle(true);
			}, 1000);
		} else {
			// Enemy turn after a delay
			LK.setTimeout(function () {
				currentTurn = "enemy";
				performEnemyTurn();
			}, 1000);
		}
	} else {
		combatLog.addEntry("Special attack missed!");
		// Enemy turn after a delay
		LK.setTimeout(function () {
			currentTurn = "enemy";
			performEnemyTurn();
		}, 1000);
	}
}
function performEnemyTurn() {
	if (gameState !== "combat" || currentTurn !== "enemy") {
		return;
	}
	// Enemy AI - randomly choose between attack types
	var moveType = Math.random();
	if (moveType < 0.7) {
		// Basic attack
		var damage = enemy.strength;
		var actualDamage = player.takeDamage(damage);
		combatLog.addEntry("Enemy attacks for " + actualDamage + " damage!");
		LK.getSound('hit').play();
	} else if (moveType < 0.9) {
		// Strong attack
		var damage = Math.floor(enemy.strength * 1.3);
		var actualDamage = player.takeDamage(damage);
		combatLog.addEntry("Enemy strikes hard for " + actualDamage + " damage!");
		LK.getSound('critical').play();
	} else {
		// Heal
		var healAmount = Math.floor(enemy.maxHealth * 0.1);
		enemy.heal(healAmount);
		combatLog.addEntry("Enemy recovers " + healAmount + " health!");
	}
	// Check if player is defeated
	if (player.isDead()) {
		LK.setTimeout(function () {
			endBattle(false);
		}, 1000);
	} else {
		// Player turn after a delay
		LK.setTimeout(function () {
			currentTurn = "player";
			currentRound++;
			statusText.setText("Round " + currentRound);
			combatLog.addEntry("Your turn!");
			setActionButtonsEnabled(true);
		}, 1000);
	}
}
function endBattle(playerWon) {
	gameState = playerWon ? "victory" : "defeat";
	battleWon = playerWon;
	if (playerWon) {
		// Award coins based on enemy level
		var coinsEarned = 10 + enemy.level * 5;
		storage.coins += coinsEarned;
		storage.wins += 1;
		coinDisplay.update();
		statusText.setText("VICTORY!");
		combatLog.addEntry("You won! Earned " + coinsEarned + " coins.");
		LK.getSound('victory').play();
		// Show upgrade options
		showCombatUI(false);
		showUpgradeUI(true);
		nextBattleButton.visible = true;
	} else {
		statusText.setText("DEFEAT!");
		combatLog.addEntry("You were defeated. Try again!");
		LK.getSound('defeat').play();
		// Show restart button
		showCombatUI(false);
		startButton.visible = true;
		startButton.x = 2048 / 2;
		startButton.y = 2732 - 200;
	}
}
function startNextBattle() {
	if (gameState !== "victory") {
		return;
	}
	// Level up player
	storage.playerLevel += 1;
	// Start new battle
	startGame();
}
function upgradeHealth() {
	if (gameState !== "victory" || storage.coins < 20) {
		return;
	}
	storage.coins -= 20;
	storage.playerMaxHealth += 20;
	coinDisplay.update();
	combatLog.addEntry("Health increased! (20 coins spent)");
	updateUpgradeButtons();
}
function upgradeStrength() {
	if (gameState !== "victory" || storage.coins < 15) {
		return;
	}
	storage.coins -= 15;
	storage.playerStrength += 2;
	coinDisplay.update();
	combatLog.addEntry("Strength increased! (15 coins spent)");
	updateUpgradeButtons();
}
function upgradeDefense() {
	if (gameState !== "victory" || storage.coins < 15) {
		return;
	}
	storage.coins -= 15;
	storage.playerDefense += 2;
	coinDisplay.update();
	combatLog.addEntry("Defense increased! (15 coins spent)");
	updateUpgradeButtons();
}
function updateUpgradeButtons() {
	upgradeHealthButton.setEnabled(storage.coins >= 20);
	upgradeStrengthButton.setEnabled(storage.coins >= 15);
	upgradeDefenseButton.setEnabled(storage.coins >= 15);
}
function setActionButtonsEnabled(enabled) {
	for (var i = 0; i < actionButtons.length; i++) {
		actionButtons[i].setEnabled(enabled);
	}
}
// Initialize button states
updateUpgradeButtons();
// Game initialization state
player.visible = false;
enemy.visible = false;
statusText.visible = false;
combatLog.visible = false;
// Game main update loop
game.update = function () {
	// Update game state
	if (gameState === "menu") {
		titleText.visible = true;
		startButton.visible = true;
		player.visible = false;
		enemy.visible = false;
		statusText.visible = false;
		combatLog.visible = false;
		showCombatUI(false);
		showUpgradeUI(false);
		nextBattleButton.visible = false;
	} else if (gameState === "combat" || gameState === "victory" || gameState === "defeat") {
		titleText.visible = false;
		player.visible = true;
		enemy.visible = true;
		statusText.visible = true;
		combatLog.visible = true;
	}
};
// Start with menu
gameState = "menu";