// // Nenya library - tools for developing networked games // Copyright (C) 2002-2012 Three Rings Design, Inc., All Rights Reserved // https://github.com/threerings/nenya // // This library is free software; you can redistribute it and/or modify it // under the terms of the GNU Lesser General Public License as published // by the Free Software Foundation; either version 2.1 of the License, or // (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA package com.threerings.cast; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.JFrame; import javax.swing.JPanel; import com.samskivert.swing.util.SwingUtil; import com.threerings.util.DirectionCodes; import com.threerings.util.DirectionUtil; import com.threerings.resource.ResourceManager; import com.threerings.media.image.ClientImageManager; import com.threerings.cast.bundle.BundledComponentRepository; /** * Displays a character sprite in all of the various orientations. */ public class CharSpriteViz extends JPanel implements DirectionCodes, MouseMotionListener { public CharSpriteViz ( CharacterManager charmgr, CharacterComponent ccomp, String action) { // get a handle on our sprite _sprite = charmgr.getCharacter( new CharacterDescriptor( new int[] { ccomp.componentId }, null)); // put the sprite in the appropriate action mode _sprite.setRestingAction(action); _sprite.setFollowingPathAction(action); _sprite.setActionSequence(action); addMouseMotionListener(this); } public void mouseDragged (MouseEvent event) { } public void mouseMoved (MouseEvent event) { int orient = DirectionUtil.getFineDirection( getWidth()/2, getHeight()/2, event.getX(), event.getY()); if (_orient != orient) { System.out.println("Switching to " + DirectionUtil.toShortString(orient) + "."); _orient = orient; repaint(); } } @Override public void paintComponent (Graphics g) { super.paintComponent(g); int width = getWidth(), height = getHeight(); int cx = width/2, cy = height/2; g.setColor(Color.darkGray); g.drawLine(cx, cy, 0, cy); g.drawLine(cx, cy, 0, cy/2); g.drawLine(cx, cy, 0, 0); g.drawLine(cx, cy, cx/2, 0); g.drawLine(cx, cy, cx, 0); g.drawLine(cx, cy, 3*width/4, 0); g.drawLine(cx, cy, width, 0); g.drawLine(cx, cy, width, cy/2); g.drawLine(cx, cy, width, cy); g.drawLine(cx, cy, width, 3*height/4); g.drawLine(cx, cy, width, height); g.drawLine(cx, cy, 3*width/4, height); g.drawLine(cx, cy, cx, height); g.drawLine(cx, cy, cx/2, height); g.drawLine(cx, cy, 0, height); g.drawLine(cx, cy, 0, 3*height/4); _sprite.setLocation(cx, cy); _sprite.setOrientation(_orient); _sprite.paint((Graphics2D)g); } public static void main (String[] args) { if (args.length < 3) { System.err.println("Usage: CharSpriteViz cclass cname action"); System.err.println(" (eg. CharSpriteViz navsail smsloop sailing"); System.exit(-1); } JFrame frame = new JFrame("CharSpriteViz"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try { ResourceManager rmgr = new ResourceManager("rsrc"); rmgr.initBundles( null, "config/resource/manager.properties", null); ClientImageManager imgr = new ClientImageManager(rmgr, frame); ComponentRepository crepo = new BundledComponentRepository(rmgr, imgr, "components"); CharacterManager charmgr = new CharacterManager(imgr, crepo); CharacterComponent ccomp = crepo.getComponent(args[0], args[1]); frame.getContentPane().add( new CharSpriteViz(charmgr, ccomp, args[2]), BorderLayout.CENTER); frame.setSize(200, 200); SwingUtil.centerWindow(frame); frame.setVisible(true); } catch (NoSuchComponentException nsce) { System.err.println("No component with specified class " + "and name [cclass=" + args[0] + ", cname=" + args[1] + "]."); System.exit(-1); } catch (Exception e) { e.printStackTrace(System.err); System.exit(-1); } } protected CharacterSprite _sprite; protected int _orient = NORTH; }