package com.lyeeedar.Roguelike3D.Graphics.Models.RiggedModels; import com.lyeeedar.Roguelike3D.Game.Actor.GameActor; public class RiggedOneHandedStab extends RiggedModelBehaviour { /** * */ private static final long serialVersionUID = -6507070860186900113L; final float weight; final float attack_speed; public RiggedOneHandedStab(RiggedModelNode node, float weight, float attack_speed) { super(node); this.weight = weight*5; this.attack_speed = attack_speed; } int stage = 0; float tilt = 55; float pos = 0; float speed = 0; @Override public void update(float delta) { if (stage == 0) { tilt = 55; pos = 0; } else if (stage == 4) { tilt += delta*attack_speed; if (tilt > 55) tilt = 55; if (pos < 0) { pos += delta*attack_speed; if (pos > 0) { pos = 0; if (tilt == 55) stage = 0; } } else { pos -= delta*attack_speed; if (pos < 0) { pos = 0; if (tilt == 55) stage = 0; } } } else if (stage == 1) { tilt -= delta*attack_speed; pos += delta*(attack_speed); if (tilt < 0) tilt = 0; if (pos > 45) pos = 45; } else if (stage == 2) { tilt -= delta*attack_speed; if (tilt < 0) tilt = 0; speed += delta*(attack_speed+weight); pos -= speed; if (pos < -45) { node.setCollideMode(false, true); stage++; } } else if (stage == 3) { tilt += delta*attack_speed; if (tilt > 55) tilt = 55; pos += delta*attack_speed; if (pos > 0) { pos = 0; stage = 0; } } node.offsetRotation.idt().rotate(0, 1, 0, 180).rotate(1, 0, sign, -tilt).rotate(0, 0, 1, 90); node.offsetPosition.idt().translate(0, 0.5f, pos/45); } @Override public void held() { if (stage == 0) { stage = 1; } } @Override public void released() { if (stage == 1) { node.setCollideMode(true, true); speed = 0; stage = 2; } } @Override public void cancel() { if (stage != 0 || stage != 4) { node.setCollideMode(false, true); stage = 4; } } int sign; @Override protected void equipped(GameActor holder, int side) { if (side == 1) sign = 1; else if (side == 2) sign = -1; } @Override public void proccessCollideMode(boolean mode) { } }