package me.hammerle.supersnuvi.entity.components.ai; import me.hammerle.supersnuvi.Keys; import me.hammerle.supersnuvi.entity.Entity; import me.hammerle.supersnuvi.tiles.Tile; import me.hammerle.supersnuvi.util.SoundUtils; public class HumanController extends Controller { private boolean combatMode = false; private int combatTimer = 0; private int blockTimer = -1; private int attackTimer = -1; private int dodgeTimer = -1; private int dashTimer = -1; public HumanController(Entity ent) { super(ent); } @Override public void tick() { float f = 12; if(Keys.RUN.isDown()) { f = 24; } if(Keys.RIGHT.isDown()) { ent.setMotionX(f); } else if(Keys.LEFT.isDown()) { ent.setMotionX(-f); } else { ent.setMotionX(0.0f); } if(Keys.JUMP.isDown()) { ent.getMovement().jump(); } } /* @Override public boolean isRunning() { return Keys.RUN.isDown(); } @Override public boolean isInCombatMode() { return combatMode || combatTimer < 0; } @Override public int getCombatTimer() { return combatTimer; } @Override public boolean isBlocking() { return blockTimer >= 0; } @Override public boolean isAttacking() { return attackTimer >= 0; } @Override public boolean isDashing() { return dashTimer != -1; } @Override public boolean isDodging() { return dodgeTimer != -1; } @Override public void tick() { if(ent.getHealth().isDead()) { return; } if(Keys.COMBAT.isReleased()) { if(combatMode) { combatMode = false; combatTimer = -ent.getAnimator().getCombatStartTicks(); SoundUtils.playSound(SoundUtils.Sound.SWORD_SHEATH); } else { combatMode = true; combatTimer = ent.getAnimator().getCombatStartTicks(); SoundUtils.playSound(SoundUtils.Sound.SWORD_PULL); } } if(combatTimer < 0) { combatTimer++; } else if(combatTimer > 0) { combatTimer--; } if(blockTimer != -1) { blockTimer++; if(blockTimer >= ent.getAnimator().getBlockTicks()) { blockTimer = -80; } } if(attackTimer != -1) { attackTimer++; if(attackTimer >= ent.getAnimator().getAttackTicks()) { attackTimer = -1; float sign = ent.getAnimator().drawImageFlipped() ? -1 : 1; float extend = sign * Tile.SIZE; boolean once = true; for(Entity e : ent.getLevel().getEntitiesCollidingWith(ent, ent.getBox().expand(extend, 0))) { if(e.getController().isAttacking() && once) { once = false; ent.setMotionX(-sign * 7); e.setMotionX(sign * 7); } else if(!e.getController().isBlocking()) { e.getHealth().addHealth(-30); } } return; } } if(dodgeTimer != -1) { dodgeTimer++; if(dodgeTimer > 12) { dodgeTimer = -1; ent.setMotionX(0.0f); } else { ent.setMotionX(ent.getAnimator().drawImageFlipped() ? 10 : -10); } } if(dashTimer != -1) { dashTimer++; if(dashTimer > 15) { dashTimer = -1; ent.setMotionX(0.0f); } else { ent.setMotionX(ent.getAnimator().drawImageFlipped() ? -15 : 15); } } if(combatMode && combatTimer == 0) { if(Keys.COMBAT_BLOCK.isDown() && blockTimer == -1) { ent.getAnimator().resetFrames(); blockTimer = 0; } else if(Keys.COMBAT_ATTACK.isReleased()&& attackTimer == -1) { SoundUtils.playSound(SoundUtils.Sound.SWORD_SLASH); attackTimer = 0; } else if(Keys.COMBAT_DASH.isReleased() && dashTimer == -1 && ent.getEnergy().getEnergyPercent() >= 0.3) { SoundUtils.playSound(SoundUtils.Sound.DASH); dashTimer = 0; ent.getEnergy().addEnergyPercent(-0.3); } else if(Keys.COMBAT_DODGE.isReleased() && dodgeTimer == -1 && ent.getEnergy().getEnergyPercent() >= 0.1) { SoundUtils.playSound(SoundUtils.Sound.DODGE); dodgeTimer = 0; ent.getEnergy().addEnergyPercent(-0.10); } } if(!isBlocking() && dodgeTimer == -1 && dashTimer == -1) { if(Keys.JUMP.isDown() && ent.getEnergy().getEnergyPercent() > 0.2 && ent.getMovement().jump()) { ent.getEnergy().addEnergyPercent(-0.10); SoundUtils.playSound(SoundUtils.Sound.JUMP); } float speed; if(ent.getController().isInCombatMode()) { speed = 3.0f; } else { speed = 6.0f; if(isRunning()) { if(ent.getEnergy().getEnergyPercent() > 0.0) { speed = 9.0f; } if(ent.isMoving()) { ent.getEnergy().addEnergy(-0.3); } } } if(dodgeTimer == -1 && dashTimer == -1) { if(Keys.LEFT.isDown()) { ent.setMotionX(-speed * ent.getMovementPenalty().getFactor()); } else if(Keys.RIGHT.isDown()) { ent.setMotionX(speed * ent.getMovementPenalty().getFactor()); } } if(ent.isOnGround() && ent.getPreviousMotionX() != 0) { if(ent.getMovementPenalty().isInWater()) { SoundUtils.playSound(SoundUtils.Sound.WALK_WATER); } else { SoundUtils.playSound(SoundUtils.Sound.WALK); } } } }*/ }