diff options
| author | Starla Insigna <hatkirby@fourisland.com> | 2009-02-02 18:05:11 -0500 |
|---|---|---|
| committer | Starla Insigna <hatkirby@fourisland.com> | 2009-02-02 18:05:11 -0500 |
| commit | d3fce19421fa2db6aece07aa396a1a9c48c61fd9 (patch) | |
| tree | 0a2af9b27120ad6c29a7231f1e2d5b9880d14a71 | |
| parent | f2738dc2e06f172a6db0822d4f94ccdcd6b52da8 (diff) | |
| download | fourpuzzle-d3fce19421fa2db6aece07aa396a1a9c48c61fd9.tar.gz fourpuzzle-d3fce19421fa2db6aece07aa396a1a9c48c61fd9.tar.bz2 fourpuzzle-d3fce19421fa2db6aece07aa396a1a9c48c61fd9.zip | |
Added tiled ChipSet support
Replaced previous chipset management (manual via a Java class) with "tiled" ChipSets. However, this support will be removed once a proper map editor/chipset editor is created for FourPuzzle.
| -rw-r--r-- | src/com/fourisland/fourpuzzle/PuzzleApplication.java | 2 | ||||
| -rw-r--r-- | src/com/fourisland/fourpuzzle/gamestate/mapview/ChipSet.java | 129 |
2 files changed, 106 insertions, 25 deletions
| diff --git a/src/com/fourisland/fourpuzzle/PuzzleApplication.java b/src/com/fourisland/fourpuzzle/PuzzleApplication.java index 0b0e0cb..1c1dde2 100644 --- a/src/com/fourisland/fourpuzzle/PuzzleApplication.java +++ b/src/com/fourisland/fourpuzzle/PuzzleApplication.java | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | package com.fourisland.fourpuzzle; | 5 | package com.fourisland.fourpuzzle; |
| 6 | 6 | ||
| 7 | import com.fourisland.fourpuzzle.gamestate.TitleScreenGameState; | 7 | import com.fourisland.fourpuzzle.gamestate.TitleScreenGameState; |
| 8 | import com.fourisland.fourpuzzle.gamestate.mapview.ChipSet; | ||
| 8 | import java.awt.GraphicsEnvironment; | 9 | import java.awt.GraphicsEnvironment; |
| 9 | import java.awt.event.KeyAdapter; | 10 | import java.awt.event.KeyAdapter; |
| 10 | import java.awt.event.KeyEvent; | 11 | import java.awt.event.KeyEvent; |
| @@ -104,6 +105,7 @@ public class PuzzleApplication extends Application { | |||
| 104 | public void run() { | 105 | public void run() { |
| 105 | try { | 106 | try { |
| 106 | Audio.init(); | 107 | Audio.init(); |
| 108 | ChipSet.initalize(); | ||
| 107 | Game.setGameState(new TitleScreenGameState()); | 109 | Game.setGameState(new TitleScreenGameState()); |
| 108 | 110 | ||
| 109 | long iTickCount = System.currentTimeMillis(); | 111 | long iTickCount = System.currentTimeMillis(); |
| diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/ChipSet.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/ChipSet.java index 7ebb4eb..4fac1c0 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/ChipSet.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/ChipSet.java | |||
| @@ -5,56 +5,135 @@ | |||
| 5 | 5 | ||
| 6 | package com.fourisland.fourpuzzle.gamestate.mapview; | 6 | package com.fourisland.fourpuzzle.gamestate.mapview; |
| 7 | 7 | ||
| 8 | import com.fourisland.fourpuzzle.Layer; | ||
| 8 | import com.fourisland.fourpuzzle.PuzzleApplication; | 9 | import com.fourisland.fourpuzzle.PuzzleApplication; |
| 9 | import com.fourisland.fourpuzzle.util.ObjectLoader; | 10 | import com.fourisland.fourpuzzle.util.ObjectLoader; |
| 10 | import com.fourisland.fourpuzzle.util.ResourceNotFoundException; | ||
| 11 | import java.awt.image.BufferedImage; | 11 | import java.awt.image.BufferedImage; |
| 12 | import java.io.File; | ||
| 13 | import java.io.IOException; | ||
| 14 | import java.net.URL; | ||
| 12 | import java.util.HashMap; | 15 | import java.util.HashMap; |
| 13 | import java.util.logging.Level; | 16 | import java.util.logging.Level; |
| 14 | import java.util.logging.Logger; | 17 | import java.util.logging.Logger; |
| 18 | import javax.xml.parsers.ParserConfigurationException; | ||
| 19 | import javax.xml.parsers.SAXParserFactory; | ||
| 20 | import org.jdesktop.application.ResourceMap; | ||
| 21 | import org.xml.sax.Attributes; | ||
| 22 | import org.xml.sax.SAXException; | ||
| 23 | import org.xml.sax.helpers.DefaultHandler; | ||
| 15 | 24 | ||
| 16 | /** | 25 | /** |
| 17 | * | 26 | * |
| 18 | * @author hatkirby | 27 | * @author hatkirby |
| 19 | */ | 28 | */ |
| 20 | public abstract class ChipSet { | 29 | public class ChipSet { |
| 21 | 30 | ||
| 22 | public abstract void initalize(); | 31 | private ChipSet() {} |
| 23 | 32 | ||
| 24 | private BufferedImage chipSetImage; | 33 | private BufferedImage chipSetImage; |
| 25 | public BufferedImage getImage(int offset) | 34 | public BufferedImage getImage(int offset) |
| 26 | { | 35 | { |
| 27 | int sx = (offset % 8) * 16; | 36 | int sx = (offset % 30) * 16; |
| 28 | int sy = (offset / 8) * 16; | 37 | int sy = (offset / 30) * 16; |
| 29 | 38 | ||
| 30 | return chipSetImage.getSubimage(sx, sy, 16, 16); | 39 | return chipSetImage.getSubimage(sx, sy, 16, 16); |
| 31 | } | 40 | } |
| 32 | 41 | ||
| 33 | public static ChipSet getChipSet(String chipSet) | 42 | private HashMap<Integer,ChipSetData> chipSetData = new HashMap<Integer,ChipSetData>(); //162 |
| 43 | public HashMap<Integer,ChipSetData> getChipSetData() | ||
| 34 | { | 44 | { |
| 35 | try { | 45 | return chipSetData; |
| 36 | Class chipSetClass = Class.forName(PuzzleApplication.INSTANCE.getGamePackage() + ".gamedata.chipset." + chipSet); | 46 | } |
| 37 | Object chipSetObject = chipSetClass.newInstance(); | ||
| 38 | ChipSet temp = (ChipSet) chipSetObject; | ||
| 39 | temp.initalize(); | ||
| 40 | temp.chipSetImage = ObjectLoader.getImage("ChipSet", chipSet); | ||
| 41 | 47 | ||
| 42 | return temp; | 48 | public static void initalize() |
| 43 | } catch (InstantiationException ex) { | 49 | { |
| 44 | Logger.getLogger(ChipSet.class.getName()).log(Level.SEVERE, null, ex); | 50 | ResourceMap rm = PuzzleApplication.INSTANCE.getContext().getResourceManager().getResourceMap(); |
| 45 | } catch (IllegalAccessException ex) { | 51 | File folder = new File(new File(rm.getResourcesDir()).getParent() + "/gamedata/chipset/"); |
| 46 | Logger.getLogger(ChipSet.class.getName()).log(Level.SEVERE, null, ex); | 52 | URL path = rm.getClassLoader().getResource(folder.toString()); |
| 47 | } catch (ClassNotFoundException ex) { | 53 | File[] files = new File(path.getPath().replace("%20", " ")).listFiles(); |
| 48 | throw new ResourceNotFoundException("ChipSetData", chipSet); | 54 | for (File cs : files) |
| 55 | { | ||
| 56 | try { | ||
| 57 | SAXParserFactory.newInstance().newSAXParser().parse(cs, new ChipSetDefaultHandler()); | ||
| 58 | } catch (SAXException ex) { | ||
| 59 | Logger.getLogger(ChipSet.class.getName()).log(Level.SEVERE, null, ex); | ||
| 60 | } catch (IOException ex) { | ||
| 61 | Logger.getLogger(ChipSet.class.getName()).log(Level.SEVERE, null, ex); | ||
| 62 | } catch (ParserConfigurationException ex) { | ||
| 63 | Logger.getLogger(ChipSet.class.getName()).log(Level.SEVERE, null, ex); | ||
| 64 | } | ||
| 49 | } | 65 | } |
| 66 | } | ||
| 67 | |||
| 68 | public static void initalize(String name, int trans, HashMap<Integer, ChipSetData> lower) | ||
| 69 | { | ||
| 70 | ChipSet temp = new ChipSet(); | ||
| 71 | temp.chipSetData = lower; | ||
| 72 | temp.chipSetImage = ObjectLoader.getImage("ChipSet", name); | ||
| 50 | 73 | ||
| 51 | return null; | 74 | chipSets.put(name, temp); |
| 52 | } | 75 | } |
| 53 | 76 | ||
| 54 | private HashMap<Integer,ChipSetData> chipSetData = new HashMap<Integer,ChipSetData>(); //162 | 77 | private static HashMap<String, ChipSet> chipSets = new HashMap<String, ChipSet>(); |
| 55 | public HashMap<Integer,ChipSetData> getChipSetData() | 78 | public static ChipSet getChipSet(String name) |
| 56 | { | 79 | { |
| 57 | return chipSetData; | 80 | return chipSets.get(name); |
| 58 | } | 81 | } |
| 59 | 82 | ||
| 60 | } | 83 | } |
| 84 | |||
| 85 | class ChipSetDefaultHandler extends DefaultHandler { | ||
| 86 | |||
| 87 | public ChipSetDefaultHandler() { | ||
| 88 | } | ||
| 89 | |||
| 90 | private String name; | ||
| 91 | private int trans; | ||
| 92 | |||
| 93 | private int curTile; | ||
| 94 | private HashMap<Integer, ChipSetData> lower = new HashMap<Integer,ChipSetData>(); | ||
| 95 | |||
| 96 | private String terrain; | ||
| 97 | private Layer layer; | ||
| 98 | |||
| 99 | @Override | ||
| 100 | public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException | ||
| 101 | { | ||
| 102 | if (qName.equals("tileset")) | ||
| 103 | { | ||
| 104 | name = attributes.getValue("name"); | ||
| 105 | } else if (qName.equals("image")) | ||
| 106 | { | ||
| 107 | trans = Integer.decode("0x" + attributes.getValue("trans")); | ||
| 108 | } else if (qName.equals("tile")) | ||
| 109 | { | ||
| 110 | curTile = Integer.decode(attributes.getValue("id")); | ||
| 111 | lower.put(curTile, new ChipSetData("Grass", Layer.Below)); | ||
| 112 | } else if (qName.equals("property")) | ||
| 113 | { | ||
| 114 | if (attributes.getValue("name").equals("terrain")) | ||
| 115 | { | ||
| 116 | terrain = attributes.getValue("value"); | ||
| 117 | } else if (attributes.getValue("name").equals("layer")) | ||
| 118 | { | ||
| 119 | layer = Layer.valueOf(attributes.getValue("value")); | ||
| 120 | } | ||
| 121 | } | ||
| 122 | } | ||
| 123 | |||
| 124 | @Override | ||
| 125 | public void endElement(String uri, String localName, String qName) throws SAXException | ||
| 126 | { | ||
| 127 | if (qName.equals("tile")) | ||
| 128 | { | ||
| 129 | lower.put(curTile, new ChipSetData(terrain, layer)); | ||
| 130 | } | ||
| 131 | } | ||
| 132 | |||
| 133 | @Override | ||
| 134 | public void endDocument() throws SAXException | ||
| 135 | { | ||
| 136 | ChipSet.initalize(name, trans, lower); | ||
| 137 | } | ||
| 138 | |||
| 139 | } \ No newline at end of file | ||
