package std.game.objects.alive
import std.game.objects.views.MOBView
import std.game.behaviours.TriggeredBehaviour
import org.apache.log4j.Logger
import groovy.util.Eval
import std.game.behaviours.Behaviour
import org.groovymud.object.views.View
import org.groovymud.engine.event.EventScope
import org.groovymud.object.alive.Alive
import org.groovymud.engine.event.EventScope
import org.groovymud.engine.event.ScopedEvent
import org.groovymud.engine.event.messages.MessageEvent
import org.groovymud.engine.event.system.MovementEvent
import std.game.objects.containers.ContainerImpl
import org.groovymud.shell.telnetd.ExtendedTerminalIO
import org.groovymud.object.MudObject
import org.groovymud.object.room.Exit
import static org.groovymud.utils.WordUtils.affixDefiniteArticle
/**
* 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.
*/
class MOBImpl extends ContainerImpl implements MudObject, Alive {
private static final Logger logger = Logger.getLogger(MOBImpl)
Collection principals
transient ExtendedTerminalIO terminalOutput = null;
boolean dead
boolean inCombat = false
long hitPoints;
String gender;
String oldDescription
String oldName
String leaves = "leaves"
String arrives = "arrives from"
def departureMessage = {direction -> "${name} ${leaves} ${affixDefiniteArticle(direction)}"}
def arrivalMessage = {direction -> "${name} ${arrives} ${affixDefiniteArticle(direction)}"}
@Override
void addStatus(String status) {
if(status == "net dead"){
oldDescription = getDescription()
setDescription ("$oldDescription ${getName()} looks all white and chalky...")
oldName = getName()
setName("The net dead statue of $oldName")
}
}
@Override
void removeStatus(String status) {
if(status == "net dead"){
setDescription ("$oldDescription")
setName(oldName)
}
}
def methodMissing(String name, args){
def retObject = null
boolean done = super.doCommand(this as Alive, name as String, args as String)
if(!done){
def argsAsString = (args != null && args.size() > 0) ? args[0] : null
try{
retObject = interpreter.doCommand(name, argsAsString, this)
done = true
}catch(ResourceException e){
throw new MissingMethodException(name, this.class, args)
}
}
return retObject
}
void onMudEvent(ScopedEvent arg) {
super.onMudEvent(arg)
def out = getTerminalOutput()
if (arg instanceof MessageEvent) {
MessageEvent event = (MessageEvent) arg;
if (getTerminalOutput() != null) {
try {
def message = event.getMessage(this)
if(message != null){
out.writeln(message);
}
} catch (IOException e) {
logger.error(e.getMessage());
}
}
}
}
public String getDepartureMessage(Exit direction){
return departureMessage(direction)
}
public String getArrivalMessage(Exit direction){
return arrivalMessage(direction)
}
}