Ray Greenwell a9e60be7c7 Another well-thought out actionscript feature: varags!
In java, if you override a varargs method you can easily call super, you just
have to do a wee cast:

    @Override
    public Stuff getStuff (int thing, Object... args)
    {
        return super.getStuff(thing, (Object[]) args);
    }

In abjectscript:

    override public function getStuff (thing :int, ... args) :Stuff
    {
        // This doesn't work, because now 'args' to super is an array
        // containing OUR args array as its first element.
        return super.getStuff(thing, args);

        // We can fix things for super by 'apply'ing the function to
        // all the args in one array...
        args.unshift(thing);
        return super.apply(this, args);

        // But it could also be the case that someone is intentionally
        // passing an array to this method (many flash library methods take
        // varargs but also accept arrays and do this same thing).
        if (args.length == 1 && (args[0] is Array)) {
            args = (args[0] as Array);
        }
        return super.getStuff(thing, args); // super must ALSO do the unjimmying

        // OR, we could combine the two so that super doesn't have to
        // do unjimmying.
    }

As a note, there is an 'arguments' object that is secretly placed in every
function call, presumably so that callers can test whether an arg is
the default value because the user didn't pass it in or whether it's
the default because the user happened to pass in the default.
Guess yourself, because that doesn't seem worth adding as a language feature.
Anyway, the 'arguments' is not an array! You can't use it to call super
via 'apply'. It's another associative hash. God bless you actionscript,
you just make so much fucking sense.

So I made a utility method for unfucking vargs.

I bitch a lot, yes, but my bitching takes only a fraction of the time
that was wasted discovering whatever it is I'm bitching about
(this was fun to trace backwards to the source, oh yes), and maybe I
can save others some time as a result.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4477 542714f4-19e9-0310-aa3c-eee0fc999fb1
2006-12-09 00:08:09 +00:00
2006-06-29 21:15:54 +00:00
2006-10-13 22:29:46 +00:00
2006-11-16 22:51:36 +00:00
2004-08-27 02:12:55 +00:00
2004-08-27 17:44:44 +00:00

The Narya library
-----------------

The Narya library provides various facilities for making networked
multiplayer games. It's various packages include:

  * geom, util, io - basic tools for doing networked I/O, data structure
    manipulation and some geometry math
  * resource - tools for bundling, deploying and managing media (images,
    sounds, etc.) with a game
  * media - a framework for doing "active" rendering in Java
  * media.image - tools for loading, caching, manipulating and displaying images
  * media.sound - tools for loading, caching, and playing audio
  * media.animation, media.sprite - works in concert with the active
    rendering system and provides tools for defining and manipulating
    sprites (graphical entities that follow paths) and animations
    (graphical entities that affect the display in other ways)
  * miso - a framework for defining and displaying isometrically rendered scenes
  * presents - a framework for distributing information among a server and
    networked clients
  * crowd - builds on the presents framework to create the notion of
    bodies and rooms and provides chat infrastructure
  * whirled - builds on the crowd framework and defines a scene graph with
    portals to move between scenes and provides hooks for distributing and
    updating scene data (for example isometric rendering information) over
    the network
  * cast - a framework for defining and using recolorable, composited
    characters with different poses and actions
  * parlor - builds upon the crowd framework to create the notion of a
    game with players and provides tools for making turn based games
  * puzzle - builds on the parlor and media frameworks to provide tools
    for implementing puzzle games in a networked environment
  * micasa - builds on the parlor framework to provide lobbies and
    matchmaking for multiplayer games 

Documentation is somewhat sparse at the moment, but inspection of the code
in the tests/ directory shows examples of use of many features of the
library.

Building
--------

Building the library is very simple. First ensure that the necessary third
party jar files are available either in the lib/ directory or in the
system wide jar file location specified in build.xml. See lib/README for a
list of the necessary third party jar files and how to get them.

The library is built using ant, a modern build tool available from The
Jakarta Project. If you aren't already using ant for other projects, it
can be found here:

  http://jakarta.apache.org/ant/

Invoke ant with any of the following targets:

  all: builds the distribution files and javadoc documentation
  compile: builds only the class files (dist/classes)
  javadoc: builds only the javadoc documentation (dist/docs)
  dist: builds the distribution jar files (dist/*.jar)

Distribution
------------

The Narya library is released under the LGPL. The most recent version of
the library is available here:

  http://www.threerings.net/code/narya/

Contribution
------------

Contributions to Narya are welcome. Control of the CVS repository is
presently in the hands of mdb@threerings.net, who should be emailed about
submissions. Soon we will be migrating to Subversion and making the
repository publicly accessible. For now, source releases are available at
the above website.

Contact Information
-------------------

Narya is actively developed by the scurvy dogs at Three Rings Design,
Inc. Contact Michael Bayne <mdb@threerings.net> with questions, comments
and other wordly endeavors.

$Id: README,v 1.1 2004/08/27 17:44:44 mdb Exp $
S
Description
Distributed application framework, good for MMOGs
Readme 24 MiB
Languages
Java 69.1%
ActionScript 26.6%
C++ 3.1%
Go Template 0.8%
HTML 0.2%
Other 0.1%