/* * JavaXYQ Source Code * by kylixs * at 2009-11-27 * please visit http://javaxyq.googlecode.com * or mail to kylixs@qq.com */ package ui; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.List; import com.javaxyq.core.SceneCanvas; import com.javaxyq.core.SpriteFactory; import com.javaxyq.event.PanelEvent; import com.javaxyq.event.PanelHandler; import com.javaxyq.ui.Label; import com.javaxyq.ui.UIHelper; import com.javaxyq.widget.Animation; import com.javaxyq.widget.Player; import com.javaxyq.widget.Sprite; import com.javaxyq.widget.SpriteImage; /** * ����С��ͼ�Ի���ű� * @author dewitt * @date 2009-11-27 create */ public class scene_map extends PanelHandler implements MouseListener{ private int marginX = 18; private int marginY = 12; private Animation animPoint = SpriteFactory.loadAnimation("wzife/scene/point.tcp"); private Animation animWpoint = SpriteFactory.loadAnimation("wzife/scene/wpoint.tcp"); private Animation animTarget = SpriteFactory.loadAnimation("wzife/scene/target.tcp"); private Label lblPoint = new Label(animPoint); private Label lblTarget = new Label(animTarget); private List<Label> steps = new ArrayList<Label>(); /** ����ͼ��� */ private int navWidth; /** ����ͼ�߶� */ private int navHeight; /** ��С���� */ private double rateX; private double rateY; private SceneCanvas canvas; public void initial(PanelEvent evt) { super.initial(evt); this.canvas = (SceneCanvas) super.canvas; String path = canvas.getMap().getConfig().getPath(); path = path.replace(".map",".tcp").replace("scene/","smap/"); Sprite sprite = SpriteFactory.loadSprite(path); panel.setBgImage(new SpriteImage(sprite)); panel.setSize(sprite.getWidth(),sprite.getHeight()); int x = (640-panel.getWidth())/2; int y = (480 - panel.getHeight())/2; panel.setLocation(x, y); panel.remove(lblPoint); panel.remove(lblTarget); navWidth = panel.getWidth()-2*marginX; navHeight = panel.getHeight() - 2*marginY; rateX = 1.0*navWidth /canvas.getSceneWidth(); rateY = 1.0*navHeight /canvas.getSceneHeight(); UIHelper.removeAllMouseListeners(panel); panel.addMouseListener(this); setAutoUpdate(true); } @Override synchronized public void update(PanelEvent evt) { Player player = context.getPlayer(); Point playerLoc = player.getSceneLocation(); Point p0 = sceneToLocal(playerLoc); //FIXME �޸���֡ƫ��λ������ p0.translate(-animPoint.getRefPixelX(),-animPoint.getRefPixelY()); lblPoint.setLocation(p0); panel.add(lblPoint); //�Ƴ�·�ߵĵ� //TODO �����˸���� for (Label l : steps) { panel.remove(l); } List<Point> path = player.getPath(); if(path!=null && path.size()>1) { steps.clear(); Point targetPoint = path.get(path.size()-1); Point p = sceneToLocal(targetPoint); p.translate(-animTarget.getRefPixelX(),-animTarget.getRefPixelY()); lblTarget.setLocation(p); panel.add(lblTarget); for(int i=1;i<path.size()-2;i+=5) { Label lblWpoint = new Label(animWpoint); lblWpoint.setLocation(sceneToLocal(path.get(i))); steps.add(lblWpoint); panel.add(lblWpoint); } }else if(!steps.isEmpty()){//����ƶ� steps.clear(); panel.remove(lblTarget); panel.close(); } } private Point sceneToLocal(Point p) { return new Point(marginX+(int)(p.x*rateX), marginY+navHeight-(int)(p.y*rateY)); } private Point localToScene(Point p) { p.translate(-marginX,-marginY); return new Point((int)(p.x/rateX),(int)((navHeight-p.y)/rateY)); } @Override public void mouseClicked(MouseEvent e) { Point target = localToScene(e.getPoint()); canvas.walkTo(target.x,target.y); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } }