mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-11-15 14:24:55 +00:00
Add setColour overload with table parameter
This commit is contained in:
parent
bfa5f6ec9c
commit
ac2382a861
@ -10,8 +10,13 @@ import dan200.computercraft.api.lua.ILuaContext;
|
|||||||
import dan200.computercraft.api.lua.LuaException;
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
import dan200.computercraft.core.computer.IComputerEnvironment;
|
import dan200.computercraft.core.computer.IComputerEnvironment;
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
|
import dan200.computercraft.shared.util.Palette;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class TermAPI implements ILuaAPI
|
public class TermAPI implements ILuaAPI
|
||||||
{
|
{
|
||||||
private final Terminal m_terminal;
|
private final Terminal m_terminal;
|
||||||
@ -106,6 +111,46 @@ public class TermAPI implements ILuaAPI
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setColour( Terminal terminal, int colour, float r, float g, float b )
|
||||||
|
{
|
||||||
|
if( terminal.getPalette() != null )
|
||||||
|
{
|
||||||
|
terminal.getPalette().setColour( colour, r, g, b );
|
||||||
|
terminal.setChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setColour( Terminal terminal, HashMap<Object, Object> colours) throws LuaException
|
||||||
|
{
|
||||||
|
final double lg2 = Math.log( 2 );
|
||||||
|
|
||||||
|
for(Map.Entry<Object, Object> e : colours.entrySet())
|
||||||
|
{
|
||||||
|
if(e.getKey() instanceof Double)
|
||||||
|
{
|
||||||
|
int index = 15 - (int)( Math.log( (Double)e.getKey() ) / lg2 );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
@SuppressWarnings({ "unchecked" }) // There isn't really a nice way around this :(
|
||||||
|
HashMap<Object, Object> colour = (HashMap<Object, Object>) e.getValue();
|
||||||
|
|
||||||
|
setColour(
|
||||||
|
terminal,
|
||||||
|
index,
|
||||||
|
( (Double)colour.get( 1.0 ) ).floatValue(),
|
||||||
|
( (Double)colour.get( 2.0 ) ).floatValue(),
|
||||||
|
( (Double)colour.get( 3.0 ) ).floatValue()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
catch(ClassCastException cce)
|
||||||
|
{
|
||||||
|
throw new LuaException( "Malformed colour table" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object[] callMethod( ILuaContext context, int method, Object[] args ) throws LuaException
|
public Object[] callMethod( ILuaContext context, int method, Object[] args ) throws LuaException
|
||||||
{
|
{
|
||||||
@ -279,30 +324,31 @@ public class TermAPI implements ILuaAPI
|
|||||||
case 20:
|
case 20:
|
||||||
{
|
{
|
||||||
// setColour/setColor
|
// setColour/setColor
|
||||||
if( args.length < 4 || !(args[0] instanceof Double) || !(args[1] instanceof Double) || !(args[2] instanceof Double) || !(args[3] instanceof Double) ) // toil and trouble
|
|
||||||
{
|
|
||||||
throw new LuaException( "Expected number, number, number, number" );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !m_environment.isColour() )
|
if( !m_environment.isColour() )
|
||||||
{
|
{
|
||||||
// Make sure you can't circumvent greyscale terminals with this function.
|
// Make sure you can't circumvent greyscale terminals with this function.
|
||||||
throw new LuaException( "Colour not supported" );
|
throw new LuaException( "Colour not supported" );
|
||||||
}
|
}
|
||||||
|
|
||||||
int colour = 15 - parseColour( args, m_environment.isColour() );
|
if(args.length >= 1 && args[0] instanceof HashMap)
|
||||||
float r = ((Double)args[1]).floatValue();
|
|
||||||
float g = ((Double)args[2]).floatValue();
|
|
||||||
float b = ((Double)args[3]).floatValue();
|
|
||||||
|
|
||||||
synchronized( m_terminal )
|
|
||||||
{
|
{
|
||||||
if( m_terminal.getPalette() != null )
|
@SuppressWarnings( { "unchecked" } ) // There isn't really a nice way around this :(
|
||||||
{
|
HashMap<Object, Object> colourTbl = (HashMap<Object, Object>)args[0];
|
||||||
m_terminal.getPalette().setColour( colour, r, g, b );
|
setColour( m_terminal, colourTbl );
|
||||||
m_terminal.setChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (args.length >= 4 && args[0] instanceof Double && args[1] instanceof Double && args[2] instanceof Double && args[3] instanceof Double)
|
||||||
|
{
|
||||||
|
int colour = 15 - parseColour( args, m_environment.isColour() );
|
||||||
|
float r = ((Double)args[1]).floatValue();
|
||||||
|
float g = ((Double)args[2]).floatValue();
|
||||||
|
float b = ((Double)args[3]).floatValue();
|
||||||
|
setColour( m_terminal, colour, r, g, b );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new LuaException( "Expected table or number, number, number, number" );
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
case 21:
|
case 21:
|
||||||
|
@ -14,6 +14,8 @@ import dan200.computercraft.core.terminal.Terminal;
|
|||||||
import dan200.computercraft.shared.util.Palette;
|
import dan200.computercraft.shared.util.Palette;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class MonitorPeripheral implements IPeripheral
|
public class MonitorPeripheral implements IPeripheral
|
||||||
{
|
{
|
||||||
private final TileMonitor m_monitor;
|
private final TileMonitor m_monitor;
|
||||||
@ -229,14 +231,6 @@ public class MonitorPeripheral implements IPeripheral
|
|||||||
{
|
{
|
||||||
// setColour/setColor
|
// setColour/setColor
|
||||||
Terminal terminal = m_monitor.getTerminal().getTerminal();
|
Terminal terminal = m_monitor.getTerminal().getTerminal();
|
||||||
Palette palette = terminal.getPalette();
|
|
||||||
|
|
||||||
// setColour/setColor
|
|
||||||
if( args.length < 4 || !(args[0] instanceof Double) || !(args[1] instanceof Double) || !(args[2] instanceof Double) || !(args[3] instanceof Double) )
|
|
||||||
{
|
|
||||||
throw new LuaException( "Expected number, number, number, number" );
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean isColour = m_monitor.getTerminal().isColour();
|
boolean isColour = m_monitor.getTerminal().isColour();
|
||||||
|
|
||||||
if( !isColour )
|
if( !isColour )
|
||||||
@ -244,15 +238,25 @@ public class MonitorPeripheral implements IPeripheral
|
|||||||
throw new LuaException( "Colour not supported" );
|
throw new LuaException( "Colour not supported" );
|
||||||
}
|
}
|
||||||
|
|
||||||
int colour = 15 - dan200.computercraft.core.apis.TermAPI.parseColour( args, true );
|
if(args.length >= 1 && args[0] instanceof HashMap )
|
||||||
float r = ((Double)args[1]).floatValue();
|
|
||||||
float g = ((Double)args[2]).floatValue();
|
|
||||||
float b = ((Double)args[3]).floatValue();
|
|
||||||
|
|
||||||
if( palette != null )
|
|
||||||
{
|
{
|
||||||
palette.setColour( colour, r, g, b );
|
@SuppressWarnings( { "unchecked" } ) // There isn't really a nice way around this :(
|
||||||
|
HashMap<Object, Object> colourTbl = (HashMap<Object, Object>)args[0];
|
||||||
|
dan200.computercraft.core.apis.TermAPI.setColour( terminal, colourTbl );
|
||||||
}
|
}
|
||||||
|
else if (args.length >= 4 && args[0] instanceof Double && args[1] instanceof Double && args[2] instanceof Double && args[3] instanceof Double)
|
||||||
|
{
|
||||||
|
int colour = 15 - dan200.computercraft.core.apis.TermAPI.parseColour( args, true );
|
||||||
|
float r = ((Double)args[1]).floatValue();
|
||||||
|
float g = ((Double)args[2]).floatValue();
|
||||||
|
float b = ((Double)args[3]).floatValue();
|
||||||
|
dan200.computercraft.core.apis.TermAPI.setColour( terminal, colour, r, g, b );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new LuaException( "Expected table or number, number, number, number" );
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
case 22:
|
case 22:
|
||||||
|
@ -107,9 +107,7 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function updatePalette()
|
local function updatePalette()
|
||||||
for k,v in pairs(tPalette) do
|
return parent.setColour( tPalette )
|
||||||
parent.setColour( k, table.unpack( v ) )
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function internalBlit( sText, sTextColor, sBackgroundColor )
|
local function internalBlit( sText, sTextColor, sBackgroundColor )
|
||||||
@ -289,10 +287,16 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
|||||||
end
|
end
|
||||||
|
|
||||||
function window.setColour( colour, r, g, b )
|
function window.setColour( colour, r, g, b )
|
||||||
local tCol = tPalette[ colour ]
|
if type(colour) == "table" then
|
||||||
tCol[1] = r
|
for k,v in pairs(colour) do
|
||||||
tCol[2] = g
|
tPalette[k] = v
|
||||||
tCol[3] = b
|
end
|
||||||
|
else
|
||||||
|
local tCol = tPalette[ colour ]
|
||||||
|
tCol[1] = r
|
||||||
|
tCol[2] = g
|
||||||
|
tCol[3] = b
|
||||||
|
end
|
||||||
|
|
||||||
if bVisible then
|
if bVisible then
|
||||||
return updatePalette()
|
return updatePalette()
|
||||||
|
Loading…
Reference in New Issue
Block a user