package com.planet_ink.coffee_mud.Items.Software;
import com.planet_ink.coffee_mud.Items.Basic.StdItem;
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.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.*;
/*
Copyright 2005-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 StdProgram extends StdItem implements Software
{
@Override public String ID(){ return "StdProgram";}
protected StringBuilder nextMsg = new StringBuilder("");
protected String currentScreen="";
public StdProgram()
{
super();
setName("a software disk");
setDisplayText("a small disk sits here.");
setDescription("It appears to be a general software program.");
basePhyStats.setWeight(1);
material=RawMaterial.RESOURCE_STEEL;
baseGoldValue=1000;
recoverPhyStats();
}
@Override
public void setCircuitKey(String key)
{
}
@Override
public int techLevel()
{
return phyStats().ability();
}
@Override
public void setTechLevel(int lvl)
{
basePhyStats.setAbility(lvl);
recoverPhyStats();
}
@Override
public String getParentMenu()
{
return "";
}
@Override
public String getInternalName()
{
return "";
}
@Override
public boolean isActivationString(String word)
{
return false;
}
@Override
public boolean isDeActivationString(String word)
{
return false;
}
@Override
public boolean isCommandString(String word, boolean isActive)
{
return false;
}
@Override
public TechType getTechType()
{
return TechType.PERSONAL_SOFTWARE;
}
@Override
public String getActivationMenu()
{
return "";
}
@Override
public String getCurrentScreenDisplay()
{
return currentScreen;
}
public void setCurrentScreenDisplay(String msg)
{
this.currentScreen=msg;
}
@Override
public String getScreenMessage()
{
synchronized(nextMsg)
{
final String msg=nextMsg.toString();
nextMsg.setLength(0);
return msg;
}
}
@Override
public void addScreenMessage(String msg)
{
synchronized(nextMsg)
{
nextMsg.append(msg).append("\n\r");
}
}
protected void forceUpMenu()
{
if((container() instanceof Computer)&&(((Computer)container()).getActiveMenu().equals(getInternalName())))
((Computer)container()).setActiveMenu(getParentMenu());
}
protected void forceNewMessageScan()
{
if(container() instanceof Computer)
((Computer)container()).forceReadersSeeNew();
}
protected void forceNewMenuRead()
{
if(container() instanceof Computer)
((Computer)container()).forceReadersMenu();
}
public boolean checkActivate(MOB mob, String message)
{
return true;
}
public boolean checkDeactivate(MOB mob, String message)
{
return true;
}
public boolean checkTyping(MOB mob, String message)
{
return true;
}
public boolean checkPowerCurrent(int value)
{
return true;
}
@Override
public boolean okMessage(Environmental host, CMMsg msg)
{
if(msg.amITarget(this))
{
switch(msg.targetMinor())
{
case CMMsg.TYP_ACTIVATE:
if(!checkActivate(msg.source(),msg.targetMessage()))
return false;
break;
case CMMsg.TYP_DEACTIVATE:
if(!checkDeactivate(msg.source(),msg.targetMessage()))
return false;
break;
case CMMsg.TYP_WRITE:
if(!checkTyping(msg.source(),msg.targetMessage()))
return false;
break;
case CMMsg.TYP_POWERCURRENT:
if(!checkPowerCurrent(msg.value()))
return false;
break;
}
}
return super.okMessage(host,msg);
}
public void onActivate(MOB mob, String message)
{
}
public void onDeactivate(MOB mob, String message)
{
}
public void onTyping(MOB mob, String message)
{
}
public void onPowerCurrent(int value)
{
}
@Override
public void executeMsg(Environmental host, CMMsg msg)
{
if(msg.amITarget(this))
{
switch(msg.targetMinor())
{
case CMMsg.TYP_ACTIVATE:
onActivate(msg.source(),msg.targetMessage());
break;
case CMMsg.TYP_DEACTIVATE:
onDeactivate(msg.source(),msg.targetMessage());
break;
case CMMsg.TYP_WRITE:
onTyping(msg.source(),msg.targetMessage());
break;
case CMMsg.TYP_POWERCURRENT:
onPowerCurrent(msg.value());
break;
}
}
super.executeMsg(host, msg);
}
public String display(long d)
{
return CMLib.english().sizeDescShort(d);
}
public String display(long[] coords)
{
return CMLib.english().coordDescShort(coords);
}
public String display(double[] dir)
{
return CMLib.english().directionDescShort(dir);
}
public String displayPerSec(long speed)
{
return CMLib.english().speedDescShort(speed);
}
}