|
From: <tre...@us...> - 2007-10-15 13:04:51
|
Revision: 494
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=494&view=rev
Author: trevorolio
Date: 2007-10-15 06:04:52 -0700 (Mon, 15 Oct 2007)
Log Message:
-----------
Added a body texture web resource, backed by the media service. This is used in conjunction with body configurations to provide users with skin customization.
Still to come in texture land:
the body editor UI needs some design love to incorporate the texture upload form
body loading takes too long and shows no progress information
a base skin texture with decal textures baked on top
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/WebAPIDescriptor.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyDataProvider.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataCache.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/J3DRenderer.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.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-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -728,6 +728,10 @@
}
}
+ public InputStream getBodyTexture(String username, long bodyConfigurationID) {
+ return webClient.getBodyTexture(username, bodyConfigurationID);
+ }
+
}
public TemplateDataProvider getTemplateDataProvider() {
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-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -477,14 +477,14 @@
}
public BodyDataDocument[] getBodyDataDocuments() throws IOException {
-
+
XMLElement result = wire.fetchAuthenticatedXML(descriptor.getBodiesURI(), authenticator.getAuthCookie());
Vector docs = new Vector();
Vector children = result.getChildren();
for (int i = 0; i < children.size(); i++) {
- docs.add(new BodyDataDocument((XMLElement)children.get(i)));
+ docs.add(new BodyDataDocument((XMLElement) children.get(i)));
}
- return (BodyDataDocument[])docs.toArray(new BodyDataDocument[0]);
+ return (BodyDataDocument[]) docs.toArray(new BodyDataDocument[0]);
}
public BodyDataDocument getBodyDataDocument(long bodyDataID) throws IOException {
@@ -549,4 +549,19 @@
return new BodyConfigurationDocument(wire.fetchAuthenticatedXML(descriptor.getDefaultBodyConfiguration(username), authenticator.getAuthCookie()));
}
+ public void setBodyTexture(String username, long bodyConfigurationID, InputStream textureData, String mimeType) throws IOException {
+ wire.performPOST(descriptor.getBodyTextureURI(username, bodyConfigurationID), textureData, mimeType, authenticator.getAuthCookie());
+ }
+
+ public InputStream getBodyTexture(String username, long bodyConfigurationID) {
+ try {
+ return wire.fetchAuthenticatedStream(descriptor.getBodyTextureURI(username, bodyConfigurationID), authenticator.getAuthCookie());
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
+ public void deleteBodyTexture(String username, long bodyConfigurationID) throws IOException {
+ wire.sendDelete(descriptor.getBodyTextureURI(username, bodyConfigurationID), authenticator.getAuthCookie());
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIDescriptor.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIDescriptor.java 2007-10-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIDescriptor.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -135,6 +135,9 @@
return WebAPIUtil.appendToURI(getBodyConfigurationsURI(username), bodyConfigurationID + "/");
}
+ public URI getBodyTextureURI(String username, long bodyConfigurationID){
+ return WebAPIUtil.appendToURI(getBodyConfigurationURI(username, bodyConfigurationID), "texture");
+ }
public URI getDefaultBodyConfiguration(String username) {
return WebAPIUtil.appendToURI(getBodyConfigurationsURI(username), "default/");
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyDataProvider.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyDataProvider.java 2007-10-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/BodyDataProvider.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -1,9 +1,12 @@
package com.ogoglio.client.model;
+import java.io.InputStream;
import java.util.zip.ZipInputStream;
public interface BodyDataProvider {
public ZipInputStream getBodyData(long bodyDataID);
+ public InputStream getBodyTexture(String username, long bodyConfigurationID);
+
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataCache.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataCache.java 2007-10-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataCache.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -13,46 +13,61 @@
limitations under the License. */
package com.ogoglio.viewer.j3d;
+import java.awt.image.BufferedImage;
import java.util.HashMap;
public class J3DDataCache {
private HashMap bodyDataMap = new HashMap(); //maps body IDs to J3DBodyData objects
-
+
private HashMap templateDataMap = new HashMap(); //maps template guid to J3DTemplateData objects
+ private HashMap bodyTextureMap = new HashMap(); //maps bodyConfigurationIDs to BufferedImage objects
+
+ public BufferedImage getBodyTexture(long bodyConfigurationID) {
+ return (BufferedImage) bodyTextureMap.get(new Long(bodyConfigurationID));
+ }
+
+ public void putBodyTexture(long bodyConfigurationID, BufferedImage image) {
+ if(image == null){
+ bodyTextureMap.remove(new Long(bodyConfigurationID));
+ return;
+ }
+ bodyTextureMap.put(new Long(bodyConfigurationID), image);
+ }
+
public J3DTemplateData getTemplateData(long templateID, int lod) {
return (J3DTemplateData) templateDataMap.get(createTemplateGUID(templateID, lod));
}
- public void putBodyData(long bodyDataID, J3DBodyData data){
+ public void putBodyData(long bodyDataID, J3DBodyData data) {
bodyDataMap.put(new Long(bodyDataID), data);
}
-
- public J3DBodyData getBodyData(long bodyDataID){
- return (J3DBodyData)bodyDataMap.get(new Long(bodyDataID));
+
+ public J3DBodyData getBodyData(long bodyDataID) {
+ return (J3DBodyData) bodyDataMap.get(new Long(bodyDataID));
}
-
+
public void putTemplateData(long templateID, int lod, J3DTemplateData entry) {
templateDataMap.put(createTemplateGUID(templateID, lod), entry);
}
- private String createTemplateGUID(long id, int lod){
+ private String createTemplateGUID(long id, int lod) {
return id + "-" + lod;
}
-
- private long getIDFromGUID(String guid){
+
+ private long getIDFromGUID(String guid) {
return Long.parseLong(guid.split("-")[0]);
}
- private long getLODFromGUID(String guid){
+ private long getLODFromGUID(String guid) {
return Long.parseLong(guid.split("-")[1]);
}
- private J3DTemplateData[] getAllTemplateData(){
- return (J3DTemplateData[])templateDataMap.values().toArray(new J3DTemplateData[0]);
+ private J3DTemplateData[] getAllTemplateData() {
+ return (J3DTemplateData[]) templateDataMap.values().toArray(new J3DTemplateData[0]);
}
-
+
public void cleanup() {
J3DTemplateData[] data = getAllTemplateData();
for (int i = 0; i < data.length; i++) {
@@ -65,6 +80,6 @@
}
private J3DBodyData[] getAllBodyData() {
- return (J3DBodyData[])bodyDataMap.values().toArray(new J3DBodyData[0]);
+ return (J3DBodyData[]) bodyDataMap.values().toArray(new J3DBodyData[0]);
}
}
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-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DDataManager.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -89,6 +89,25 @@
this.bodyDataProvider = bodyDataProvider;
}
+ public BufferedImage getBodyTexture(String username, long bodyConfigurationID){
+ BufferedImage image = dataCache.getBodyTexture(bodyConfigurationID);
+ if(image != null){
+ return image;
+ }
+ InputStream imageStream = bodyDataProvider.getBodyTexture(username, bodyConfigurationID);
+ if(imageStream == null){
+ return null;
+ }
+ try {
+ image = ImageIO.read(imageStream);
+ } catch (IOException e) {
+ Log.warn("Custom skin could not be read: " + e);
+ return null;
+ }
+ dataCache.putBodyTexture(bodyConfigurationID, image);
+ return image;
+ }
+
public J3DBodyData getBodyData(long bodyDataID) {
J3DBodyData data = dataCache.getBodyData(bodyDataID);
if (data != null) {
@@ -554,5 +573,4 @@
public void cleanup() {
dataCache.cleanup();
}
-
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-10-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -18,6 +18,7 @@
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
+import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Enumeration;
@@ -625,8 +626,10 @@
throw new IllegalStateException("Cannot load body data");
}
+ BufferedImage customSkin = dataManager.getBodyTexture(user.getUsername(), bodyConfig.getBodyConfigurationID());
+
boolean isLocalUser = !offScreen && username != null && user.getUsername().equals(username);
- final J3DUserRenderable renderable = new J3DUserRenderable(user, bodyData);
+ final J3DUserRenderable renderable = new J3DUserRenderable(user, bodyData, customSkin);
renderable.setID(USER_ID_PREFIX + user.getUsername());
if (isLocalUser) {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java 2007-10-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DUserRenderable.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -15,6 +15,7 @@
package com.ogoglio.viewer.j3d;
import java.awt.Font;
+import java.awt.image.BufferedImage;
import javax.media.j3d.Billboard;
import javax.media.j3d.BoundingSphere;
@@ -73,7 +74,7 @@
private float userHeight = 2; //meters
- public J3DUserRenderable(User user, J3DBodyData bodyData) {
+ public J3DUserRenderable(User user, J3DBodyData bodyData, BufferedImage customSkin) {
ArgumentUtils.assertNotNull(user);
this.user = user;
ArgumentUtils.assertNotNull(bodyData);
@@ -86,13 +87,13 @@
setCapabilities(bodyGroup);
transformGroup.addChild(bodyGroup);
- initBody(bodyData);
+ initBody(bodyData, customSkin);
}
- public void initBody(J3DBodyData bodyData) {
+ public void initBody(J3DBodyData bodyData, BufferedImage customSkin) {
bodyGroup.removeAllChildren();
this.bodyData = bodyData;
- skin = new SkinLoader(bodyData, user.getBodyConfiguration()).generateSkin();
+ skin = new SkinLoader(bodyData, user.getBodyConfiguration(), customSkin).generateSkin();
userHeight = skin.getHeight();
skinMap = bodyData.getSkinMap();
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-15 13:04:48 UTC (rev 493)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/body/SkinLoader.java 2007-10-15 13:04:52 UTC (rev 494)
@@ -34,10 +34,14 @@
private MorphDeltaMap[] morphDeltaMaps = null;
- public SkinLoader(J3DBodyData bodyData, BodyConfiguration bodyConfiguration) {
+ public SkinLoader(J3DBodyData bodyData, BodyConfiguration bodyConfiguration, BufferedImage customSkin) {
this.geometry = bodyData.cloneBodyGeometry();
this.morphDeltaMaps = bodyData.getMorphDeltaMaps();
- this.baseImage = bodyData.getBaseTexture();
+ if(customSkin == null){
+ this.baseImage = bodyData.getBaseTexture();
+ } else {
+ this.baseImage = customSkin;
+ }
this.bodyConfiguration = bodyConfiguration;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|