package com.droidquest; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Vector; import com.droidquest.decorations.Arrow; import com.droidquest.decorations.Graphix; import com.droidquest.decorations.TextBox; import com.droidquest.items.Item; import com.droidquest.levels.Level; import com.droidquest.materials.Material; public class Room implements Serializable, Cloneable { public transient static Level level; public transient Room upRoom; public transient Room downRoom; public transient Room rightRoom; public transient Room leftRoom; public transient Item portalItem = null; public int[][] RoomArray = { // Array of image references {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} }; public transient Material[][] MaterialArray = new Material[12][20]; public Vector textBoxes = new Vector(); public Vector wires = new Vector(); public Vector graphix = new Vector(); public Vector arrows = new Vector(); public boolean editable; public Room() { upRoom=this; downRoom=this; rightRoom=this; leftRoom=this; editable=false; } public void writeRef(ObjectOutputStream s) throws IOException { s.writeInt(level.rooms.indexOf(upRoom)); s.writeInt(level.rooms.indexOf(downRoom)); s.writeInt(level.rooms.indexOf(rightRoom)); s.writeInt(level.rooms.indexOf(leftRoom)); s.writeInt(level.items.indexOf(portalItem)); s.writeInt(wires.size()); for (int a=0; a= textBox.textString.lastIndexOf(" ")) {indexTo = textBox.textString.length();} else {indexTo = textBox.textString.indexOf(" ",indexFrom+1);} nextWord = textBox.textString.substring(indexFrom, indexTo); if (nextWord.startsWith(" ")) { nextWord = nextWord.substring(1,nextWord.length()); } if (!nextWord.endsWith(" ")) { nextWord = nextWord + " "; } if (nextWord.startsWith("{BIG}")) { g.setFont(rd.bigFont); } else if (nextWord.startsWith("{SML}")) { g.setFont(rd.smallFont); } else if (nextWord.startsWith("{BSP}")) { FontMetrics fm = g.getFontMetrics(); advX = fm.stringWidth(" "); cursX-=advX; } // if (nextWord fits "{rrr,ggg,bbb} " else if (nextWord.startsWith("{") && nextWord.endsWith("} ") && nextWord.length()==14) { // extract rrr,ggg,bbb Integer rr = new Integer(nextWord.substring(1,4)); Integer gg = new Integer(nextWord.substring(5,8)); Integer bb = new Integer(nextWord.substring(9,12)); g.setColor(new Color(rr.intValue(), gg.intValue(), bb.intValue())); } else { FontMetrics fm = g.getFontMetrics(); if (fm.getAscent() > advY) {advY = fm.getAscent() ;} advX = fm.stringWidth(nextWord); if (cursX+advX > textBox.width + textBox.x) { cursX=textBox.x; cursY+=advY; advY=fm.getAscent(); } g.drawString(nextWord, cursX, cursY); cursX+=advX; if (cursX+advX > textBox.width + textBox.x) { cursX=textBox.x; cursY+=advY; advY=fm.getAscent(); } } indexFrom = indexTo; } while (indexFrom < textBox.textString.length()); } } public void DrawGraphix(Graphics g, RoomDisplay rd) { for (int a = 0; a< graphix.size(); a++) { Graphix grx = (Graphix) graphix.elementAt(a); grx.Draw(g,rd); } } public void DrawArrows(Graphics g) { for (int a = 0; a< arrows.size(); a++) ((Arrow) arrows.elementAt(a)).Draw(g); } public Room getUpRoom(Item item) { return upRoom; } public Room getDownRoom(Item item) { return downRoom; } public Room getLeftRoom(Item item) { return leftRoom; } public Room getRightRoom(Item item) { return rightRoom; } public Wire FindWire(int wireIndex) { if (wireIndex==-1) return null; if (wireIndex>=wires.size()) return null; return (Wire) wires.elementAt(wireIndex); } public Object clone() { Object newObject = null; try { newObject = super.clone(); } catch (CloneNotSupportedException e) {} return newObject; } public void Erase() { upRoom = null; downRoom = null; rightRoom = null; leftRoom = null; portalItem = null; arrows.clear(); graphix.clear(); for (int a=0; a< wires.size(); a++) { Wire wire = (Wire) wires.elementAt(a); wire.fromPort = null; wire.toPort = null; wire.inPort = null; wire.outPort = null; } wires.clear(); } }