package com.planet_ink.coffee_mud.Behaviors;
import com.planet_ink.coffee_mud.core.interfaces.*;
import com.planet_ink.coffee_mud.core.*;
import com.planet_ink.coffee_mud.core.collections.*;
import com.planet_ink.coffee_mud.Abilities.interfaces.*;
import com.planet_ink.coffee_mud.Areas.interfaces.*;
import com.planet_ink.coffee_mud.Behaviors.interfaces.*;
import com.planet_ink.coffee_mud.CharClasses.interfaces.*;
import com.planet_ink.coffee_mud.Commands.interfaces.*;
import com.planet_ink.coffee_mud.Common.interfaces.*;
import com.planet_ink.coffee_mud.Exits.interfaces.*;
import com.planet_ink.coffee_mud.Items.interfaces.*;
import com.planet_ink.coffee_mud.Libraries.interfaces.*;
import com.planet_ink.coffee_mud.Locales.interfaces.*;
import com.planet_ink.coffee_mud.MOBS.interfaces.*;
import com.planet_ink.coffee_mud.Races.interfaces.*;
import java.util.*;
/*
Copyright 2001-2019 Bo Zimmerman
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.
*/
public class StdBehavior implements Behavior
{
@Override
public String ID()
{
return "StdBehavior";
}
@Override
public String name()
{
return ID();
}
protected int canImproveCode()
{
return Behavior.CAN_MOBS;
}
@Override
public long flags()
{
return 0;
}
@Override
public boolean grantsAggressivenessTo(final MOB M)
{
return false;
}
@Override
public int getTickStatus()
{
return Tickable.STATUS_NOT;
}
@Override
public void initializeClass()
{
}
@Override
public String accountForYourself()
{
return "";
}
public StdBehavior()
{
super();
//CMClass.bumpCounter(this,CMClass.CMObjectType.BEHAVIOR);//removed for perf
}
protected String parms = "";
protected boolean isSavableBehavior = true;
/** return a new instance of the object*/
@Override
public CMObject newInstance()
{
try
{
return this.getClass().newInstance();
}
catch(final Exception e)
{
Log.errOut(ID(),e);
}
return new StdBehavior();
}
@Override
public CMObject copyOf()
{
try
{
final Behavior B=(Behavior)this.clone();
//CMClass.bumpCounter(B,CMClass.CMObjectType.BEHAVIOR);//removed for perf
B.setParms(getParms());
return B;
}
catch(final CloneNotSupportedException e)
{
return new StdBehavior();
}
}
@Override
public void registerDefaultQuest(final String questName)
{
}
@Override
public void startBehavior(final PhysicalAgent forMe)
{
}
@Override
public void endBehavior(PhysicalAgent forMe)
{
}
/*
protected void finalize()
{
CMClass.unbumpCounter(this, CMClass.CMObjectType.BEHAVIOR);
}// removed for perf
*/
@Override
public void setSavable(final boolean truefalse)
{
isSavableBehavior = truefalse;
}
@Override
public boolean isSavable()
{
return isSavableBehavior;
}
@Override
public boolean amDestroyed()
{
return false;
}
@Override
public void destroy()
{
parms = "";
}
protected MOB getBehaversMOB(final Tickable ticking)
{
if(ticking==null)
return null;
if(ticking instanceof MOB)
return (MOB)ticking;
else
if(ticking instanceof Item)
{
if(((Item)ticking).owner() != null)
{
if(((Item)ticking).owner() instanceof MOB)
return (MOB)((Item)ticking).owner();
}
}
return null;
}
protected Room getBehaversRoom(final Tickable ticking)
{
if(ticking==null)
return null;
if(ticking instanceof Room)
return (Room)ticking;
final MOB mob=getBehaversMOB(ticking);
if(mob!=null)
return mob.location();
if(ticking instanceof Item)
{
if(((Item)ticking).owner() != null)
{
if(((Item)ticking).owner() instanceof Room)
return (Room)((Item)ticking).owner();
}
}
return null;
}
@Override
public String getParms()
{
return parms;
}
@Override
public void setParms(final String parameters)
{
parms = parameters;
}
@Override
public String parmsFormat()
{
return CMParms.FORMAT_UNDEFINED;
}
@Override
public int compareTo(final CMObject o)
{
return CMClass.classID(this).compareToIgnoreCase(CMClass.classID(o));
}
@Override
public List<String> externalFiles()
{
return null;
}
@Override
public void executeMsg(final Environmental host, final CMMsg msg)
{
return;
}
@Override
public boolean okMessage(final Environmental host, final CMMsg msg)
{
return true;
}
@Override
public boolean canImprove(final int can_code)
{
return CMath.bset(canImproveCode(), can_code);
}
@Override
public boolean canImprove(final PhysicalAgent E)
{
if((E==null)&&(canImproveCode()==0))
return true;
if(E==null)
return false;
if((E instanceof MOB)&&((canImproveCode()&Ability.CAN_MOBS)>0))
return true;
if((E instanceof Item)&&((canImproveCode()&Ability.CAN_ITEMS)>0))
return true;
if((E instanceof Exit)&&((canImproveCode()&Ability.CAN_EXITS)>0))
return true;
if((E instanceof Room)&&((canImproveCode()&Ability.CAN_ROOMS)>0))
return true;
if((E instanceof Area)&&((canImproveCode()&Ability.CAN_AREAS)>0))
return true;
return false;
}
protected static String I(final String str)
{
return CMLib.lang().commandWordTranslation(str);
}
public static boolean canActAtAll(final Tickable affecting)
{
return CMLib.flags().canActAtAll(affecting);
}
public static boolean canFreelyBehaveNormal(final Tickable affecting)
{
return CMLib.flags().canFreelyBehaveNormal(affecting);
}
@Override
public boolean tick(final Tickable ticking, final int tickID)
{
if((ticking instanceof Environmental) && (((Environmental)ticking).amDestroyed()))
return false;
return true;
}
/**
* Localize an internal string -- shortcut. Same as calling:
* @see com.planet_ink.coffee_mud.Libraries.interfaces.LanguageLibrary#fullSessionTranslation(String, String...)
* Call with the string to translate, which may contain variables of the form @x1, @x2, etc. The array in xs
* is then used to replace the variables AFTER the string is translated.
* @param str the string to translate
* @param xs the array of variables to replace
* @return the translated string, with all variables in place
*/
public String L(final String str, final String ... xs)
{
return CMLib.lang().fullSessionTranslation(str, xs);
}
protected static final String[] CODES = { "CLASS", "TEXT" };
@Override
public String[] getStatCodes()
{
return CODES;
}
protected int getCodeNum(final String code)
{
for(int i=0;i<CODES.length;i++)
{
if(code.equalsIgnoreCase(CODES[i]))
return i;
}
return -1;
}
@Override
public String getStat(final String code)
{
switch(getCodeNum(code))
{
case 0:
return ID();
case 1:
return getParms();
}
return "";
}
@Override
public void setStat(final String code, final String val)
{
switch(getCodeNum(code))
{
case 0:
return;
case 1:
setParms(val);
break;
}
}
@Override
public int getSaveStatIndex()
{
return getStatCodes().length;
}
@Override
public boolean isStat(final String code)
{
return CMParms.indexOf(getStatCodes(), code.toUpperCase().trim()) >= 0;
}
public boolean sameAs(final Behavior E)
{
if(!(E instanceof StdBehavior))
return false;
for(int i=0;i<CODES.length;i++)
{
if(!E.getStat(CODES[i]).equals(getStat(CODES[i])))
return false;
}
return true;
}
}