package org.test.rtsgame;
import loon.LRelease;
import loon.LSystem;
import loon.action.sprite.SpriteBatch;
import loon.event.LTouchCollection;
import loon.event.LTouchLocation;
import loon.event.SysTouch;
import loon.geom.RectBox;
import loon.geom.Vector2f;
import loon.utils.MathUtils;
import loon.utils.timer.GameTime;
//战斗控制用类,操作我放角色移动行为
public class RoleMoveControl implements LRelease {
private java.util.ArrayList<RoleControl> armies = new java.util.ArrayList<RoleControl>();
private java.util.ArrayList<Vector2f> armyPosition = new java.util.ArrayList<Vector2f>();
private Castle[] castles = new Castle[2];
private float enemyWaitTime;
private GameContent gameContent;
private float MaxEnemyWaitTime = 2f;
private RoleControl mouseOverArmy;
private RoleControl selectedArmy;
public RoleMoveControl(EntityManager screenManager, int levelIndex) {
this.gameContent = screenManager.getGameContent();
Levels.LevelDetails details = Levels.Load(levelIndex);
Vector2f item = (new Vector2f(1.5f, 6.5f).mul(Tile.size));
this.armyPosition.add(item);
this.castles[0] = new Castle(gameContent, Shape.square, item);
this.castles[1] = new Castle(gameContent, Shape.triangle, new Vector2f(
LSystem.viewSize.width, LSystem.viewSize.height).sub(item));
for (int i = 0; i < details.ArmyNumber.size(); i++) {
for (int j = 0; j < details.ArmyNumber.get(i); j++) {
Vector2f position = this.GetPosition().cpy();
this.armies.add(new RoleControl(this.gameContent, Shape.square,
RoleRank.forValue(i), position));
this.armies.add(new RoleControl(this.gameContent,
Shape.triangle, RoleRank.forValue(i), new Vector2f(
LSystem.viewSize.width, LSystem.viewSize.height).sub(position)));
}
}
this.enemyWaitTime = 0f;
this.MaxEnemyWaitTime /= MathUtils.pow(10f, details.GameMode);
}
public final void close() {
}
public final void Draw(SpriteBatch spriteBatch, GameTime gameTime) {
spriteBatch.draw(this.gameContent.background, 0, 0);
if (this.mouseOverArmy != null) {
this.mouseOverArmy.DrawMouseOver(spriteBatch);
}
if (this.selectedArmy != null) {
this.selectedArmy.DrawMouseOver(spriteBatch);
}
for (int i = 0; i < this.armies.size(); i++) {
this.armies.get(i).DrawPath(gameTime, spriteBatch);
}
for (int j = 0; j < this.armies.size(); j++) {
this.armies.get(j).Draw(gameTime, spriteBatch);
}
for (Castle castle : this.castles) {
castle.Draw(spriteBatch);
}
}
private Vector2f GetPosition() {
Vector2f vector;
do {
int num = this.gameContent.random.nextInt(5);
int num2 = this.gameContent.random.nextInt(11);
RectBox center = Tile.getBounds(num * Tile.size, num2 * Tile.size);
vector = new Vector2f(center.getCenterX(), center.getCenterY());
} while (this.armyPosition.contains(vector));
this.armyPosition.add(vector);
return vector;
}
public final void HandleInput() {
Vector2f nextDestPosition = SysTouch.getLocation().cpy();
LTouchCollection collection = SysTouch.getTouchState();
this.mouseOverArmy = null;
for (int i = 0; i < this.armies.size(); i++) {
if (((this.armies.get(i).getMouseBounds()
.contains(nextDestPosition.x(), nextDestPosition.y()) && this.armies
.get(i).isAlive()) && ((this.selectedArmy == null) && (this.armies
.get(i).shape == Shape.square)))
&& (collection.size() > 0)) {
LTouchLocation location = collection.get(0);
if (location.isDown()) {
this.mouseOverArmy = this.armies.get(i);
break;
}
}
}
if (collection.size() > 0) {
LTouchLocation location2 = collection.get(0);
if (!location2.isDown()) {
LTouchLocation location3 = collection.get(0);
if (!location3.isDrag()) {
if (collection.size() > 0) {
LTouchLocation location4 = collection.get(0);
if (location4.isUp()) {
this.selectedArmy = null;
}
}
if ((this.selectedArmy == null)
|| this.selectedArmy.isAlive()) {
return;
}
this.selectedArmy = null;
}
}
if (SysTouch.isDown() && (this.mouseOverArmy != null)) {
this.selectedArmy = this.mouseOverArmy;
this.mouseOverArmy = null;
this.selectedArmy.Reset();
}
if (this.selectedArmy != null) {
this.selectedArmy.AddPosition(nextDestPosition);
}
}
}
public final void Update(GameTime gameTime) {
this.enemyWaitTime += (float) gameTime.getElapsedGameTime();
int num = (this.gameContent.random.nextInt(this.armies.size() / 2) * 2) + 1;
boolean flag = true;
for (int i = this.armies.size() - 1; i >= 0; i--) {
this.armies.get(i).Update(gameTime);
if (this.armies.get(i).isAlive()) {
this.armies.get(i).HandleEnemy(this.armies);
if (((this.armies.get(i).shape == Shape.triangle) && (this.enemyWaitTime > this.MaxEnemyWaitTime))
&& (i == num)) {
this.enemyWaitTime = 0f;
this.armies.get(i).EnemyAI(this.castles[0].AttackRectangle);
}
}
if ((this.armies.get(i).shape.equals(Shape.square))
&& (this.castles[1].position
.equals(this.armies.get(i).position))) {
this.setIsLevelUp(true);
}
if ((this.armies.get(i).shape == Shape.triangle)
&& (this.castles[0].position
.equals(this.armies.get(i).position))) {
this.setReloadLevel(true);
}
if (this.armies.get(i).isAlive()
&& (this.armies.get(i).shape.equals(Shape.square))) {
flag = false;
}
}
if (flag) {
this.setReloadLevel(true);
}
}
private boolean privateIsLevelUp;
public final boolean getIsLevelUp() {
return privateIsLevelUp;
}
public final void setIsLevelUp(boolean value) {
privateIsLevelUp = value;
}
private boolean privateReloadLevel;
public final boolean getReloadLevel() {
return privateReloadLevel;
}
public final void setReloadLevel(boolean value) {
privateReloadLevel = value;
}
private int privateScore;
public final int getScore() {
return privateScore;
}
public final void setScore(int value) {
privateScore = value;
}
}