Revision: 468 http://skycastle.svn.sourceforge.net/skycastle/?rev=468&view=rev Author: zzorn Date: 2008-04-21 13:56:33 -0700 (Mon, 21 Apr 2008) Log Message: ----------- Started sketching out the design for a visually editable language. It will be needed later for most world editing. For now I just need the implementation side, so that the server can send a script to the client that takes outputs from the UI when a button is pressed and composes a message to the server side. Modified Paths: -------------- trunk/skycastle/modules/client/src/main/java/org/skycastle/client/ClientObject.java Added Paths: ----------- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/AbstractBlock.java trunk/skycastle/modules/core/src/main/java/org/skycastle/language/ActionCallStatement.java trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Block.java trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Expression.java trunk/skycastle/modules/core/src/main/java/org/skycastle/language/LanguageContext.java trunk/skycastle/modules/core/src/main/java/org/skycastle/language/PropertyReferenceExpression.java trunk/skycastle/modules/core/src/main/java/org/skycastle/language/SingleSlot.java trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Slot.java trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Statement.java Modified: trunk/skycastle/modules/client/src/main/java/org/skycastle/client/ClientObject.java =================================================================== --- trunk/skycastle/modules/client/src/main/java/org/skycastle/client/ClientObject.java 2008-04-19 10:01:55 UTC (rev 467) +++ trunk/skycastle/modules/client/src/main/java/org/skycastle/client/ClientObject.java 2008-04-21 20:56:33 UTC (rev 468) @@ -142,10 +142,11 @@ throws IllegalAccessException, InstantiationException { final GameObjectContext context = GameContext.getGameObjectContext(); - final ButtonUi ui = context.createGameObject( ButtonUi.class ); - ui.getActionReference().setReference( gameObjectId, actionId ); + final ButtonUi buttonUi = context.createGameObject( ButtonUi.class ); + buttonUi.getActionReference().setReference( gameObjectId, actionId ); - return ui; + + return buttonUi; } Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/AbstractBlock.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/AbstractBlock.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/AbstractBlock.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,25 @@ +package org.skycastle.language; + +import java.util.List; + +/** + * @author Hans Haggstrom + */ +public abstract class AbstractBlock + implements Block +{ + protected void addSlot( Slot slot ) + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } + + protected void removeSlot( Slot slot ) + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } + + public List<Slot> getSlots() + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } +} Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/ActionCallStatement.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/ActionCallStatement.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/ActionCallStatement.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,27 @@ +package org.skycastle.language; + +/** + * A {@link Statement} that invokes an action with some parameters. + * + * @author Hans Haggstrom + */ +public class ActionCallStatement + extends AbstractBlock + implements Statement +{ + public ActionCallStatement() + { + addSlot( new SingleSlot<Expression>( Expression.class, "Message" ) ); + addSlot( new SingleSlot<Expression>( Expression.class, "Sender" ) ); + addSlot( new SingleSlot<Expression>( Expression.class, "Target" ) ); + + addSlot( new SingleSlot<Statement>( Statement.class, "OnSuccess" ) ); + addSlot( new SingleSlot<Statement>( Statement.class, "OnProgress" ) ); + addSlot( new SingleSlot<Statement>( Statement.class, "OnFailure" ) ); + } + + public void execute( final LanguageContext languageContext ) + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } +} Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Block.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Block.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Block.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,18 @@ +package org.skycastle.language; + +import java.util.List; + +/** + * Represents any kind of member of an object. + * + * @author Hans Haggstrom + */ +public interface Block +{ + + /** + * @return the {@link Slot}s available in this {@link Block} + */ + List<Slot> getSlots(); + +} Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Expression.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Expression.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Expression.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,12 @@ +package org.skycastle.language; + +/** + * An {@link Expression} calculates some result based on zero or more inputs. + * + * @author Hans Haggstrom + */ +public interface Expression + extends Block +{ + +} Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/LanguageContext.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/LanguageContext.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/LanguageContext.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,10 @@ +package org.skycastle.language; + +/** + * A way for a statement or expression to access parameters and properties that are available to it. + * + * @author Hans Haggstrom + */ +public interface LanguageContext +{ +} Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/PropertyReferenceExpression.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/PropertyReferenceExpression.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/PropertyReferenceExpression.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,20 @@ +package org.skycastle.language; + +import java.util.List; + +/** + * An {@link Expression} that returns the value of a specified property as its result. + * + * @author Hans Haggstrom + */ +public class PropertyReferenceExpression + extends AbstractBlock + implements Expression +{ + + + public List<Slot> getSlots() + { + throw new UnsupportedOperationException( "This method has not yet been implemented." ); // IMPLEMENT + } +} Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/SingleSlot.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/SingleSlot.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/SingleSlot.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,60 @@ +package org.skycastle.language; + +/** + * A slot that holds a single block of the specified type. + * + * @author Hans Haggstrom + */ +public final class SingleSlot<T extends Block> + implements Slot +{ + + //====================================================================== + // Private Fields + + private final Class<T> myBlockType; + + private final String mySlotName; + + private T myBlock = null; + + //====================================================================== + // Public Methods + + //---------------------------------------------------------------------- + // Constructors + + public SingleSlot( final Class<T> blockType, final String slotName ) + { + myBlockType = blockType; + mySlotName = slotName; + } + + //---------------------------------------------------------------------- + // Slot Implementation + + + public String getSlotName() + { + return mySlotName; + } + + //---------------------------------------------------------------------- + // Other Public Methods + + public Class<T> getBlockType() + { + return myBlockType; + } + + public T getBlock() + { + return myBlock; + } + + public void setBlock( final T block ) + { + myBlock = block; + } + +} Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Slot.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Slot.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Slot.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,15 @@ +package org.skycastle.language; + +/** + * A place in a {@link Block} that can hold another {@link Block} of some type. + * + * @author Hans Haggstrom + */ +public interface Slot +{ + /** + * @return a user readable name describing this {@link Slot}. + */ + String getSlotName(); + +} Added: trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Statement.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Statement.java (rev 0) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/language/Statement.java 2008-04-21 20:56:33 UTC (rev 468) @@ -0,0 +1,19 @@ +package org.skycastle.language; + +/** + * A statement that returns no result and takes no parameters. + * <p/> + * It does operate in a {@link LanguageContext} though, so it can access parameter or property values. + * + * @author Hans Haggstrom + */ +public interface Statement + extends Block +{ + + /** + * Carries out the {@link Statement} in the specified {@link LanguageContext}. + */ + void execute( LanguageContext languageContext ); + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.