Changeset 270
- Timestamp:
- 06/10/07 15:59:07 (18 months ago)
- Location:
- trunk
- Files:
-
- 30 added
- 61 modified
-
FaerieMUD.tmproj (modified) (6 diffs)
-
Rakefile (added)
-
acceptance/epic4.rb (modified) (5 diffs)
-
bin/faeriemud.rb (modified) (6 diffs)
-
docs/FaerieMUD Design Diagrams.graffle (modified) (4 diffs)
-
docs/makedocs.rb (modified) (1 diff)
-
docs/smoke_and_mirrors.rb (modified) (7 diffs)
-
experiments/RelativeTruth.rb (modified) (2 diffs)
-
experiments/demoshell.rb (added)
-
experiments/event-stack-overflow.rb (modified) (1 diff)
-
experiments/hooks.rb (modified) (2 diffs)
-
experiments/jitclass.rb (modified) (1 diff)
-
experiments/personas.rb (modified) (1 diff)
-
experiments/points-distributor.rb (modified) (2 diffs)
-
experiments/shiny-object.rb (modified) (1 diff)
-
lib/fm.rb (modified) (1 diff)
-
lib/fm/animatedobject.rb (modified) (1 diff)
-
lib/fm/area.rb (modified) (1 diff)
-
lib/fm/character.rb (modified) (2 diffs)
-
lib/fm/commandparser.rb (modified) (5 diffs)
-
lib/fm/composedobject.rb (modified) (16 diffs)
-
lib/fm/entity.rb (modified) (8 diffs)
-
lib/fm/event.rb (modified) (6 diffs)
-
lib/fm/events/all.rb (modified) (1 diff)
-
lib/fm/events/perceptual.rb (modified) (1 diff)
-
lib/fm/gameobject.rb (modified) (10 diffs)
-
lib/fm/linguistics.rb (modified) (5 diffs)
-
lib/fm/locus.rb (modified) (11 diffs)
-
lib/fm/logger.rb (modified) (14 diffs)
-
lib/fm/mixins.rb (modified) (37 diffs)
-
lib/fm/perception.rb (modified) (1 diff)
-
lib/fm/periodicobject.rb (modified) (26 diffs)
-
lib/fm/properties/fuzzy.rb (modified) (5 diffs)
-
lib/fm/property.rb (modified) (4 diffs)
-
lib/fm/spirit.rb (modified) (11 diffs)
-
lib/fm/statistic.rb (modified) (11 diffs)
-
lib/fm/utils.rb (modified) (1 diff)
-
lib/fm/verb.rb (modified) (2 diffs)
-
lib/fm/verbs/all.rb (modified) (1 diff)
-
redist (modified) (1 prop)
-
spec (added)
-
spec/TEMPLATE.rb.tpl (added)
-
spec/animatedobject_spec.rb (added)
-
spec/area_spec.rb (added)
-
spec/character_spec.rb (added)
-
spec/commandparser_spec.rb (added)
-
spec/composedobject_spec.rb (added)
-
spec/developmentalobject_spec.rb (added)
-
spec/entity_spec.rb (added)
-
spec/event.tests.rb (added)
-
spec/gameobject.tests.rb (added)
-
spec/hookable.tests.rb (added)
-
spec/item.tests.rb (added)
-
spec/lib (added)
-
spec/lib/fmfixtures.rb (added)
-
spec/lib/fmtestcase.rb (added)
-
spec/linguistics.tests.rb (added)
-
spec/locus.tests.rb (added)
-
spec/logger.tests.rb (added)
-
spec/organism.tests.rb (added)
-
spec/perception.tests.rb (added)
-
spec/periodicobject.tests.rb (added)
-
spec/property.tests.rb (added)
-
spec/simpleverb.tests.rb (added)
-
spec/spirit.tests.rb (added)
-
spec/statistic.tests.rb (added)
-
spec/utils.tests.rb (added)
-
spec/verb.tests.rb (added)
-
test.rb (modified) (4 diffs)
-
tests/area.tests.rb (modified) (3 diffs)
-
tests/commandparser.tests.rb (modified) (5 diffs)
-
tests/composedobject.tests.rb (modified) (6 diffs)
-
tests/entity.tests.rb (modified) (6 diffs)
-
tests/event.tests.rb (modified) (9 diffs)
-
tests/gameobject.tests.rb (modified) (1 diff)
-
tests/hookable.tests.rb (modified) (11 diffs)
-
tests/lib/fmtestcase.rb (modified) (2 diffs)
-
tests/linguistics.tests.rb (modified) (3 diffs)
-
tests/locus.tests.rb (modified) (16 diffs)
-
tests/perception.tests.rb (modified) (1 diff)
-
tests/periodicobject.tests.rb (modified) (7 diffs)
-
tests/property.tests.rb (modified) (4 diffs)
-
tests/spirit.tests.rb (modified) (1 diff)
-
tests/statistic.tests.rb (modified) (4 diffs)
-
tools/convertWikiPage.rb (modified) (16 diffs)
-
tools/irc/bogsdb.rb (modified) (1 diff)
-
tools/irc/bogswiddle.rb (modified) (4 diffs)
-
tools/irc/database.yml-example (modified) (1 diff)
-
tools/irc/schema.pg.sql (modified) (1 diff)
-
tools/web/fmobjinspector.cgi (modified) (1 diff)
-
utils.rb (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/FaerieMUD.tmproj
r260 r270 4 4 <dict> 5 5 <key>currentDocument</key> 6 <string> tests/animatedobject.tests.rb</string>6 <string>spec/entity_spec.rb</string> 7 7 <key>documents</key> 8 8 <array> … … 11 11 <true/> 12 12 <key>name</key> 13 <string>acceptance</string> 14 <key>regexFileFilter</key> 15 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 13 <string>FaerieMUD</string> 16 14 <key>regexFolderFilter</key> 17 <string>!.*/(\.[^/]*|CVS| \{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>15 <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 18 16 <key>sourceDirectory</key> 19 <string>acceptance</string> 20 </dict> 21 <dict> 22 <key>expanded</key> 23 <true/> 24 <key>name</key> 25 <string>bin</string> 26 <key>regexFileFilter</key> 27 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 28 <key>regexFolderFilter</key> 29 <string>!.*/(\.[^/]*|CVS|\{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 30 <key>sourceDirectory</key> 31 <string>bin</string> 32 </dict> 33 <dict> 34 <key>expanded</key> 35 <true/> 36 <key>name</key> 37 <string>docs</string> 38 <key>regexFileFilter</key> 39 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 40 <key>regexFolderFilter</key> 41 <string>!.*/(\.[^/]*|CVS|\{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 42 <key>sourceDirectory</key> 43 <string>docs</string> 44 </dict> 45 <dict> 46 <key>name</key> 47 <string>experiments</string> 48 <key>regexFileFilter</key> 49 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 50 <key>regexFolderFilter</key> 51 <string>!.*/(\.[^/]*|CVS|\{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 52 <key>sourceDirectory</key> 53 <string>experiments</string> 54 </dict> 55 <dict> 56 <key>expanded</key> 57 <true/> 58 <key>name</key> 59 <string>lib</string> 60 <key>regexFileFilter</key> 61 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 62 <key>regexFolderFilter</key> 63 <string>!.*/(\.[^/]*|CVS|\{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 64 <key>sourceDirectory</key> 65 <string>lib</string> 66 </dict> 67 <dict> 68 <key>name</key> 69 <string>redist</string> 70 <key>regexFileFilter</key> 71 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 72 <key>regexFolderFilter</key> 73 <string>!.*/(\.[^/]*|CVS|\{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 74 <key>sourceDirectory</key> 75 <string>redist</string> 76 </dict> 77 <dict> 78 <key>name</key> 79 <string>specs</string> 80 <key>regexFileFilter</key> 81 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 82 <key>regexFolderFilter</key> 83 <string>!.*/(\.[^/]*|CVS|\{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 84 <key>sourceDirectory</key> 85 <string>specs</string> 86 </dict> 87 <dict> 88 <key>filename</key> 89 <string>TEMPLATE.rb.tpl</string> 90 </dict> 91 <dict> 92 <key>filename</key> 93 <string>test.log</string> 94 <key>lastUsed</key> 95 <date>2005-11-13T21:20:19Z</date> 96 </dict> 97 <dict> 98 <key>filename</key> 99 <string>test.rb</string> 100 <key>lastUsed</key> 101 <date>2006-04-30T01:31:28Z</date> 102 </dict> 103 <dict> 104 <key>expanded</key> 105 <true/> 106 <key>name</key> 107 <string>tests</string> 108 <key>regexFileFilter</key> 109 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 110 <key>regexFolderFilter</key> 111 <string>!.*/(\.[^/]*|CVS|\{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 112 <key>sourceDirectory</key> 113 <string>tests</string> 114 </dict> 115 <dict> 116 <key>name</key> 117 <string>tools</string> 118 <key>regexFileFilter</key> 119 <string>!(/\.(?!htaccess)[^/]*|\.(tmproj|o|pyc)|/Icon\r)$</string> 120 <key>regexFolderFilter</key> 121 <string>!.*/(\.[^/]*|CVS|\{arch\}|build|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> 122 <key>sourceDirectory</key> 123 <string>tools</string> 124 </dict> 125 <dict> 126 <key>filename</key> 127 <string>utils.rb</string> 17 <string></string> 128 18 </dict> 129 19 </array> 130 20 <key>fileHierarchyDrawerWidth</key> 131 <integer>2 76</integer>21 <integer>266</integer> 132 22 <key>metaData</key> 133 23 <dict> 134 <key>experiments/personas.rb</key>135 <dict>136 <key>caret</key>137 <dict>138 <key>column</key>139 <integer>0</integer>140 <key>line</key>141 <integer>0</integer>142 </dict>143 <key>firstVisibleColumn</key>144 <integer>0</integer>145 <key>firstVisibleLine</key>146 <integer>0</integer>147 </dict>148 <key>lib/fm/animatedobject.rb</key>149 <dict>150 <key>caret</key>151 <dict>152 <key>column</key>153 <integer>0</integer>154 <key>line</key>155 <integer>6</integer>156 </dict>157 <key>firstVisibleColumn</key>158 <integer>0</integer>159 <key>firstVisibleLine</key>160 <integer>0</integer>161 </dict>162 24 <key>lib/fm/character.rb</key> 163 25 <dict> … … 165 27 <dict> 166 28 <key>column</key> 167 <integer> 0</integer>29 <integer>48</integer> 168 30 <key>line</key> 169 <integer> 49</integer>31 <integer>56</integer> 170 32 </dict> 171 <key>columnSelection</key>172 <false/>173 33 <key>firstVisibleColumn</key> 174 34 <integer>0</integer> 175 35 <key>firstVisibleLine</key> 176 <integer>37</integer> 177 <key>selectFrom</key> 178 <dict> 179 <key>column</key> 180 <integer>0</integer> 181 <key>line</key> 182 <integer>49</integer> 183 </dict> 184 <key>selectTo</key> 185 <dict> 186 <key>column</key> 187 <integer>0</integer> 188 <key>line</key> 189 <integer>50</integer> 190 </dict> 36 <integer>86</integer> 191 37 </dict> 192 38 <key>lib/fm/composedobject.rb</key> … … 197 43 <integer>0</integer> 198 44 <key>line</key> 199 <integer> 34</integer>45 <integer>269</integer> 200 46 </dict> 201 47 <key>firstVisibleColumn</key> 202 48 <integer>0</integer> 203 49 <key>firstVisibleLine</key> 204 <integer> 43</integer>50 <integer>243</integer> 205 51 </dict> 206 <key> lib/fm/perception.rb</key>52 <key>spec/composedobject_spec.rb</key> 207 53 <dict> 208 54 <key>caret</key> … … 211 57 <integer>0</integer> 212 58 <key>line</key> 213 <integer> 66</integer>59 <integer>18</integer> 214 60 </dict> 61 <key>columnSelection</key> 62 <false/> 215 63 <key>firstVisibleColumn</key> 216 64 <integer>0</integer> 217 65 <key>firstVisibleLine</key> 218 <integer>12</integer> 66 <integer>0</integer> 67 <key>selectFrom</key> 68 <dict> 69 <key>column</key> 70 <integer>0</integer> 71 <key>line</key> 72 <integer>0</integer> 73 </dict> 74 <key>selectTo</key> 75 <dict> 76 <key>column</key> 77 <integer>0</integer> 78 <key>line</key> 79 <integer>18</integer> 80 </dict> 219 81 </dict> 220 <key> tests/animatedobject.tests.rb</key>82 <key>spec/entity_spec.rb</key> 221 83 <dict> 222 84 <key>caret</key> … … 225 87 <integer>0</integer> 226 88 <key>line</key> 227 <integer> 98</integer>89 <integer>1</integer> 228 90 </dict> 229 91 <key>firstVisibleColumn</key> 230 92 <integer>0</integer> 231 93 <key>firstVisibleLine</key> 232 <integer> 39</integer>94 <integer>0</integer> 233 95 </dict> 234 96 </dict> 235 97 <key>openDocuments</key> 236 98 <array> 237 <string>tests/animatedobject.tests.rb</string>238 <string>lib/fm/animatedobject.rb</string>239 99 <string>lib/fm/composedobject.rb</string> 240 <string>experiments/personas.rb</string> 100 <string>spec/composedobject_spec.rb</string> 101 <string>spec/entity_spec.rb</string> 241 102 <string>lib/fm/character.rb</string> 242 <string>lib/fm/perception.rb</string>243 103 </array> 244 104 <key>showFileHierarchyDrawer</key> 245 105 <true/> 246 106 <key>windowFrame</key> 247 <string>{{ 78, 0}, {1009, 1028}}</string>107 <string>{{61, 6}, {860, 1022}}</string> 248 108 </dict> 249 109 </plist> -
trunk/acceptance/epic4.rb
r250 r270 104 104 self.log.debug "Tick %d" % [@tickCount] 105 105 events = @verbs[:tick].invoke( self ) 106 self.disperse Events( events )106 self.disperse_events( events ) 107 107 self.chime if (@tickCount % 10).zero? 108 108 end … … 113 113 self.log.debug "Chime!" 114 114 events = @verbs[:chime].invoke( self ) 115 self.disperse Events( events )115 self.disperse_events( events ) 116 116 end 117 117 end … … 156 156 self.log.debug "Result from responding to chime: %p" % 157 157 [ results ] 158 self.disperse Events( results ) if results158 self.disperse_events( results ) if results 159 159 else 160 160 self.log.debug "Ignoring %s" % [ ev.class.name ] … … 194 194 ### Handle events that are sensed through auditory perception 195 195 def handleAuditoryEvent( ev ) 196 $defout.puts "Observer heard: %s" % describe Event( ev )196 $defout.puts "Observer heard: %s" % describe_event( ev ) 197 197 end 198 198 199 199 ### Handle auditory events that contain speech specially. 200 200 def handleSpeechEvent( ev ) 201 prelude = "Observer heard: %s" % describe Event( ev )201 prelude = "Observer heard: %s" % describe_event( ev ) 202 202 $defout.puts %q{%s, "%s"} % [ prelude, ev.words ] 203 203 end … … 205 205 ### Handle events sensed through visual perception. 206 206 def handleVisualEvent( ev ) 207 $defout.puts "Observer saw: %s" % describe Event( ev )207 $defout.puts "Observer saw: %s" % describe_event( ev ) 208 208 end 209 209 210 210 ### Create a sentence to describe an event. 211 def describe Event( ev )211 def describe_event( ev ) 212 212 $deferr.puts ev.inspect 213 213 -
trunk/bin/faeriemud.rb
r254 r270 47 47 # Little world class 48 48 class World < FaerieMUD::Area 49 50 def initialize( *args ) 51 @spirits = [] 52 super 53 end 54 49 55 def start 50 56 self.log.notice "Starting the world" … … 53 59 Thread.current.abort_on_exception = true 54 60 55 while Thread.current[:running] 56 tick = TickVerb.instance.invoke( self, self ) 57 immerseEvents( tick ) 61 while Thread.current[:running] 62 immerse_events( TickVerb.instance.invoke(self, self) ) 58 63 sleep 0.5 64 65 check_spirits 66 67 if @spirits.empty? 68 self.log.info "Stopping the world -- no more spirits" 69 self.stop 70 end 59 71 end 60 72 end … … 73 85 end 74 86 75 def immerseEvents( *events ) 87 def add_spirit( spirit ) 88 @spirits << spirit 89 spirit.start 90 end 91 92 def check_spirits 93 self.log.debug "Checking for dead spirits" 94 dead = @spirits.find_all {|spirit| !spirit.running? } 95 self.log.debug " found %d dead spirits" % [dead.length] 96 97 for spirit in dead 98 self.log.info "Removing dead spirit %p" % [spirit] 99 begin 100 spirit.input_thread.join 101 rescue => err 102 self.log.error "Spirit stopped with an error: %s\n %s" % 103 [ err.message, err.backtrace.join(" \n") ] 104 end 105 end 106 107 @spirits -= dead 108 end 109 110 def immerse_events( *events ) 76 111 self.log.debug "Immersing %d event/s" % events.length 77 112 super … … 110 145 # Create the world 111 146 header "FaerieMUD Explorer" 147 logger = FaerieMUD::Logger::global 148 logger.outputters << FaerieMUD::Logger::Outputter::new($deferr) 149 logger.level = :debug 112 150 113 151 # Create the character … … 123 161 # Hook up the Spirit's IO callbacks 124 162 message "Setting the Spirit's IO callbacks...\n" 125 spirit.on InputReady do |promptText|163 spirit.on_input_ready do |promptText| 126 164 $deferr.puts "Input is ready" 127 165 promptText ||= DefaultPrompt 128 166 prompt( promptText ) 129 167 end 130 spirit.on Output do |output|168 spirit.on_output do |output| 131 169 $deferr.puts "Output received" 132 170 $defout.puts( output ) … … 149 187 $deferr.sync = true 150 188 189 message "Starting the spirit and the world...\n" 190 world.add_spirit( spirit ) 151 191 world.start 152 192 193 message "World ended. Shutting down." 194 world.stop 153 195 196 -
trunk/docs/FaerieMUD Design Diagrams.graffle
r254 r270 3324 3324 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 3325 3325 3326 \f0\fs24 \cf0 + \ul add AuthorsData()\3326 \f0\fs24 \cf0 + \ul add_authors_data()\ 3327 3327 + contributors(*people:Symbol)\ 3328 +distribute Points(*people:Symbol)\3329 +make ObjectId(object:Object): String\3328 +distribute_points(*people:Symbol)\ 3329 +make_object_id(object:Object): String\ 3330 3330 +rev: Integer\ 3331 3331 +abstract(methodName:Symbol)\ … … 3908 3908 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 3909 3909 3910 \f0\fs24 \cf0 - event HandlerCache: Hash}</string>3910 \f0\fs24 \cf0 - event_handler_cache: Hash}</string> 3911 3911 </dict> 3912 3912 <key>TextPlacement</key> … … 3953 3953 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 3954 3954 3955 \f0\fs24 \cf0 + handle Events( *events=Event )\3956 - handle AnyEvent( event=Event )\3957 - get HandlerForEvent( event=Event )}</string>3955 \f0\fs24 \cf0 + handle_events( *events=Event )\ 3956 - handle_any_event( event=Event )\ 3957 - get_handler_for_event( event=Event )}</string> 3958 3958 </dict> 3959 3959 <key>TextPlacement</key> … … 13504 13504 13505 13505 \f0\fs24 \cf0 + parser: CommandParser\ 13506 + animated Objects: Array\13506 + animated_objects: Array\ 13507 13507 + statistics: Hash}</string> 13508 13508 </dict> -
trunk/docs/makedocs.rb
r212 r270
