package com.lyeeedar.Roguelike3D.Graphics.Models.RiggedModels; import com.lyeeedar.Roguelike3D.Game.Actor.GameActor; public class RiggedOneHandedSwing extends RiggedModelBehaviour { private static final long serialVersionUID = -3210144783845821123L; final float weight; final float attack_speed; public RiggedOneHandedSwing(RiggedModelNode node, float weight, float attack_speed) { super(node); this.weight = weight/10; this.attack_speed = 100+(attack_speed/10); } int stage = 0; float angle = 45; float speed = 0; @Override public void update(float delta) { if (stage == 0) { angle = 45; } else if (stage == 4) { if (angle < 45) { angle += delta*attack_speed; if (angle > 45) stage = 0; } else { angle -= delta*(attack_speed+weight); if (angle < 45) stage = 0; } } else if (stage == 1) { angle += delta*attack_speed; if (angle > 90) angle = 90; } else if (stage == 2) { speed += delta*(attack_speed+weight); angle -= speed; if (angle < -45) { node.setCollideMode(false, true); stage++; } } else if (stage == 3) { angle += delta*attack_speed; if (angle > 45) stage = 0; } node.offsetRotation.idt().rotate(0, 1, 0, 180).rotate(1, 0, sign, -25).rotate(0, 0, 1, 90).rotate(0, 1, 0, angle); node.offsetPosition.idt().translate(0, angle/45, 0); } @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) { } }