public void drawEffect(ConsoleUserInterface ui, ConsoleSystemInterface si) { UserInterface.getUI().getPlayer().see(); UserInterface.getUI().refresh(); Position oldPoint = effectLine.next(); int oldColor = -1; char oldChar = ' '; for (int i = 0; i < depth; i++) { Position next = effectLine.next(); int direction = solveDirection(oldPoint, next); if (i != 0) { Position relative = Position.subs(oldPoint, ui.getPlayer().getPosition()); Position toPrint = Position.add(ui.PC_POS, relative); si.safeprint(toPrint.x(), toPrint.y(), oldChar, oldColor); } oldPoint = new Position(next); char icon = ' '; switch (direction) { case Action.UPLEFT: icon = missile.charAt(0); break; case Action.UP: icon = missile.charAt(1); break; case Action.UPRIGHT: icon = missile.charAt(2); break; case Action.LEFT: icon = missile.charAt(3); break; case Action.RIGHT: icon = missile.charAt(4); break; case Action.DOWNLEFT: icon = missile.charAt(5); break; case Action.DOWN: icon = missile.charAt(6); break; case Action.DOWNRIGHT: icon = missile.charAt(7); break; } Position relative = Position.subs(next, ui.getPlayer().getPosition()); Position toPrint = Position.add(ui.PC_POS, relative); if (!ui.insideViewPort(toPrint)) break; oldChar = si.peekChar(toPrint.x(), toPrint.y()); oldColor = si.peekColor(toPrint.x(), toPrint.y()); si.safeprint(toPrint.x(), toPrint.y(), icon, misColor); animationPause(); } }
private int solveDirection(Position old, Position newP) { if (newP.x() == old.x()) { if (newP.y() > old.y()) { return Action.DOWN; } else { return Action.UP; } } else if (newP.y() == old.y()) { if (newP.x() > old.x()) { return Action.RIGHT; } else { return Action.LEFT; } } else if (newP.x() < old.x()) { if (newP.y() > old.y()) return Action.DOWNLEFT; else return Action.UPLEFT; } else { if (newP.y() > old.y()) return Action.DOWNRIGHT; else return Action.UPRIGHT; } }