package ui; import java.awt.Color; import java.awt.Component; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.jexl2.JexlContext; import org.apache.commons.jexl2.JexlEngine; import org.apache.commons.jexl2.MapContext; import org.apache.commons.jexl2.UnifiedJEXL; import org.apache.commons.jexl2.UnifiedJEXL.Expression; import com.javaxyq.event.ActionEvent; import com.javaxyq.event.PanelEvent; import com.javaxyq.event.PanelHandler; import com.javaxyq.model.PlayerVO; import com.javaxyq.ui.Button; import com.javaxyq.ui.Label; import com.javaxyq.ui.Panel; import com.javaxyq.util.MP3Player; import com.javaxyq.util.StringUtils; import com.javaxyq.widget.Player; /** * ����״̬���� * @author dewitt * @date 2009-11-26 create */ public class player_status extends PanelHandler{ private Expression expression; public void initial(PanelEvent evt) { super.initial(evt); System.out.println("initial��player_status "); this.updateLabels(panel); this.setAutoUpdate(true); } public void dispose(PanelEvent evt) { super.dispose(evt); System.out.println("dispose: player_status "); } public void assignPoints(ActionEvent evt) { Button button = (Button) evt.getSource(); Panel panel = (Panel) button.getParent(); Player player = context.getPlayer(); PlayerVO vo = player.getData(); Set<Entry<String, Integer>> entries = vo.assignPoints.entrySet(); for (Entry<String, Integer> entry : entries) { try { String key = entry.getKey(); Integer value = (Integer) PropertyUtils.getProperty(vo, key); value += entry.getValue(); PropertyUtils.setProperty(vo, key, value); entry.setValue(0); Button btn = (Button) panel.findCompByName("-"+key); btn.setEnabled(false); Label label = (Label) panel.findCompByName(key); label.setForeground(Color.BLACK); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } dataManager.recalcProperties(player.getData()); updateLabels(panel); } public void level_up(ActionEvent evt) { Player player = context.getPlayer(); PlayerVO vo = player.getData(); long levelExp = dataManager.getLevelExp(vo.level); if(vo.exp >= levelExp) { helper.prompt( "��ϲ�㣬������~~���Ͱɣ�", 2000); player.playEffect("level_up",false); MP3Player.play("sound/addon/level_up.mp3"); vo.level += 1; vo.physique += 1; vo.magic += 1; vo.strength += 1; vo.agility += 1; vo.durability += 1; vo.potentiality += 5; vo.exp -= levelExp; dataManager.recalcProperties(vo); Button button = (Button) evt.getSource(); Panel panel = (Panel) button.getParent(); updateLabels(panel); }else { //���鲻�� System.out.println("��ľ���û�ﵽ��������ľ���"); helper.prompt( "��ľ���û�ﵽ��������ľ���", 2000); //MP3Player.play() } } /** * �������Ե� * @param evt */ public void add_point(ActionEvent evt) { System.out.println("add point: "+evt); //ȡ���� , like 'add_point ����' String attr = evt.getArgumentAsString(0); Label label = (Label) panel.findCompByName(attr); PlayerVO vo = context.getPlayer().getData(); if(vo.potentiality>0) { vo.assignPoints.put(attr,vo.assignPoints.get(attr)+1); vo.potentiality -=1; label.setForeground(Color.RED); Button btn = (Button) panel.findCompByName("-"+attr); btn.setEnabled(true); } updateLabels(panel); } /** * �������Ե� * @param evt */ public void subtract_point(ActionEvent evt) { System.out.println("subtract point: " + evt); //ȡ���� , like 'add_point ����' String attr = evt.getArgumentAsString(1); Label label = (Label) panel.findCompByName(attr); PlayerVO vo = context.getPlayer().getData(); if(vo.assignPoints.get(attr)>0) { vo.assignPoints.put(attr,vo.assignPoints.get(attr)-1); vo.potentiality += 1; } if (vo.assignPoints.get(attr) == 0) { label.setForeground(Color.BLACK); Button btn = (Button) panel.findCompByName("-"+attr); btn.setEnabled(false); } updateLabels(panel); } public void openSkills(ActionEvent evt) { helper.showHideDialog("main_skill"); } public void changeTitle(ActionEvent evt) { System.out.println("��ν"); } private void updateLabels(Panel panel) { Component[] comps = panel.getComponents(); List<Label>labels = new ArrayList<Label>(); for (Component c : comps) { if (c instanceof Label) { labels.add((Label) c); } } if(expression == null) { try { List<String> vars = new ArrayList<String>(); for(Label label : labels) { String name = label.getName(); if(StringUtils.isNotBlank(name)) { vars.add(name+"#="+ label.getTextTpl()); } } String tpl = StringUtils.join(vars,"#;"); JexlEngine jexl = new JexlEngine(); UnifiedJEXL ujexl = new UnifiedJEXL(jexl); expression = ujexl.parse(tpl); } catch (Exception e) { System.out.println("����JEXL���ʽʧ��"); e.printStackTrace(); } } if(expression != null) { Map<String, Object> properties = dataManager.getProperties(context.getPlayer()); JexlContext jexlcontext = new MapContext(properties); String result = expression.evaluate(jexlcontext).toString(); String[] items = result.split("#;"); for (String item : items) { String[] values = item.split("#="); Label label = (Label) panel.findCompByName(values[0]); label.setText(values[1]); } } } }