/*
This file is part of jpcsp.
Jpcsp is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Jpcsp is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Jpcsp. If not, see <http://www.gnu.org/licenses/>.
*/
package jpcsp.format.rco.vsmx.objects;
import org.apache.log4j.Logger;
import jpcsp.format.rco.vsmx.VSMX;
import jpcsp.format.rco.vsmx.interpreter.VSMXArray;
import jpcsp.format.rco.vsmx.interpreter.VSMXBaseObject;
import jpcsp.format.rco.vsmx.interpreter.VSMXBoolean;
import jpcsp.format.rco.vsmx.interpreter.VSMXInterpreter;
import jpcsp.format.rco.vsmx.interpreter.VSMXNativeObject;
import jpcsp.format.rco.vsmx.interpreter.VSMXNumber;
import jpcsp.format.rco.vsmx.interpreter.VSMXObject;
import jpcsp.format.rco.vsmx.interpreter.VSMXUndefined;
import jpcsp.hardware.Screen;
public class GlobalVariables extends BaseNativeObject {
private static final Logger log = VSMX.log;
private static final Logger logWriteln = Logger.getLogger("writeln");
private StringBuilder writeBuffer = new StringBuilder();
public static VSMXNativeObject create(VSMXInterpreter interpreter) {
GlobalVariables globalVariables = new GlobalVariables(interpreter);
VSMXNativeObject object = new VSMXNativeObject(interpreter, globalVariables);
globalVariables.setObject(object);
object.setPropertyValue("undefined", VSMXUndefined.singleton);
object.setPropertyValue("Array", new VSMXArray(interpreter));
object.setPropertyValue("Object", new VSMXObject(interpreter, null));
object.setPropertyValue("timer", Timer.create(interpreter));
object.setPropertyValue("x", new VSMXNumber(interpreter, 0));
object.setPropertyValue("y", new VSMXNumber(interpreter, 0));
object.setPropertyValue("width", new VSMXNumber(interpreter, Screen.width));
object.setPropertyValue("height", new VSMXNumber(interpreter, Screen.height));
return object;
}
private GlobalVariables(VSMXInterpreter interpreter) {
}
private void writeln() {
logWriteln.debug(writeBuffer.toString());
writeBuffer.setLength(0);
}
private void writeln(VSMXBaseObject object, VSMXBaseObject... strings) {
write(object, strings);
writeln();
}
private void write(VSMXBaseObject object, VSMXBaseObject... strings) {
for (int i = 0; i < strings.length; i++) {
writeBuffer.append(strings[i].getStringValue());
}
if (log.isDebugEnabled()) {
log.debug(String.format("write: '%s'", writeBuffer.toString()));
}
}
public void write(VSMXBaseObject object, VSMXBaseObject s1) {
write(object, new VSMXBaseObject[] { s1 });
}
public void writeln(VSMXBaseObject object) {
writeln();
}
public void writeln(VSMXBaseObject object, VSMXBaseObject s1) {
writeln(object, new VSMXBaseObject[] { s1 });
}
public void writeln(VSMXBaseObject object, VSMXBaseObject s1, VSMXBaseObject s2) {
writeln(object, new VSMXBaseObject[] { s1, s2 });
}
public void writeln(VSMXBaseObject object, VSMXBaseObject s1, VSMXBaseObject s2, VSMXBaseObject s3) {
writeln(object, new VSMXBaseObject[] { s1, s3 });
}
public void writeln(VSMXBaseObject object, VSMXBaseObject s1, VSMXBaseObject s2, VSMXBaseObject s3, VSMXBaseObject s4) {
writeln(object, new VSMXBaseObject[] { s1, s3, s4 });
}
public void writeln(VSMXBaseObject object, VSMXBaseObject s1, VSMXBaseObject s2, VSMXBaseObject s3, VSMXBaseObject s4, VSMXBaseObject s5) {
writeln(object, new VSMXBaseObject[] { s1, s3, s4, s5 });
}
public void writeln(VSMXBaseObject object, VSMXBaseObject s1, VSMXBaseObject s2, VSMXBaseObject s3, VSMXBaseObject s4, VSMXBaseObject s5, VSMXBaseObject s6) {
writeln(object, new VSMXBaseObject[] { s1, s3, s4, s5, s6 });
}
public VSMXBaseObject parseFloat(VSMXBaseObject object, VSMXBaseObject value) {
if (log.isDebugEnabled()) {
log.debug(String.format("parseFloat: %s", value));
}
return new VSMXNumber(object.getInterpreter(), value.getFloatValue());
}
public VSMXBaseObject parseInt(VSMXBaseObject object, VSMXBaseObject value) {
if (log.isDebugEnabled()) {
log.debug(String.format("parseInt: %s", value));
}
return new VSMXNumber(object.getInterpreter(), value.getIntValue());
}
public VSMXBaseObject isNaN(VSMXBaseObject object, VSMXBaseObject value) {
if (log.isDebugEnabled()) {
log.debug(String.format("isNaN: %s", value));
}
boolean isNaN = Float.isNaN(value.getFloatValue());
return VSMXBoolean.getValue(isNaN);
}
public VSMXBaseObject Float(VSMXBaseObject object, VSMXBaseObject value) {
if (log.isDebugEnabled()) {
log.debug(String.format("Float: %s", value));
}
return new VSMXNumber(object.getInterpreter(), value.getFloatValue());
}
public VSMXBaseObject Int(VSMXBaseObject object, VSMXBaseObject value) {
if (log.isDebugEnabled()) {
log.debug(String.format("Int: %s", value));
}
return new VSMXNumber(object.getInterpreter(), value.getIntValue());
}
}