Java tutorial
/** * Unsealed: Whispers of Wisdom. * * Copyright (C) 2012 - Juan 'Nushio' Rodriguez * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 of * the License as published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package net.k3rnel.unsealed.battle.enemies; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.color; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.delay; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.sequence; import java.util.ArrayList; import java.util.List; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion; import com.badlogic.gdx.utils.Timer.Task; import net.k3rnel.unsealed.Unsealed; import net.k3rnel.unsealed.battle.BattleEnemy; import net.k3rnel.unsealed.battle.BattleEntity; import net.k3rnel.unsealed.battle.BattleGrid; import net.k3rnel.unsealed.battle.magic.MagicEntity; import net.k3rnel.unsealed.battle.magic.TreeRoot; import net.k3rnel.unsealed.battle.magic.TreeTrunk; /** * Only a cat with a different cloak a Lion still has claws... * @author Nushio * */ public class Xios extends BattleEnemy { List<MagicEntity> darts; MagicEntity tmpDart; TextureAtlas atlas; public Xios(TextureAtlas atlas, int hp, int x, int y) { super(hp, x, y); this.atlas = atlas; darts = new ArrayList<MagicEntity>(); AtlasRegion atlasRegion = atlas.findRegion("battle/entities/xios"); TextureRegion[][] spriteSheet = atlasRegion.split(304, 294); TextureRegion[] frames = new TextureRegion[4]; frames[0] = spriteSheet[0][0]; frames[1] = spriteSheet[0][1]; frames[2] = spriteSheet[1][0]; frames[3] = spriteSheet[1][1]; this.canBeMoved = false; Animation animation = new Animation(0.3f, frames); animation.setPlayMode(Animation.LOOP); this.animations.put("idle", animation); frames = new TextureRegion[8]; frames[0] = spriteSheet[0][0]; frames[1] = spriteSheet[0][1]; frames[2] = spriteSheet[1][0]; frames[3] = spriteSheet[1][1]; frames[4] = spriteSheet[0][0]; frames[5] = spriteSheet[0][1]; frames[6] = spriteSheet[1][0]; frames[7] = spriteSheet[1][1]; animation = new Animation(0.3f, frames); animation.setPlayMode(Animation.NORMAL); this.animations.put("attacking", animation); this.animations.put("altattacking", animation); this.setState(BattleEntity.stateIdle); this.setWidth(304); this.setHeight(294); this.setX(320); this.setY(100); this.hpLabel.setX(470); } @Override public void act(float delta) { super.act(delta); // setGrid(4,1); // this.setX(320); // this.setY(100); this.setVisible(true); for (int i = 0; i < darts.size(); i++) { if (darts.get(i).destroyMe) { darts.remove(i); i--; } else { darts.get(i).act(delta); } } if (this.getStatus() != BattleEntity.statusStunned) switch (getState()) { case BattleEntity.stateIdle: if (!currentAnimation.isAnimationFinished(stateTime)) { // for(BattleHero hero : BattleGrid.heroes){ // if(hero.getGridYInt() == this.getGridYInt()){ setState(BattleEntity.stateAttacking); hit = false; // } // } } else { Gdx.app.log(Unsealed.LOG, "Setting state to idle!"); setState(BattleEntity.stateIdle); BattleGrid.timer.scheduleTask(nextTask(), BattleGrid.random.nextInt(4)); } break; case BattleEntity.stateAttacking: if (currentAnimation.isAnimationFinished(stateTime + 0.3f) && !hit) { hit = true; showRoot(true); if (this.getHp() < 600) showRoot(true); } if (currentAnimation.isAnimationFinished(stateTime)) { setState(BattleEntity.stateIdle); BattleGrid.timer.scheduleTask(nextTask(), BattleGrid.random.nextInt(4)); } break; case BattleEntity.stateAltAttacking: if (currentAnimation.isAnimationFinished(stateTime + 0.3f) && !hit) { hit = true; showTrunk(BattleGrid.random.nextInt(3), BattleGrid.random.nextInt(3), true); showTrunk(BattleGrid.random.nextInt(3), BattleGrid.random.nextInt(3), true); showTrunk(BattleGrid.random.nextInt(3), BattleGrid.random.nextInt(3), true); if (this.getHp() < 600) showTrunk(BattleGrid.random.nextInt(3), BattleGrid.random.nextInt(3), true); if (this.getHp() < 300) showTrunk(BattleGrid.random.nextInt(3), BattleGrid.random.nextInt(3), true); if (this.getHp() < 100) showTrunk(BattleGrid.random.nextInt(3), BattleGrid.random.nextInt(3), true); // showTrunk(1,1,true); } if (currentAnimation.isAnimationFinished(stateTime)) { setState(BattleEntity.stateIdle); BattleGrid.timer.scheduleTask(nextTask(), BattleGrid.random.nextInt(4)); } break; } } @Override public void draw(SpriteBatch batch, float parentAlpha) { super.draw(batch, parentAlpha); for (MagicEntity dart : darts) { dart.draw(batch, parentAlpha); } } @Override public Task nextTask() { currentTask = new Task() { @Override public void run() { switch (getState()) { case BattleEntity.stateIdle: if (BattleGrid.random.nextInt(100) < 35) { hit = false; setState(BattleEntity.stateAltAttacking); } else if (BattleGrid.random.nextInt(100) < 30) { hit = false; setState(BattleEntity.stateAttacking); } else { setState(BattleEntity.stateIdle); } break; } } }; return currentTask; } public void showRoot(boolean show) { tmpDart = new TreeRoot(atlas, BattleGrid.random.nextInt(3), -4f, this); tmpDart.setVisible(show); darts.add(tmpDart); } public void showTrunk(int x, int y, boolean show) { tmpDart = new TreeTrunk(atlas, x, y, this); tmpDart.setVisible(show); darts.add(tmpDart); } @Override public void setState(int state) { super.setState(state); switch (state) { case BattleEntity.stateIdle: BattleGrid.timer.scheduleTask(nextTask(), BattleGrid.random.nextInt(5)); break; case BattleEntity.stateAttacking: actions = sequence(color(Color.YELLOW), delay(0.2f), color(Color.ORANGE), delay(0.1f), color(Color.YELLOW), delay(0.2f), color(Color.ORANGE), delay(0.1f), color(Color.WHITE), delay(0.1f)); this.addAction(actions); break; case BattleEntity.stateAltAttacking: actions = sequence(color(Color.GREEN), delay(0.1f), color(Color.YELLOW), delay(0.1f), color(Color.GREEN), delay(0.1f), color(Color.YELLOW), delay(0.1f), color(Color.WHITE), delay(0.1f)); this.addAction(actions); break; } } // @Override // public void setStatus(int status) { // // } }