groovy/mudspace/domains/minnovar/
groovy/mudspace/domains/minnovar/objects/containers/
groovy/mudspace/domains/minnovar/objects/mobs/
groovy/mudspace/domains/minnovar/objects/mobs/scripts/
groovy/mudspace/domains/minnovar/objects/weapons/
groovy/mudspace/domains/minnovar/town/
groovy/mudspace/resources/
groovy/mudspace/std/
groovy/mudspace/std/game/
groovy/mudspace/std/game/guild/
groovy/mudspace/std/game/guild/skill/
groovy/mudspace/std/game/objects/
groovy/mudspace/std/game/objects/alive/
groovy/mudspace/std/game/objects/bodyparts/
groovy/mudspace/std/game/objects/containers/
groovy/mudspace/std/game/objects/exits/
groovy/mudspace/std/game/objects/exits/events/
groovy/mudspace/std/game/objects/trappings/
groovy/mudspace/std/game/objects/views/
groovy/mudspace/std/game/races/
groovy/scripts/
groovy/scripts/commands/creator/
groovy/scripts/commands/god/
scripts/
package std
/**
 * Copyright 2008 Matthew Corby-Eaglen
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
import std.game.objects.exits.ExitImpl
import org.groovymud.object.MudObject
import org.groovymud.engine.event.EventScope
import org.groovymud.shell.security.PlayerCredentials
import javax.security.auth.Subject
import org.groovymud.object.views.ViewImpl
import grails.spring.BeanBuilder

import std.game.objects.containers.RoomImpl
import std.game.objects.alive.MOBImpl
import std.game.objects.alive.PlayerImpl
import org.groovymud.object.ObjectLocation
import std.game.objects.MudObjectImpl
import std.game.objects.containers.ContainerImpl
import org.groovymud.object.registry.InventoryHandler
import org.groovymud.object.views.ContainerView
import org.groovymud.object.registry.MudObjectAttendant
import org.springframework.scripting.support.ScriptFactoryPostProcessor

import std.game.objects.views.ExitView
import std.game.objects.views.RoomView
import std.game.objects.views.MOBView

import utils.ClosureDelegate
import groovy.util.ResourceException
beans{
	
	mobView(MOBView)
	
	inventory(InventoryHandler){bean ->
		bean.scope = "prototype"
		registry = ref("registry", true)
	}
	
	exitView(ExitView);
	
	viewImpl(ViewImpl)
	
	roomView(RoomView)
	
	containerView(ContainerView)
	
	baseMudObject(MudObjectImpl){ bean->
		bean.'abstract' = true
		bean.lazyInit = true
		bean.initMethod = 'initialise'
		registry = ref("registry", true)
		interpreter = ref("interpreter", true)
		
		bean.scope = 'prototype'
		view = viewImpl
	}
	
	baseContainer(ContainerImpl){bean->
		bean.'abstract' = true
		bean.parent = baseMudObject
		bean.scope = 'prototype'
		bean.lazyInit = true
		inventoryHandler = inventory
		view = containerView
		scope = EventScope.CONTAINER_SCOPE
	}
	baseExit(ExitImpl){bean->
		bean.parent = baseMudObject
		bean.scope = 'prototype'
		bean.lazyInit = true
		bean.'abstract' = true	
		view = exitView
		commandInterpreter = ref("interpreter", true)
		articleRequired = false
	}
	baseRoom(RoomImpl){ bean ->
		bean.parent = baseContainer
		bean.'abstract' = true
		bean.lazyInit = true
		bean.scope = 'prototype'
		exitInventory = inventory
		scope = EventScope.ROOM_SCOPE
		view = roomView
	}
	
	baseMob(MOBImpl){ bean ->
		bean.parent = baseContainer		
		bean.'abstract' = true
		bean.scope = 'prototype'
		bean.lazyInit = true
		articleRequired = true
		view = mobView
		scope = EventScope.PLAYER_SCOPE
	}
		
	playerSubject(Subject);
	
	"playerImpl"(PlayerImpl){ bean ->
		bean.parent = baseMob	
		bean.scope = 'prototype'
		bean.lazyInit = true
		subject = playerSubject
		containerLocation = {ObjectLocation l -> 
			definition = "domains/minnovar/town/TownArea.groovy"
			beanId = "domains:minnovar:TownArea:townCentre"
		}		
		description = '${it.getName()} looks pretty cool.'
		articleRequired = false
	}
	
	"theVoid"(RoomImpl, id:"stdVoid", name:"void", shortNames:["void"]){ bean ->
		bean.parent = baseRoom		
		bean.lazyInit = true
		description = 'You are standing in the void. This is where everything goes that doesn\'t have a room to speak of.'
	}
	
	"armageddon"(MOBImpl, id:"stdArmageddon", name:"Armageddon", shortNames:["armageddon"]){bean->
		bean.parent = baseMob
		bean.lazyInit = true
		articleRequired = false
		description = 'Armegeddon, bringer of shutdowns'
	}
	
}