package com.planet_ink.coffee_mud.Locales;
import com.planet_ink.coffee_mud.core.interfaces.*;
import com.planet_ink.coffee_mud.core.interfaces.ItemPossessor.Expire;
import com.planet_ink.coffee_mud.core.interfaces.ItemPossessor.Move;
import com.planet_ink.coffee_mud.core.*;
import com.planet_ink.coffee_mud.core.collections.*;
import com.planet_ink.coffee_mud.Abilities.Properties.Property;
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 2006-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 ThinRoom implements Room
{
@Override
public String ID()
{
return "ThinRoom";
}
@Override
public String name()
{
return "A Thin Room";
}
@Override
public String Name()
{
return name();
}
@Override
public String description()
{
return "";
}
@Override
public String displayText()
{
return "";
}
@Override
public String displayText(final MOB mob)
{
return "";
}
@Override
public String description(final MOB mob)
{
return "";
}
@Override
public int maxRange()
{
return 5;
}
@Override
public int minRange()
{
return 0;
}
@Override
public boolean isSavable()
{
return false;
}
@Override
public void setSavable(final boolean truefalse)
{
}
@Override
public int getTickStatus()
{
return Tickable.STATUS_NOT;
}
protected String roomID = "";
protected Area myArea = null;
protected static final Vector<Integer> empty = new ReadOnlyVector<Integer>(1);
protected static final Exit[] exits = new Exit[Directions.NUM_DIRECTIONS()];
protected static final Room[] rooms = new Room[Directions.NUM_DIRECTIONS()];
@Override
public String roomID()
{
return roomID;
}
@Override
public void setRoomID(final String newRoomID)
{
roomID = newRoomID;
}
@Override
public void initializeClass()
{
}
@Override
public String getContextName(final Environmental E)
{
return E == null ? "nothing" : E.name();
}
@Override
public int getAtmosphereCode()
{
return ATMOSPHERE_INHERIT;
}
@Override
public int getAtmosphere()
{
return (myArea != null) ? myArea.getAtmosphere() : RawMaterial.RESOURCE_AIR;
}
@Override
public void setAtmosphere(final int resourceCode)
{
}
@Override
public int domainType()
{
return Room.DOMAIN_OUTDOORS_CITY;
}
@Override
public int getClimateTypeCode()
{
return CLIMASK_INHERIT;
}
@Override
public int getClimateType()
{
return (myArea == null) ? CLIMASK_NORMAL : myArea.getClimateType();
}
@Override
public void setClimateType(final int climate)
{
}
@Override
public int myResource()
{
return -1;
}
@Override
public void setResource(final int resourceCode)
{
}
@Override
public List<Integer> resourceChoices()
{
return empty;
}
@Override
public void toggleMobility(final boolean onoff)
{
}
@Override
public boolean getMobility()
{
return true;
}
protected volatile boolean recurse = false;
@Override
public boolean isHere(final Environmental E)
{
return false;
}
@Override
public void setRawExit(final int direction, final Exit E)
{
if(E != null)
exits[direction]=E;
else
exits[direction]=null;
}
@Override
public Room prepareRoomInDir(final Room R, final int direction)
{
if(R==null)
return null;
if((roomID==null)||(roomID.length()==0)||(recurse))
return null;
try
{
recurse=true;
Room myR=null;
synchronized(("SYNC"+roomID).intern())
{
myR=CMLib.map().getRoom(roomID);
if(myR==null)
{
myR=CMLib.database().DBReadRoom(roomID,false);
if(myR!=null)
{
CMLib.database().DBReadRoomExits(roomID,myR,false);
CMLib.database().DBReadContent(roomID,myR,true);
myR.getArea().fillInAreaRoom(R);
if(CMath.bset(myR.getArea().flags(),Area.FLAG_THIN))
myR.setExpirationDate(System.currentTimeMillis()+WorldMap.ROOM_EXPIRATION_MILLIS);
}
}
}
if((myR!=null)
&&(direction>=0)
&&(direction<Directions.NUM_DIRECTIONS())
&&(R.rawDoors()[direction]==this))
{
R.rawDoors()[direction]=myR;
final MOB mob=CMClass.getFactoryMOB("the wind",1,R);
try
{
R.executeMsg(mob, CMClass.getMsg(mob, R, CMMsg.MSG_NEWROOM, null));
}
finally
{
mob.destroy();
}
}
if(myR!=null)
{
if(myR instanceof ThinRoom) // the purpose of a thin room is to be expanded when requested.
return null;
return myR.prepareRoomInDir(R,direction);
}
}
finally
{
recurse=false;
}
return null;
}
@Override
public void startItemRejuv()
{
}
@Override
public void recoverRoomStats()
{
}
@Override
public long expirationDate()
{
return 0;
}
@Override
public void setExpirationDate(final long time)
{
}
@Override
public void clearSky()
{
}
@Override
public void giveASky(final int depth)
{
}
@Override
public List<Room> getSky()
{
final List<Room> skys = new Vector<Room>(0);
return skys;
}
@Override
public Area getArea()
{
return myArea;
}
@Override
public void setArea(final Area newArea)
{
myArea = newArea;
}
@Override
public void setGridParent(final GridLocale room)
{
}
@Override
public GridLocale getGridParent()
{
return null;
}
@Override
public Room[] rawDoors()
{
return rooms;
}
@Override
public Exit getRawExit(final int dir)
{
if(dir<exits.length)
return exits[dir];
return null;
}
@Override
public int getReverseDir(final int direction)
{
if((direction<0)||(direction>=Directions.NUM_DIRECTIONS()))
return -1;
final Room opRoom=getRoomInDir(direction);
if(opRoom!=null)
{
if(direction == Directions.GATE)
return Directions.GATE;
final int formalOpDir=Directions.getOpDirectionCode(direction);
if(opRoom.rawDoors()[formalOpDir]==this)
return formalOpDir;
if(opRoom.getRoomInDir(formalOpDir)==this)
return formalOpDir;
for(int d=0;d<Directions.NUM_DIRECTIONS();d++)
{
if(opRoom.rawDoors()[d]==this)
return d;
}
return formalOpDir;
}
return -1;
}
@Override
public Exit getReverseExit(final int direction)
{
final int opDir=getReverseDir(direction);
if((opDir<0)||(opDir>=Directions.NUM_DIRECTIONS()))
return null;
final Room opRoom=getRoomInDir(direction);
if(opRoom!=null)
return opRoom.getExitInDir(opDir);
return null;
}
@Override
public Exit getPairedExit(final int direction)
{
final Exit opExit=getReverseExit(direction);
final Exit myExit=getExitInDir(direction);
if((myExit==null)||(opExit==null))
return null;
if(myExit.hasADoor()!=opExit.hasADoor())
return null;
return opExit;
}
@Override
public Room getRoomInDir(final int direction)
{
return null;
}
@Override
public Exit getExitInDir(final int direction)
{
return null;
}
@Override
public int pointsPerMove()
{
return 0;
}
@Override
public int thirstPerRound()
{
return 0;
}
@Override
public void send(final MOB source, final CMMsg msg)
{
}
@Override
public void sendOthers(final MOB source, final CMMsg msg)
{
}
@Override
public void showHappens(final int allCode, final String allMessage)
{
}
@Override
public void showHappens(final int allCode, final Environmental like, final String allMessage)
{
}
@Override
public boolean show(final MOB source,
final Environmental target,
final int allCode,
final String allMessage)
{
return true;
}
@Override
public boolean show(final MOB source,
final Environmental target,
final Environmental tool,
final int allCode,
final String allMessage)
{
return true;
}
@Override
public boolean show(final MOB source,
final Environmental target,
final Environmental tool,
final int srcCode,
final int tarCode,
final int othCode,
final String allMessage)
{
return true;
}
@Override
public boolean show(final MOB source,
final Environmental target,
final Environmental tool,
final int srcCode,
final String srcMessage,
final int tarCode,
final String tarMessage,
final int othCode,
final String othMessage)
{
return true;
}
@Override
public boolean show(final MOB source,
final Environmental target,
final Environmental tool,
final int allCode,
final String srcMessage,
final String tarMessage,
final String othMessage)
{
return true;
}
@Override
public boolean showOthers(final MOB source,
final Environmental target,
final int allCode,
final String allMessage)
{
return true;
}
@Override
public boolean showSource(final MOB source,
final Environmental target,
final int allCode,
final String allMessage)
{
return true;
}
@Override
public boolean showOthers(final MOB source,
final Environmental target,
final Environmental tool,
final int allCode,
final String allMessage)
{
return true;
}
@Override
public boolean showSource(final MOB source,
final Environmental target,
final Environmental tool,
final int allCode,
final String allMessage)
{
return true;
}
@Override
public void eachInhabitant(final EachApplicable<MOB> applier)
{
}
@Override
public MOB fetchInhabitant(final String inhabitantID)
{
return null;
}
@Override
public MOB fetchInhabitantExact(final String inhabitantID)
{
return null;
}
@Override
public MOB fetchRandomInhabitant()
{
return null;
}
@Override
public List<MOB> fetchInhabitants(final String inhabitantID)
{
return new Vector<MOB>(1);
}
@Override
public void addInhabitant(final MOB mob)
{
}
@Override
public void delInhabitant(final MOB mob)
{
}
@Override
public void delAllInhabitants(final boolean destroy)
{
}
@Override
public int numInhabitants()
{
return 0;
}
private static final Enumeration<MOB> emptyMobs = new EmptyEnumeration<MOB>();
@Override
public Enumeration<MOB> inhabitants()
{
return emptyMobs;
}
@Override
public boolean isInhabitant(final MOB mob)
{
return false;
}
@Override
public MOB fetchInhabitant(final int i)
{
return null;
}
@Override
public int numPCInhabitants()
{
return 0;
}
public MOB fetchPCInhabitant(final int i)
{
return null;
}
@Override
public void bringMobHere(final MOB mob, final boolean andFollowers)
{
}
@Override
public void setName(final String newName)
{
}
@Override
public void setDescription(final String newDescription)
{
}
@Override
public void setDisplayText(final String newDisplayText)
{
}
@Override
public String image()
{
return "";
}
@Override
public String rawImage()
{
return "";
}
@Override
public void setImage(final String newImage)
{
}
@Override
public String name(final MOB viewerMob)
{
return name();
}
@Override
public void addItem(final Item item)
{
}
@Override
public void addItem(final Item item, final Expire expire)
{
}
@Override
public void delItem(final Item item)
{
}
@Override
public void delAllItems(final boolean destroy)
{
}
@Override
public int numItems()
{
return 0;
}
@Override
public boolean isContent(final Item item)
{
return false;
}
@Override
public Item findItem(final Item goodLocation, final String itemID)
{
return null;
}
@Override
public Item getItem(final int i)
{
return null;
}
@Override
public void eachItem(final EachApplicable<Item> applier)
{
}
@Override
public Item getRandomItem()
{
return null;
}
private static final Enumeration<Item> emptyItems = new EmptyEnumeration<Item>();
@Override
public Enumeration<Item> items()
{
return emptyItems;
}
@Override
public Enumeration<Item> itemsRecursive()
{
return emptyItems;
}
public Item getItem(final String s)
{
return null;
}
public Item getItem(final Item goodLocation, final String s)
{
return null;
}
@Override
public Item findItem(final String itemID)
{
return null;
}
@Override
public void moveItemTo(final Item item, final Expire expire, final Move... moveFlags)
{
}
@Override
public void moveItemTo(final Item container)
{
}
@Override
public List<Item> findItems(final String itemID)
{
return new Vector<Item>(1);
}
@Override
public List<Item> findItems(final Item goodLocation, final String itemID)
{
return new Vector<Item>(1);
}
@Override
public Exit fetchExit(final String thingName)
{
return null;
}
@Override
public PhysicalAgent fetchFromRoomFavorExits(final String thingName)
{
return null;
}
@Override
public PhysicalAgent fetchFromRoomFavorItems(final Item goodLocation, final String thingName)
{
return null;
}
@Override
public PhysicalAgent fetchFromMOBRoomItemExit(final MOB mob, final Item goodLocation, final String thingName, final Filterer<Environmental> filter)
{
return null;
}
@Override
public PhysicalAgent fetchFromRoomFavorMOBs(final Item goodLocation, final String thingName)
{
return null;
}
@Override
public PhysicalAgent fetchFromMOBRoomFavorsItems(final MOB mob, final Item goodLocation, final String thingName, final Filterer<Environmental> filter)
{
return null;
}
@Override
public PhysicalAgent fetchFromMOBRoomFavorsMOBs(final MOB mob, final Item goodLocation, final String thingName, final Filterer<Environmental> filter)
{
return null;
}
@Override
public void addEffect(final Ability to)
{
}
@Override
public void addNonUninvokableEffect(final Ability to)
{
}
@Override
public void delEffect(final Ability to)
{
}
@Override
public void delAllEffects(final boolean unInvoke)
{
}
@Override
public void eachEffect(final EachApplicable<Ability> applier)
{
}
@Override
public int numEffects()
{
return 0;
}
private static final Enumeration<Ability> emptyEffects = new EmptyEnumeration<Ability>();
@Override
public Enumeration<Ability> effects()
{
return emptyEffects;
}
@Override
public Ability fetchEffect(final int index)
{
return null;
}
@Override
public Ability fetchEffect(final String ID)
{
return null;
}
@Override
public void addBehavior(final Behavior to)
{
}
@Override
public void delBehavior(final Behavior to)
{
}
@Override
public void delAllBehaviors()
{
}
@Override
public int numBehaviors()
{
return 0;
}
private static final Enumeration<Behavior> emptyBehaviors = new EmptyEnumeration<Behavior>();
@Override
public Enumeration<Behavior> behaviors()
{
return emptyBehaviors;
}
@Override
public Behavior fetchBehavior(final int index)
{
return null;
}
@Override
public void eachBehavior(final EachApplicable<Behavior> applier)
{
}
@Override
public Behavior fetchBehavior(final String ID)
{
return null;
}
@Override
public void addScript(final ScriptingEngine S)
{
}
@Override
public void delScript(final ScriptingEngine S)
{
}
@Override
public void delAllScripts()
{
}
@Override
public int numScripts()
{
return 0;
}
private static final Enumeration<ScriptingEngine> emptyScripts = new EmptyEnumeration<ScriptingEngine>();
@Override
public Enumeration<ScriptingEngine> scripts()
{
return emptyScripts;
}
@Override
public ScriptingEngine fetchScript(final int x)
{
return null;
}
@Override
public void eachScript(final EachApplicable<ScriptingEngine> applier)
{
}
@Override
public boolean isGeneric()
{
return false;
}
@Override
public int getSaveStatIndex()
{
return getStatCodes().length;
}
private static final String[] CODES = { "CLASS" };
@Override
public String[] getStatCodes()
{
return CODES;
}
@Override
public String L(final String str, final String... xs)
{
return CMLib.lang().fullSessionTranslation(str, xs);
}
@Override
public boolean isStat(final String code)
{
return CMParms.indexOf(getStatCodes(), code.toUpperCase().trim()) >= 0;
}
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();
}
return "";
}
@Override
public void setStat(final String code, final String val)
{
switch(getCodeNum(code))
{
case 0:
return;
}
}
@Override
public boolean sameAs(final Environmental E)
{
return E == this;
}
@Override
public CMObject copyOf()
{
try
{
final ThinRoom E=(ThinRoom)this.clone();
//CMClass.bumpCounter(E,CMClass.CMObjectType.LOCALE);//removed for mem & perf
return E;
}
catch(final CloneNotSupportedException e)
{
return this.newInstance();
}
}
private boolean amDestroyed = false;
@Override
public void destroy()
{
amDestroyed = true;
}
@Override
public boolean amDestroyed()
{
return amDestroyed;
}
protected static final PhyStats phyStats = (PhyStats) CMClass.getCommon("DefaultPhyStats");
@Override
public PhyStats phyStats()
{
return phyStats;
}
@Override
public PhyStats basePhyStats()
{
return phyStats;
}
/*
protected void finalize()
{
CMClass.unbumpCounter(this, CMClass.CMObjectType.ABILITY);
}// removed for mem & perf
*/
@Override
public void recoverPhyStats()
{
}
@Override
public void setBasePhyStats(final PhyStats newStats)
{
}
@Override
public CMObject newInstance()
{
try
{
return this.getClass().newInstance();
}
catch (final Exception e)
{
Log.errOut(ID(), e);
}
return new ThinRoom();
}
@Override
public int compareTo(final CMObject o)
{
return CMClass.classID(this).compareToIgnoreCase(CMClass.classID(o));
}
@Override
public void setMiscText(final String newMiscText)
{
}
@Override
public String text()
{
return "";
}
@Override
public String miscTextFormat()
{
return CMParms.FORMAT_UNDEFINED;
}
@Override
public void affectPhyStats(final Physical affected, final PhyStats affectableStats)
{
}
@Override
public void affectCharStats(final MOB affectedMob, final CharStats affectableStats)
{
}
@Override
public void affectCharState(final MOB affectedMob, final CharState affectableMaxState)
{
}
@Override
public void executeMsg(final Environmental myHost, final CMMsg msg)
{
return;
}
@Override
public boolean okMessage(final Environmental myHost, final CMMsg msg)
{
return true;
}
@Override
public boolean tick(final Tickable ticking, final int tickID)
{
return true;
}
@Override
public int getCombatTurnMobIndex()
{
return 0;
}
@Override
public void setCombatTurnMobIndex(final int index)
{
}
}