|
From: <tre...@us...> - 2007-10-21 16:11:21
|
Revision: 524
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=524&view=rev
Author: trevorolio
Date: 2007-10-21 09:11:23 -0700 (Sun, 21 Oct 2007)
Log Message:
-----------
INCLUDES A NEW DB SCHEMA. Dump your old db and make clean.
For those who don't want to break out photoshop to get a new look, added the capability to select from a set of textures included in the body data jar.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyConfiguration.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DBodyData.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyConfigurationDocument.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-10-20 12:21:41 UTC (rev 523)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-10-21 16:11:23 UTC (rev 524)
@@ -164,11 +164,11 @@
BodyConfigurationDocument bodyConfDoc = null;
if (userDocs[i].getUsername().startsWith(WebConstants.GUEST_COOKIE_PREFIX)) {
System.out.println("Need to handle guest bodies correctly");
- bodyConfDoc = new BodyConfigurationDocument(0, userDocs[i].getUsername(), "Body", 1);
+ bodyConfDoc = new BodyConfigurationDocument(0, userDocs[i].getUsername(), "Body", 1, null);
} else {
bodyConfDoc = webClient.getBodyConfiguration(userDocs[i].getUsername(), userDocs[i].getBodyConfigurationID());
}
- BodyConfiguration bodyConfig = new BodyConfiguration(bodyConfDoc.getBodyConfigurationID(), bodyConfDoc.getDisplayName(), bodyConfDoc.getBodyDataID());
+ BodyConfiguration bodyConfig = new BodyConfiguration(bodyConfDoc);
Thing seatThing = null;
if (userDocs[i].getSeatThingID() != -1) {
seatThing = space.getThing(userDocs[i].getSeatThingID());
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2007-10-20 12:21:41 UTC (rev 523)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2007-10-21 16:11:23 UTC (rev 524)
@@ -504,7 +504,7 @@
}
public BodyConfigurationDocument createBodyConfiguration(String username, String displayName, long bodyDataID) throws IOException {
- BodyConfigurationDocument configDoc = new BodyConfigurationDocument(-1, username, displayName, bodyDataID);
+ BodyConfigurationDocument configDoc = new BodyConfigurationDocument(-1, username, displayName, bodyDataID, null);
return new BodyConfigurationDocument(wire.postAuthenticatedXML(descriptor.getBodyConfigurationsURI(username), configDoc.toString(), authenticator.getAuthCookie()));
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyConfiguration.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyConfiguration.java 2007-10-20 12:21:41 UTC (rev 523)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyConfiguration.java 2007-10-21 16:11:23 UTC (rev 524)
@@ -16,23 +16,26 @@
private long bodyDataID = -1;
+ private String baseTextureName = null; //try custom, then named texture (ignoring if null), then default
+
private HashMap settings = new HashMap();
public BodyConfiguration(BodyConfigurationDocument configDoc) {
- this(configDoc.getBodyConfigurationID(), configDoc.getDisplayName(), configDoc.getBodyDataID());
+ this(configDoc.getBodyConfigurationID(), configDoc.getDisplayName(), configDoc.getBodyDataID(), configDoc.getBaseTextureName());
BodySettingDocument[] settingDocs = configDoc.getBodySettingDocuments();
for (int i = 0; i < settingDocs.length; i++) {
addSetting(settingDocs[i].getSettingName(), settingDocs[i].getSetting());
}
}
- public BodyConfiguration(long bodyConfigurationID, String displayName, long bodyDataID) {
+ public BodyConfiguration(long bodyConfigurationID, String displayName, long bodyDataID, String baseTextureName) {
ArgumentUtils.assertNotNegative(bodyConfigurationID);
this.bodyConfigurationID = bodyConfigurationID;
ArgumentUtils.assertNotEmpty(displayName);
this.displayName = displayName;
ArgumentUtils.assertNotNegative(bodyDataID);
this.bodyDataID = bodyDataID;
+ this.baseTextureName = baseTextureName;
}
public void setUser(User user) {
@@ -86,4 +89,12 @@
public String[] getSettingNames() {
return (String[]) settings.keySet().toArray(new String[0]);
}
+
+ public String getBaseTextureName(){
+ return baseTextureName;
+ }
+
+ public void setBaseTextureName(String baseTextureName) {
+ this.baseTextureName = baseTextureName;
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DBodyData.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DBodyData.java 2007-10-20 12:21:41 UTC (rev 523)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DBodyData.java 2007-10-21 16:11:23 UTC (rev 524)
@@ -19,21 +19,25 @@
private SkinMap skinMap = null;
- private BufferedImage baseTexture = null;
+ private BaseTexture defaultBaseTexture = null;
+ private BaseTexture[] baseTextures = null;
+
private Bvh defaultAnimation = null;
private MorphDeltaMap[] morphDeltaMaps = null;
- public J3DBodyData(IndexedTriangleArray bodyGeometry, Bvh[] animations, SkinMap skinMap, BufferedImage baseTexture, MorphDeltaMap[] morphDeltaMaps) {
+ public J3DBodyData(IndexedTriangleArray bodyGeometry, Bvh[] animations, SkinMap skinMap, BaseTexture defaultBaseTexture, BaseTexture[] baseTextures, MorphDeltaMap[] morphDeltaMaps) {
ArgumentUtils.assertNotNull(bodyGeometry);
this.bodyGeometry = bodyGeometry;
ArgumentUtils.assertNotNull(animations);
this.animations = animations;
ArgumentUtils.assertNotNull(skinMap);
this.skinMap = skinMap;
- ArgumentUtils.assertNotNull(baseTexture);
- this.baseTexture = baseTexture;
+ ArgumentUtils.assertNotNull(defaultBaseTexture);
+ this.defaultBaseTexture = defaultBaseTexture;
+ ArgumentUtils.assertNotNull(baseTextures);
+ this.baseTextures = baseTextures;
ArgumentUtils.assertNotNull(morphDeltaMaps);
this.morphDeltaMaps = morphDeltaMaps;
@@ -47,6 +51,27 @@
}
}
+ public static class BaseTexture {
+
+ String name = null;
+ BufferedImage image = null;
+
+ public BaseTexture(String name, BufferedImage image){
+ ArgumentUtils.assertNotNull(name);
+ this.name = name;
+ ArgumentUtils.assertNotNull(image);
+ this.image = image;
+ }
+
+ public String getName(){
+ return name;
+ }
+
+ public BufferedImage getImage(){
+ return image;
+ }
+ }
+
public GeometryArray cloneBodyGeometry(){
float[] vertexArray = bodyGeometry.getCoordRefFloat();
@@ -84,7 +109,7 @@
bodyGeometry = null;
animations = null;
skinMap = null;
- baseTexture = null;
+ defaultBaseTexture = null;
}
public Bvh[] getAnimations() {
@@ -98,12 +123,16 @@
return skinMap;
}
- public BufferedImage getBaseTexture() {
- return baseTexture;
+ public BaseTexture getDefaultBaseTexture() {
+ return defaultBaseTexture;
}
+ public BaseTexture[] getBaseTextures(){
+ return baseTextures;
+ }
+
public String toString() {
- return "BodyData (" + bodyGeometry + ", " + skinMap + ", " + baseTexture + ")";
+ return "BodyData (" + bodyGeometry + ", " + skinMap + ", " + defaultBaseTexture + ")";
}
public Bvh getDefaultAnimation() {
@@ -113,4 +142,13 @@
public MorphDeltaMap[] getMorphDeltaMaps(){
return morphDeltaMaps;
}
+
+ public BaseTexture getBaseTexture(String baseTextureName) {
+ for (int i = 0; i < baseTextures.length; i++) {
+ if(baseTextures[i].getName().equals(baseTextureName)){
+ return baseTextures[i];
+ }
+ }
+ return null;
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-10-20 12:21:41 UTC (rev 523)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-10-21 16:11:23 UTC (rev 524)
@@ -89,13 +89,13 @@
this.bodyDataProvider = bodyDataProvider;
}
- public BufferedImage getBodyTexture(String username, long bodyConfigurationID){
+ public BufferedImage getBodyTexture(String username, long bodyConfigurationID) {
BufferedImage image = dataCache.getBodyTexture(bodyConfigurationID);
- if(image != null){
+ if (image != null) {
return image;
}
InputStream imageStream = bodyDataProvider.getBodyTexture(username, bodyConfigurationID);
- if(imageStream == null){
+ if (imageStream == null) {
return null;
}
try {
@@ -137,7 +137,8 @@
SkinMap skinMap = null;
Vector animations = new Vector();
Vector morphDeltas = new Vector();
- BufferedImage baseTexture = null;
+ J3DBodyData.BaseTexture defaultBaseTexture = null;
+ Vector baseTextures = new Vector();
try {
ZipEntry entry = null;
while ((entry = bodyDataStream.getNextEntry()) != null) {
@@ -157,7 +158,11 @@
BvhParser parser = new BvhParser(name, entryStream);
animations.add(parser.parse());
} else if (entry.getName().equals("texture/body.jpg")) {
- baseTexture = ImageIO.read(entryStream);
+ defaultBaseTexture = new J3DBodyData.BaseTexture("Default", ImageIO.read(entryStream));
+ } else if (entry.getName().startsWith("texture/") && entry.getName().endsWith(".jpg")) {
+ String name = entry.getName().substring(8, entry.getName().length() - 4);
+ J3DBodyData.BaseTexture baseTexture = new J3DBodyData.BaseTexture(name, ImageIO.read(entryStream));
+ baseTextures.add(baseTexture);
} else { //discard the data
StreamUtils.discardInput(new LimitedInputStream(bodyDataStream, (int) entry.getSize()));
}
@@ -176,44 +181,44 @@
sortMorphDeltas(morphDeltas);
- return new J3DBodyData(array, (Bvh[]) animations.toArray(new Bvh[0]), skinMap, baseTexture, (MorphDeltaMap[]) morphDeltas.toArray(new MorphDeltaMap[0]));
+ return new J3DBodyData(array, (Bvh[]) animations.toArray(new Bvh[0]), skinMap, defaultBaseTexture, (J3DBodyData.BaseTexture[]) baseTextures.toArray(new J3DBodyData.BaseTexture[0]), (MorphDeltaMap[]) morphDeltas.toArray(new MorphDeltaMap[0]));
}
/**
* arranges the morph delta maps in depth first order
*/
private void sortMorphDeltas(Vector morphDeltas) {
- if(morphDeltas.size() == 0){
+ if (morphDeltas.size() == 0) {
return;
}
MorphDeltaMap[] deltas = (MorphDeltaMap[]) morphDeltas.toArray(new MorphDeltaMap[0]);
-
+
HashMap nodeMap = new HashMap();
for (int i = 0; i < deltas.length; i++) {
nodeMap.put(deltas[i].getName(), new MorphTreeNode(deltas[i]));
}
MorphTreeNode rootNode = null;
for (int i = 0; i < deltas.length; i++) {
- if(deltas[i].getParentName() == null){
- if(rootNode == null){
- rootNode = (MorphTreeNode)nodeMap.get(deltas[i].getName());
+ if (deltas[i].getParentName() == null) {
+ if (rootNode == null) {
+ rootNode = (MorphTreeNode) nodeMap.get(deltas[i].getName());
} else {
Log.warn("Found multiple morph delta maps with no parent, adding " + deltas[i].getName() + " to " + rootNode.map.getName());
rootNode.children.add(nodeMap.get(deltas[i].getName()));
}
} else {
- MorphTreeNode parentNode = (MorphTreeNode)nodeMap.get(deltas[i].getParentName());
- if(parentNode == null){
+ MorphTreeNode parentNode = (MorphTreeNode) nodeMap.get(deltas[i].getParentName());
+ if (parentNode == null) {
Log.warn("MorphDeltaMap (" + deltas[i].getName() + ") has unknown parent: " + deltas[i].getParentName() + ", ignoring.");
} else {
parentNode.children.add(nodeMap.get(deltas[i].getName()));
}
}
}
- if(rootNode == null){
+ if (rootNode == null) {
throw new IllegalStateException("Cannot have a morph tree with no root");
}
-
+
morphDeltas.clear();
serializeMorphTree(0, rootNode, morphDeltas);
}
@@ -223,12 +228,12 @@
*/
private void serializeMorphTree(int depth, MorphTreeNode node, Vector morphDeltas) {
depth++;
- if(depth > 30){
+ if (depth > 30) {
Log.error("Morph tree depth was greater than 30, which probably indicates a cyclic tree. Aborting");
return;
}
for (int i = 0; i < node.children.size(); i++) {
- serializeMorphTree(depth, (MorphTreeNode)node.children.get(i), morphDeltas);
+ serializeMorphTree(depth, (MorphTreeNode) node.children.get(i), morphDeltas);
}
morphDeltas.add(node.map);
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java 2007-10-20 12:21:41 UTC (rev 523)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java 2007-10-21 16:11:23 UTC (rev 524)
@@ -23,7 +23,7 @@
import com.ogoglio.viewer.j3d.J3DBodyData;
public class SkinLoader {
-
+
public static final float AVATAR_SIZE = 2; //this will eventually be changable
private GeometryArray geometry = null;
@@ -37,8 +37,18 @@
public SkinLoader(J3DBodyData bodyData, BodyConfiguration bodyConfiguration, BufferedImage customSkin) {
this.geometry = bodyData.cloneBodyGeometry();
this.morphDeltaMaps = bodyData.getMorphDeltaMaps();
- if(customSkin == null){
- this.baseImage = bodyData.getBaseTexture();
+ if (customSkin == null) {
+ if (bodyConfiguration.getBaseTextureName() == null) {
+ this.baseImage = bodyData.getDefaultBaseTexture().getImage();
+ } else {
+ J3DBodyData.BaseTexture baseTexture = bodyData.getBaseTexture(bodyConfiguration.getBaseTextureName());
+ if(baseTexture == null){
+ System.err.println("Could not find base texture by name: " + bodyConfiguration.getBaseTextureName());
+ this.baseImage = bodyData.getDefaultBaseTexture().getImage();
+ } else {
+ this.baseImage = baseTexture.getImage();
+ }
+ }
} else {
this.baseImage = customSkin;
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyConfigurationDocument.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyConfigurationDocument.java 2007-10-20 12:21:41 UTC (rev 523)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/BodyConfigurationDocument.java 2007-10-21 16:11:23 UTC (rev 524)
@@ -30,9 +30,11 @@
public static final String BODY_DATA_ID = "bodydataid";
+ public static final String BASE_TEXTURE_NAME = "basetexturename";
+
private XMLElement data = null;
- public BodyConfigurationDocument(long bodyConfigurationID, String ownerUsername, String displayName, long bodyDataID) {
+ public BodyConfigurationDocument(long bodyConfigurationID, String ownerUsername, String displayName, long bodyDataID, String baseTextureName) {
data = new XMLElement(NAME);
data.setAttribute(BODY_CONFIGURATION_ID, bodyConfigurationID);
ArgumentUtils.assertNotEmpty(ownerUsername);
@@ -41,6 +43,9 @@
data.setAttribute(DISPLAY_NAME, displayName);
ArgumentUtils.assertNotNegative(bodyDataID);
data.setAttribute(BODY_DATA_ID, bodyDataID);
+ if(baseTextureName != null){
+ data.setAttribute(BASE_TEXTURE_NAME, baseTextureName);
+ }
}
public BodyConfigurationDocument(XMLElement data) {
@@ -51,7 +56,7 @@
}
public BodyConfigurationDocument(BodyConfiguration bodyConfiguration) {
- this(bodyConfiguration.getBodyConfigurationID(), bodyConfiguration.getUser().getUsername(), bodyConfiguration.getDisplayName(), bodyConfiguration.getBodyDataID());
+ this(bodyConfiguration.getBodyConfigurationID(), bodyConfiguration.getUser().getUsername(), bodyConfiguration.getDisplayName(), bodyConfiguration.getBodyDataID(), bodyConfiguration.getBaseTextureName());
String[] settingNames = bodyConfiguration.getSettingNames();
for (int i = 0; i < settingNames.length; i++) {
addBodySetting(settingNames[i], bodyConfiguration.getSetting(settingNames[i]));
@@ -74,6 +79,19 @@
return data.getLongAttribute(BODY_DATA_ID);
}
+ public String getBaseTextureName(){
+ return data.getStringAttribute(BASE_TEXTURE_NAME);
+ }
+
+ public void setBaseTextureName(String baseTextureName) {
+ if(baseTextureName == null){
+ data.removeAttribute(BASE_TEXTURE_NAME);
+ return;
+ }
+ data.setAttribute(BASE_TEXTURE_NAME, baseTextureName);
+ }
+
+
public void addBodySetting(String settingName, float setting) {
data.addChild(new BodySettingDocument(getBodyConfigurationID(), settingName, setting).toElement());
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|