From: Kimmo R. <ki...@us...> - 2012-11-24 20:31:44
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/client/gui/j2d/entity In directory vz-cvs-4.sog:/tmp/cvs-serv17684/src/games/stendhal/client/gui/j2d/entity Modified Files: Entity2DView.java Log Message: Ensure correct reading of changed entity information Index: Entity2DView.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/client/gui/j2d/entity/Entity2DView.java,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** Entity2DView.java 1 Sep 2012 20:17:54 -0000 1.63 --- Entity2DView.java 24 Nov 2012 20:31:41 -0000 1.64 *************** *** 67,86 **** * Model values affecting animation. */ ! protected boolean animatedChanged; /** * The position value changed. */ ! protected boolean positionChanged; /** * Model values affecting visual representation changed. */ ! protected boolean representationChanged; /** * The visibility value changed. */ ! protected boolean visibilityChanged; /** --- 67,86 ---- * Model values affecting animation. */ ! protected volatile boolean animatedChanged; /** * The position value changed. */ ! private volatile boolean positionChanged; /** * Model values affecting visual representation changed. */ ! protected volatile boolean representationChanged; /** * The visibility value changed. */ ! protected volatile boolean visibilityChanged; /** *************** *** 127,130 **** --- 127,131 ---- private volatile boolean released = false; + @Override public void initialize(final T entity) { if (entity == null) { *************** *** 303,306 **** --- 304,308 ---- * The graphics to drawn on. */ + @Override public void draw(final Graphics2D g2d) { applyChanges(); *************** *** 402,405 **** --- 404,408 ---- * The graphics to drawn on. */ + @Override public void drawTop(final Graphics2D g2d) { final Rectangle r = getArea(); *************** *** 447,450 **** --- 450,454 ---- * @return The area this draws in. */ + @Override public Rectangle getArea() { return new Rectangle(getX() + getXOffset(), getY() + getYOffset(), *************** *** 581,584 **** --- 585,589 ---- * @return The drawing index. */ + @Override public int getZIndex() { return 10000; *************** *** 640,643 **** --- 645,649 ---- * <code>true</code> if contained. */ + @Override public void setContained(final boolean contained) { this.contained = contained; *************** *** 650,653 **** --- 656,660 ---- * The inspector. */ + @Override public void setInspector(final Inspector inspector) { } *************** *** 686,708 **** return; } if (representationChanged) { - buildRepresentation(entity); representationChanged = false; } if (positionChanged) { x = (int) (IGameScreen.SIZE_UNIT_PIXELS * entity.getX()); y = (int) (IGameScreen.SIZE_UNIT_PIXELS * entity.getY()); - positionChanged = false; } if (visibilityChanged) { - entityComposite = getComposite(); visibilityChanged = false; } if (animatedChanged) { - setAnimation(getSprite()); animatedChanged = false; } } --- 693,721 ---- return; } + /* + * The flags are reseted *before* reading the relevant data to ensure + * that we get up to date data from the game loop thread. (So that if + * the data changes during we are reading it, the flags will force + * reread at the next draw). + */ if (representationChanged) { representationChanged = false; + buildRepresentation(entity); } if (positionChanged) { + positionChanged = false; x = (int) (IGameScreen.SIZE_UNIT_PIXELS * entity.getX()); y = (int) (IGameScreen.SIZE_UNIT_PIXELS * entity.getY()); } if (visibilityChanged) { visibilityChanged = false; + entityComposite = getComposite(); } if (animatedChanged) { animatedChanged = false; + setAnimation(getSprite()); } } *************** *** 721,724 **** --- 734,738 ---- * The property identifier. */ + @Override public void entityChanged(final T entity, final Object property) { changed = true; *************** *** 744,747 **** --- 758,762 ---- * @return The list of actions. */ + @Override public final String[] getActions() { final List<String> list = new ArrayList<String>(); *************** *** 770,773 **** --- 785,789 ---- * @return The view's entity. */ + @Override public T getEntity() { return entity; *************** *** 779,782 **** --- 795,799 ---- * @return <code>true</code> if the entity is movable. */ + @Override public boolean isMovable() { return false; *************** *** 786,789 **** --- 803,807 ---- * Perform the default action. */ + @Override public void onAction() { onAction(ActionType.LOOK); *************** *** 796,799 **** --- 814,818 ---- * @return <code>true</code> if the action was performed, <code>false</code> if nothing was done */ + @Override public boolean onHarmlessAction() { onAction(); *************** *** 807,810 **** --- 826,830 ---- * The action. */ + @Override public void onAction(final ActionType at) { IEntity entity = this.entity; *************** *** 841,844 **** --- 861,865 ---- * @return true if the player can interact with it, false otherwise. */ + @Override public boolean isInteractive() { return true; *************** *** 849,852 **** --- 870,874 ---- * called. */ + @Override public void release() { entity.removeChangeListener(this); *************** *** 874,877 **** --- 896,900 ---- * @return StendhalCursor */ + @Override public StendhalCursor getCursor() { String cursorName = entity.getCursor(); |