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-2016 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(MOB mob) { return ""; } @Override public String description(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(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(String newRoomID) { roomID = newRoomID; } @Override public void initializeClass() { } @Override public String getContextName(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(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(int climate) { } @Override public int myResource() { return -1; } @Override public void setResource(int resourceCode) { } @Override public List<Integer> resourceChoices() { return empty; } @Override public void toggleMobility(boolean onoff) { } @Override public boolean getMobility() { return true; } private boolean recurse = false; @Override public boolean isHere(Environmental E) { return false; } @Override public void setRawExit(int direction, Exit E) { if(E != null) exits[direction]=E; else exits[direction]=null; } @Override public Room prepareRoomInDir(Room R, int direction) { if(R==null) return null; if((roomID==null)||(roomID.length()==0)||(recurse)) return null; 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; recurse=false; if(myR instanceof ThinRoom) return myR; if(myR!=null) return myR.prepareRoomInDir(R,direction); return null; } @Override public void startItemRejuv() { } @Override public void recoverRoomStats() { } @Override public long expirationDate() { return 0; } @Override public void setExpirationDate(long time) { } @Override public void clearSky() { } @Override public void giveASky(int depth) { } @Override public Area getArea() { return myArea; } @Override public void setArea(Area newArea) { myArea = newArea; } @Override public void setGridParent(GridLocale room) { } @Override public GridLocale getGridParent() { return null; } @Override public Room[] rawDoors() { return rooms; } @Override public Exit getRawExit(int dir) { if(dir<exits.length) return exits[dir]; return null; } @Override public Exit getReverseExit(int direction) { return null; } @Override public Exit getPairedExit(int direction) { return null; } @Override public Room getRoomInDir(int direction) { return null; } @Override public Exit getExitInDir(int direction) { return null; } @Override public int pointsPerMove() { return 0; } @Override public int thirstPerRound() { return 0; } @Override public void send(MOB source, CMMsg msg) { } @Override public void sendOthers(MOB source, CMMsg msg) { } @Override public void showHappens(int allCode, String allMessage) { } @Override public void showHappens(int allCode, Environmental like, String allMessage) { } @Override public boolean show(MOB source, Environmental target, int allCode, String allMessage){return true;} @Override public boolean show(MOB source, Environmental target, Environmental tool, int allCode, String allMessage){return true;} @Override public boolean show(MOB source, Environmental target, Environmental tool, int srcCode, int tarCode, int othCode, String allMessage){return true;} @Override public boolean show(MOB source, Environmental target, Environmental tool, int srcCode, String srcMessage, int tarCode, String tarMessage, int othCode, String othMessage){return true;} @Override public boolean show(MOB source, Environmental target, Environmental tool, int allCode, String srcMessage, String tarMessage, String othMessage){return true;} @Override public boolean showOthers(MOB source, Environmental target, int allCode, String allMessage){return true;} @Override public boolean showSource(MOB source, Environmental target, int allCode, String allMessage){return true;} @Override public boolean showOthers(MOB source, Environmental target, Environmental tool, int allCode, String allMessage){return true;} @Override public boolean showSource(MOB source, Environmental target, Environmental tool, int allCode, String allMessage){return true;} @Override public void eachInhabitant(final EachApplicable<MOB> applier) { } @Override public MOB fetchInhabitant(String inhabitantID) { return null; } @Override public MOB fetchRandomInhabitant() { return null; } @Override public List<MOB> fetchInhabitants(String inhabitantID) { return new Vector<MOB>(1); } @Override public void addInhabitant(MOB mob) { } @Override public void delInhabitant(MOB mob) { } @Override public void delAllInhabitants(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(MOB mob) { return false; } @Override public MOB fetchInhabitant(int i) { return null; } @Override public int numPCInhabitants() { return 0; } public MOB fetchPCInhabitant(int i) { return null; } @Override public void bringMobHere(MOB mob, boolean andFollowers) { } @Override public void setName(String newName) { } @Override public void setDescription(String newDescription) { } @Override public void setDisplayText(String newDisplayText) { } @Override public String image() { return ""; } @Override public String rawImage() { return ""; } @Override public void setImage(String newImage) { } @Override public String name(MOB viewerMob) { return name(); } @Override public void addItem(Item item) { } @Override public void addItem(Item item, Expire expire) { } @Override public void delItem(Item item) { } @Override public void delAllItems(boolean destroy) { } @Override public int numItems() { return 0; } @Override public boolean isContent(Item item) { return false; } @Override public Item findItem(Item goodLocation, String itemID) { return null; } @Override public Item getItem(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; } public Item getItem(String s) { return null; } public Item getItem(Item goodLocation, String s) { return null; } @Override public Item findItem(String itemID) { return null; } @Override public void moveItemTo(Item item, Expire expire, Move... moveFlags) { } @Override public void moveItemTo(Item container) { } @Override public List<Item> findItems(String itemID) { return new Vector<Item>(1); } @Override public List<Item> findItems(Item goodLocation, String itemID) { return new Vector<Item>(1); } @Override public Exit fetchExit(String thingName) { return null; } @Override public PhysicalAgent fetchFromRoomFavorExits(String thingName) { return null; } @Override public PhysicalAgent fetchFromRoomFavorItems(Item goodLocation, String thingName) { return null; } @Override public PhysicalAgent fetchFromMOBRoomItemExit(MOB mob, Item goodLocation, String thingName, Filterer<Environmental> filter) { return null; } @Override public PhysicalAgent fetchFromRoomFavorMOBs(Item goodLocation, String thingName) { return null; } @Override public PhysicalAgent fetchFromMOBRoomFavorsItems(MOB mob, Item goodLocation, String thingName, Filterer<Environmental> filter) { return null; } @Override public PhysicalAgent fetchFromMOBRoomFavorsMOBs(MOB mob, Item goodLocation, String thingName, Filterer<Environmental> filter) { return null; } @Override public void addEffect(Ability to) { } @Override public void addNonUninvokableEffect(Ability to) { } @Override public void delEffect(Ability to) { } @Override public void delAllEffects(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(int index) { return null; } @Override public Ability fetchEffect(String ID) { return null; } @Override public void addBehavior(Behavior to) { } @Override public void delBehavior(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(int index) { return null; } @Override public void eachBehavior(final EachApplicable<Behavior> applier) { } @Override public Behavior fetchBehavior(String ID) { return null; } @Override public void addScript(ScriptingEngine S) { } @Override public void delScript(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(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(String code) { return CMParms.indexOf(getStatCodes(), code.toUpperCase().trim()) >= 0; } protected int getCodeNum(String code) { for(int i=0;i<CODES.length;i++) { if(code.equalsIgnoreCase(CODES[i])) return i; } return -1; } @Override public String getStat(String code) { switch(getCodeNum(code)) { case 0: return ID(); } return ""; } @Override public void setStat(String code, String val) { switch(getCodeNum(code)) { case 0: return; } } @Override public boolean sameAs(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(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(CMObject o) { return CMClass.classID(this).compareToIgnoreCase(CMClass.classID(o)); } @Override public void setMiscText(String newMiscText) { } @Override public String text() { return ""; } @Override public String miscTextFormat() { return CMParms.FORMAT_UNDEFINED; } @Override public void affectPhyStats(Physical affected, PhyStats affectableStats) { } @Override public void affectCharStats(MOB affectedMob, CharStats affectableStats) { } @Override public void affectCharState(MOB affectedMob, 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(Tickable ticking, int tickID) { return true; } @Override public int getCombatTurnMobIndex() { return 0; } @Override public void setCombatTurnMobIndex(final int index) { } }