123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- package me.hammerle.supersnuvi.entity.components.ai;
- import me.hammerle.snuviengine.api.Shader;
- import me.hammerle.snuviengine.api.Texture;
- import me.hammerle.supersnuvi.Keys;
- import me.hammerle.supersnuvi.entity.Entity;
- import me.hammerle.supersnuvi.util.Face;
- import me.hammerle.supersnuvi.util.SoundUtils;
- import me.hammerle.supersnuvi.util.SoundUtils.Sound;
- import me.hammerle.supersnuvi.util.Utils;
- public class HumanController extends Controller
- {
- private final static int SIZE = 1024;
- private final static Texture HERO = new Texture("resources/hero.png");
-
- private float ox = 0.0f;
- private float oy = 0.0f;
- private float w = 0.0f;
- private float h = 0.0f;
- private float tx = 0.0f;
- private float ty = 0.0f;
-
- private int walkFrame = 0;
- private int idleCounter = 0;
- private int idleFrame = 0;
- private int deathFrame = 0;
- public HumanController(Entity ent)
- {
- super(ent);
- }
-
- private void nextWalkFrame()
- {
- deathFrame = 0;
- idleFrame = 0;
- walkFrame = (walkFrame + 1) % 9;
- }
-
- private void nextIdleFrame()
- {
- deathFrame = 0;
- walkFrame = 0;
- idleCounter++;
- if(idleCounter >= 3)
- {
- idleCounter = 0;
- idleFrame = (idleFrame + 1) % 14;
- }
- }
-
- private void nextDeathFrame()
- {
- walkFrame = 0;
- idleFrame = 0;
- deathFrame++;
- }
-
- private void resetFrames()
- {
- deathFrame = 0;
- walkFrame = 0;
- idleFrame = 0;
- }
- @Override
- public boolean isAnimated()
- {
- return deathFrame < 17;
- }
-
- @Override
- public void tick()
- {
- if(ent.getHealth().isDead())
- {
- ox = ent.getFace() == Face.RIGHT ? 0.0f: -37.0f;
- oy = 0.0f;
- h = 64.0f;
- w = 64.0f;
-
- tx = (deathFrame * 64.0f) / SIZE;
- if(deathFrame < 16)
- {
- ty = 192.0f / SIZE;
- }
- else
- {
- ty = 256.0f / SIZE;
- }
-
- nextDeathFrame();
- return;
- }
-
- float speed = ent.getMovement().getVelocityX();
- if(Keys.RUN.isDown() && ent.getEnergy().getEnergyPercent() >= 0.01f)
- {
- speed *= 1.5f;
- ent.getEnergy().addEnergyPercent(-0.01f);
- }
-
- if(Keys.LEFT.isDown())
- {
- ent.setMotionX(-speed);
- SoundUtils.playSound(ent.getMovement().isInWater() ? SoundUtils.Sound.WALK_WATER : SoundUtils.Sound.WALK);
- }
-
- if(Keys.RIGHT.isDown())
- {
- ent.setMotionX(speed);
- SoundUtils.playSound(ent.getMovement().isInWater() ? SoundUtils.Sound.WALK_WATER : SoundUtils.Sound.WALK);
- }
-
- if(Keys.JUMP.isDown())
- {
- if(ent.getEnergy().getEnergyPercent() >= 0.1f && ent.getMovement().jump())
- {
- SoundUtils.playSound(Sound.JUMP);
- ent.getEnergy().addEnergyPercent(-0.1f);
- }
- }
-
- ox = ent.getFace() == Face.RIGHT ? 0.0f: -5.0f;
- oy = 0.0f;
- h = 64.0f;
- w = 32.0f;
-
- if(ent.isOnGround())
- {
- if(ent.getMotionX() == 0.0f)
- {
- tx = (idleFrame * 32.0f) / SIZE;
- ty = 128.0f / SIZE;
- nextIdleFrame();
- }
- else
- {
- tx = (96.0f + walkFrame * 32.0f) / SIZE;
- ty = 0.0f;
- nextWalkFrame();
- }
- }
- else
- {
- resetFrames();
- tx = 0.0f;
- ty = 0.0f;
- }
- }
- @Override
- public void renderTick(float lag)
- {
- if(ent.getHealth().wasHurt())
- {
- Shader.setColorEnabled(true);
- Shader.setMixColorEnabled(true);
- Shader.setMixColor(1.0f, 0.0f, 0.0f, 1.0f);
- }
- if(ent.getHealth().wasHealed())
- {
- Shader.setColorEnabled(true);
- Shader.setMixColorEnabled(true);
- Shader.setMixColor(0.0f, 1.0f, 0.0f, 1.0f);
- }
-
- HERO.bind();
- float x = Utils.interpolate(ent.getLastX(), ent.getX(), lag);
- float y = Utils.interpolate(ent.getLastY(), ent.getY(), lag);
- float m1;
- float m2;
- if(ent.getFace() == Face.LEFT)
- {
- m1 = w;
- m2 = 0.0f;
- }
- else
- {
- m1 = 0.0f;
- m2 = w;
- }
- Shader.getTextureRenderer().drawRectangle(
- x + ox + m1, y + oy,
- x + ox + m2, y + oy + h,
- tx, ty,
- tx + (w / SIZE), ty + (h / SIZE));
-
- if(ent.getHealth().wasHurt() || ent.getHealth().wasHealed())
- {
- Shader.setColorEnabled(false);
- Shader.setMixColorEnabled(false);
- }
- }
- }
|