package org.open2jam.render.entities; import org.open2jam.parsers.Event; import org.open2jam.render.Sprite; import org.open2jam.render.SpriteList; public class LongNoteEntity extends NoteEntity { private final SpriteList body_frames; private Sprite body_sprite; private final SpriteList tail_frames; private Sprite tail_sprite; private final SpriteList normal_frames; private Sprite normal_sprite; /** the size of the long note, this is constant once defined end_time */ private Double end_dist = null; private Double end_time = null; public LongNoteEntity(SpriteList head_frames, SpriteList body_frames, SpriteList tail_frames, SpriteList normal_frames, Event.Channel ch, double x, double y) { super(head_frames,ch, x,y); this.body_frames = body_frames; this.body_sprite = body_frames.get(0); this.tail_frames = tail_frames; this.tail_sprite = tail_frames.get(0); this.normal_frames = normal_frames; this.normal_sprite = normal_frames.get(0); height = 0; } private LongNoteEntity(LongNoteEntity org) { super(org); this.body_frames = org.body_frames; this.body_sprite = org.body_sprite; this.tail_frames = org.tail_frames; this.tail_sprite = org.tail_sprite; this.normal_frames = org.normal_frames; this.normal_sprite = org.normal_sprite; this.end_time = org.end_time; } public void setEndTime(double time){ this.end_time = time; } public void setEndDistance(double note_size){ end_dist = note_size; } public double getEndTime() { return end_time == null ? -10 : end_time; } @Override public double getStartY() { return y + sprite.getHeight(); } @Override public double getY() { if(end_time != null) return y - end_dist; else return -10; } @Override public double getTimeToJudge() { if (state == State.NOT_JUDGED || state == State.LN_HEAD_JUDGE) return time_to_hit; if (end_time != null) return end_time; return Double.MAX_VALUE; } @Override public void setAlpha(float alpha) { sprite.setAlpha(alpha); body_sprite.setAlpha(alpha); tail_sprite.setAlpha(alpha); } @Override public void move(double delta) { super.move(delta); body_sprite = body_frames.get((int)sub_frame); tail_sprite = tail_frames.get((int)sub_frame); } @Override public void draw() { double end = getY() - normal_sprite.getHeight(); double local_y = y; float sy = (float) ((local_y - end) / body_sprite.getHeight()); body_sprite.draw(x, end, body_sprite.getScaleX(), sy); //the middle tail_sprite.draw(x, local_y-tail_sprite.getHeight()); // the bottom sprite.draw (x, end); // the top } @Override public LongNoteEntity copy(){ return new LongNoteEntity(this); } }