Added MP4 Video playback in maps, fixed 3D audio trigonometry
This commit is contained in:
parent
2b48c1a954
commit
fd6a37d472
|
@ -181,14 +181,21 @@ void main(){
|
|||
/* https://bugs.chromium.org/p/angleproject/issues/detail?id=4994 */
|
||||
uv = ((uv * anisotropic_fix) - fract(uv * anisotropic_fix) + 0.5) / anisotropic_fix;
|
||||
|
||||
color *= texture(tex0, uv).bgra;
|
||||
vec4 texColor = texture(tex0, uv);
|
||||
#else
|
||||
color *= texture(tex0, (matrix_t * vec4(v_texture0, 0.0, 1.0)).xy).bgra;
|
||||
vec4 texColor = texture(tex0, (matrix_t * vec4(v_texture0, 0.0, 1.0)).xy);
|
||||
#endif
|
||||
|
||||
#else
|
||||
color *= texture(tex0, (matrix_t * vec4(texCoordV0, 0.0, 1.0)).xy).bgra;
|
||||
vec4 texColor = texture(tex0, (matrix_t * vec4(texCoordV0, 0.0, 1.0)).xy);
|
||||
#endif
|
||||
|
||||
#ifdef CC_swap_rb
|
||||
color *= texColor.rgba;
|
||||
#else
|
||||
color *= texColor.bgra;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CC_alphatest
|
||||
|
|
283
samples/ayunami2000/VideoMapPacketCodec.java
Normal file
283
samples/ayunami2000/VideoMapPacketCodec.java
Normal file
|
@ -0,0 +1,283 @@
|
|||
package ayunami2000;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class VideoMapPacketCodec {
|
||||
|
||||
public final int[][] mapIds;
|
||||
private boolean loop;
|
||||
private String url;
|
||||
private int duration;
|
||||
private long timestamp;
|
||||
private long pauseTimestamp;
|
||||
private double posX;
|
||||
private double posY;
|
||||
private double posZ;
|
||||
private float volume;
|
||||
private int frameRate;
|
||||
private boolean requiresFullResetPacket;
|
||||
private boolean requiresPositionPacket;
|
||||
private boolean isDisabled;
|
||||
|
||||
/**
|
||||
* @param mapIds 2D grid of map IDs that make up the screen (mapIds[y][x])
|
||||
* @param posX audio playback X coord
|
||||
* @param posY audio playback Y coord
|
||||
* @param posZ audio playback Z coord
|
||||
* @param volume the volume of the clip
|
||||
*/
|
||||
public VideoMapPacketCodec(int[][] mapIds, double posX, double posY, double posZ, float volume) {
|
||||
this.mapIds = mapIds;
|
||||
this.url = null;
|
||||
this.posX = posX;
|
||||
this.posY = posY;
|
||||
this.posZ = posZ;
|
||||
this.volume = 1.0f;
|
||||
this.frameRate = 60;
|
||||
this.requiresPositionPacket = true;
|
||||
this.requiresFullResetPacket = true;
|
||||
this.isDisabled = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mapIds 2D grid of map IDs that make up the screen (mapIds[y][x])
|
||||
* @param posX audio playback X coord
|
||||
* @param posY audio playback Y coord
|
||||
* @param posZ audio playback Z coord
|
||||
*/
|
||||
public VideoMapPacketCodec(int[][] mapIds, double posX, double posY, double posZ) {
|
||||
this(mapIds, posX, posY, posZ, 1.0f);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param posX audio playback X coord
|
||||
* @param posY audio playback Y coord
|
||||
* @param posZ audio playback Z coord
|
||||
* @param volume the volume of the clip
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public byte[] moveAudioSource(double posX, double posY, double posZ, float volume) {
|
||||
this.posX = posX;
|
||||
this.posY = posY;
|
||||
this.posZ = posZ;
|
||||
this.volume = volume;
|
||||
this.requiresPositionPacket = true;
|
||||
return syncPlaybackWithPlayers();
|
||||
}
|
||||
|
||||
/**
|
||||
* unloads video and resets all map object to vanilla renderer
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public byte[] disableVideo() {
|
||||
isDisabled = true;
|
||||
return syncPlaybackWithPlayers();
|
||||
}
|
||||
|
||||
/**
|
||||
* syncs the server side video timestamp with players
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public byte[] syncPlaybackWithPlayers() {
|
||||
try {
|
||||
ByteArrayOutputStream bao = new ByteArrayOutputStream();
|
||||
DataOutputStream str = new DataOutputStream(bao);
|
||||
|
||||
if(isDisabled) {
|
||||
str.write(0);
|
||||
int x = mapIds[0].length;
|
||||
int y = mapIds.length;
|
||||
str.write((x << 4) | y);
|
||||
for(int yy = 0; yy < y; ++yy) {
|
||||
for(int xx = 0; xx < x; ++xx) {
|
||||
str.writeShort(mapIds[yy][xx]);
|
||||
}
|
||||
}
|
||||
return bao.toByteArray();
|
||||
}
|
||||
|
||||
int packetType = 1;
|
||||
if(requiresFullResetPacket) {
|
||||
packetType = packetType | 2;
|
||||
}
|
||||
if(requiresFullResetPacket || requiresPositionPacket) {
|
||||
packetType = packetType | 4;
|
||||
}
|
||||
|
||||
str.write(packetType);
|
||||
|
||||
if(requiresFullResetPacket) {
|
||||
int x = mapIds[0].length;
|
||||
int y = mapIds.length;
|
||||
str.write((x << 4) | y);
|
||||
for(int yy = 0; yy < y; ++yy) {
|
||||
for(int xx = 0; xx < x; ++xx) {
|
||||
str.writeShort(mapIds[yy][xx]);
|
||||
}
|
||||
}
|
||||
str.write(frameRate);
|
||||
str.writeInt(duration);
|
||||
str.writeUTF(url);
|
||||
}
|
||||
|
||||
if(requiresFullResetPacket || requiresPositionPacket) {
|
||||
str.writeFloat(volume);
|
||||
str.writeDouble(posX);
|
||||
str.writeDouble(posY);
|
||||
str.writeDouble(posZ);
|
||||
}
|
||||
|
||||
str.writeInt(getElapsedMillis());
|
||||
str.writeBoolean(loop);
|
||||
str.writeBoolean(pauseTimestamp > 0l);
|
||||
|
||||
requiresFullResetPacket = false;
|
||||
requiresPositionPacket = false;
|
||||
|
||||
return bao.toByteArray();
|
||||
}catch(IOException e) {
|
||||
throw new RuntimeException("serialization error", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* this is dual purpose, it calculates elapsed time but also loops or pauses the video if it is finished playing
|
||||
*/
|
||||
private int getElapsedMillis() {
|
||||
if(pauseTimestamp > 0l) {
|
||||
return (int)(pauseTimestamp - timestamp);
|
||||
}
|
||||
int t = (int)(System.currentTimeMillis() - timestamp);
|
||||
if(loop) {
|
||||
while(t > duration) {
|
||||
t -= duration;
|
||||
timestamp += duration;
|
||||
}
|
||||
}else {
|
||||
if(t > duration) {
|
||||
timestamp = (int)(System.currentTimeMillis() - duration);
|
||||
return duration;
|
||||
}
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param url URL to an MP4 or other HTML5 supported video file
|
||||
* @param loop If the video file should loop
|
||||
* @param durationSeconds duration of the video in seconds
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public byte[] beginPlayback(String url, boolean loop, float duration) {
|
||||
this.url = url;
|
||||
this.loop = loop;
|
||||
this.duration = (int)(duration * 1000.0f);
|
||||
this.pauseTimestamp = 0l;
|
||||
this.timestamp = 0l;
|
||||
this.requiresFullResetPacket = true;
|
||||
this.isDisabled = false;
|
||||
return syncPlaybackWithPlayers();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells the browser to pre-load a URL to a video to be played in the future
|
||||
* @param url the URL of the video
|
||||
* @param ttl the amount of time the video should stay loaded
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public static byte[] bufferVideo(String url, int ttl) {
|
||||
try {
|
||||
ByteArrayOutputStream bao = new ByteArrayOutputStream();
|
||||
DataOutputStream str = new DataOutputStream(bao);
|
||||
str.write(8);
|
||||
str.writeInt(ttl);
|
||||
str.writeUTF(url);
|
||||
return bao.toByteArray();
|
||||
}catch(IOException e) {
|
||||
throw new RuntimeException("serialization error", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the duration of the current clip
|
||||
*/
|
||||
public float getDuration() {
|
||||
return duration * 0.001f;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the URL of the current clip
|
||||
*/
|
||||
public String getURL() {
|
||||
return url;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the server's current timestamp
|
||||
*/
|
||||
public float getPlaybackTime() {
|
||||
return getElapsedMillis() * 0.001f;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param time time in seconds to seek the video to
|
||||
*/
|
||||
public byte[] setPlaybackTime(float time) {
|
||||
timestamp = System.currentTimeMillis() - (int)(time * 1000.0f);
|
||||
return syncPlaybackWithPlayers();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return if playback is complete (false if loop)
|
||||
*/
|
||||
public boolean isPlaybackFinished() {
|
||||
return !loop && getElapsedMillis() == duration;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param loop video should loop
|
||||
*/
|
||||
public byte[] setLoopEnable(boolean loop) {
|
||||
this.loop = loop;
|
||||
return syncPlaybackWithPlayers();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return if loop is enabled
|
||||
*/
|
||||
public boolean isLoopEnable() {
|
||||
return loop;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param pause set if video should pause
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public byte[] setPaused(boolean pause) {
|
||||
getElapsedMillis();
|
||||
if(pause && pauseTimestamp <= 0l) {
|
||||
pauseTimestamp = System.currentTimeMillis();
|
||||
}else if(!pause && pauseTimestamp > 0l) {
|
||||
timestamp = System.currentTimeMillis() - (pauseTimestamp - timestamp);
|
||||
pauseTimestamp = 0l;
|
||||
}
|
||||
return syncPlaybackWithPlayers();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return if video is currently paused
|
||||
*/
|
||||
public boolean isPaused() {
|
||||
return pauseTimestamp > 0l;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return current server-side volume
|
||||
*/
|
||||
public float getVolume() {
|
||||
return volume;
|
||||
}
|
||||
|
||||
}
|
132
samples/ayunami2000/VideoMapPacketCodecBukkit.java
Normal file
132
samples/ayunami2000/VideoMapPacketCodecBukkit.java
Normal file
|
@ -0,0 +1,132 @@
|
|||
package ayunami2000;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_5_R3.Packet;
|
||||
import net.minecraft.server.v1_5_R3.Packet131ItemData;
|
||||
|
||||
public class VideoMapPacketCodecBukkit extends VideoMapPacketCodec {
|
||||
|
||||
/**
|
||||
* @param mapIds 2D grid of map IDs that make up the screen (mapIds[y][x])
|
||||
* @param posX audio playback X coord
|
||||
* @param posY audio playback Y coord
|
||||
* @param posZ audio playback Z coord
|
||||
* @param volume the volume of the clip
|
||||
*/
|
||||
public VideoMapPacketCodecBukkit(int[][] mapIds, double posX, double posY, double posZ, float volume) {
|
||||
super(mapIds, posX, posY, posZ, volume);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mapIds 2D grid of map IDs that make up the screen (mapIds[y][x])
|
||||
* @param posX audio playback X coord
|
||||
* @param posY audio playback Y coord
|
||||
* @param posZ audio playback Z coord
|
||||
*/
|
||||
public VideoMapPacketCodecBukkit(int[][] mapIds, double posX, double posY, double posZ) {
|
||||
super(mapIds, posX, posY, posZ, 1.0f);
|
||||
}
|
||||
|
||||
public static class VideoMapPacket {
|
||||
protected final Object packet;
|
||||
protected VideoMapPacket(byte[] packet) {
|
||||
this.packet = new Packet131ItemData((short)104, (short)0, packet);
|
||||
}
|
||||
public Object getNativePacket() {
|
||||
return packet;
|
||||
}
|
||||
public void send(Player p) {
|
||||
nativeSendPacketToPlayer(p, packet);
|
||||
}
|
||||
public void send(Player... p) {
|
||||
for(Player pp : p) {
|
||||
nativeSendPacketToPlayer(pp, packet);
|
||||
}
|
||||
}
|
||||
public void send(List<Player> p) {
|
||||
for(Player pp : p) {
|
||||
nativeSendPacketToPlayer(pp, packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param posX audio playback X coord
|
||||
* @param posY audio playback Y coord
|
||||
* @param posZ audio playback Z coord
|
||||
* @param volume the volume of the clip
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public VideoMapPacket moveAudioSourceBukkit(double posX, double posY, double posZ, float volume) {
|
||||
return new VideoMapPacket(moveAudioSource(posX, posY, posZ, volume));
|
||||
}
|
||||
|
||||
/**
|
||||
* unloads video and resets all map object to vanilla renderer
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public VideoMapPacket disableVideoBukkit() {
|
||||
return new VideoMapPacket(disableVideo());
|
||||
}
|
||||
|
||||
/**
|
||||
* syncs the server side video timestamp with players
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public VideoMapPacket syncPlaybackWithPlayersBukkit() {
|
||||
return new VideoMapPacket(syncPlaybackWithPlayers());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param url URL to an MP4 or other HTML5 supported video file
|
||||
* @param loop If the video file should loop
|
||||
* @param durationSeconds duration of the video in seconds
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public VideoMapPacket beginPlaybackBukkit(String url, boolean loop, float duration) {
|
||||
return new VideoMapPacket(beginPlayback(url, loop, duration));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells the browser to pre-load a URL to a video to be played in the future
|
||||
* @param url the URL of the video
|
||||
* @param ttl the amount of time the video should stay loaded
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public static VideoMapPacket bufferVideoBukkit(String url, int ttl) {
|
||||
return new VideoMapPacket(bufferVideo(url, ttl));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param time time in seconds to seek the video to
|
||||
*/
|
||||
public VideoMapPacket setPlaybackTimeBukkit(float time) {
|
||||
return new VideoMapPacket(setPlaybackTime(time));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param loop video should loop
|
||||
*/
|
||||
public VideoMapPacket setLoopEnableBukkit(boolean loop) {
|
||||
return new VideoMapPacket(setLoopEnable(loop));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param pause set if video should pause
|
||||
* @return packet to send to players
|
||||
*/
|
||||
public VideoMapPacket setPausedBukkit(boolean pause) {
|
||||
return new VideoMapPacket(setPaused(pause));
|
||||
}
|
||||
|
||||
public static void nativeSendPacketToPlayer(Player player, Object obj) {
|
||||
if(obj == null) {
|
||||
return;
|
||||
}
|
||||
((CraftPlayer)player).getHandle().playerConnection.sendPacket((Packet)obj);
|
||||
}
|
||||
}
|
|
@ -8,4 +8,8 @@ commands:
|
|||
samplemap:
|
||||
description: test ayunami map system
|
||||
usage: /samplemap <get|disable|set> [mapid] [image file] [16bpp|24bpp] [compress]
|
||||
permission: eaglersamples.samplemap
|
||||
permission: eaglersamples.samplemap
|
||||
videomap:
|
||||
description: test video map system (place video_map_config.txt in your server's working directory)
|
||||
usage: /videomap <begin|stop|preload|pause|resume|loop|move> [url] [duration or ttl]
|
||||
permission: eaglersamples.videomap
|
155
samples/plugin/CommandVideoMap.java
Normal file
155
samples/plugin/CommandVideoMap.java
Normal file
|
@ -0,0 +1,155 @@
|
|||
package plugin;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import ayunami2000.VideoMapPacketCodecBukkit;
|
||||
|
||||
public class CommandVideoMap implements CommandExecutor {
|
||||
|
||||
private VideoMapPacketCodecBukkit currentCodecInstance = null;
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender arg0, Command arg1, String arg2, String[] arg3) {
|
||||
if(!(arg0 instanceof Player)) {
|
||||
arg0.sendMessage(ChatColor.RED + "Internal Error: " + ChatColor.WHITE + "CommmandSender must be a Player");
|
||||
return false;
|
||||
}
|
||||
if(arg3.length == 3 && arg3[0].equalsIgnoreCase("begin")) {
|
||||
try {
|
||||
List<int[]> mapRows = new ArrayList();
|
||||
double x = 0.0d;
|
||||
double y = 0.0d;
|
||||
double z = 0.0d;
|
||||
float volume = -1.0f;
|
||||
BufferedReader r = new BufferedReader(new FileReader(new File("video_map_config.txt")));
|
||||
String str;
|
||||
while((str = r.readLine()) != null) {
|
||||
str = str.trim();
|
||||
if(str.startsWith("#")) {
|
||||
continue;
|
||||
}else if(str.startsWith("x")) {
|
||||
int i = str.indexOf('=');
|
||||
if(i > 0) {
|
||||
x = Double.parseDouble(str.substring(i + 1).trim());
|
||||
}
|
||||
}else if(str.startsWith("y")) {
|
||||
int i = str.indexOf('=');
|
||||
if(i > 0) {
|
||||
y = Double.parseDouble(str.substring(i + 1).trim());
|
||||
}
|
||||
}else if(str.startsWith("z")) {
|
||||
int i = str.indexOf('=');
|
||||
if(i > 0) {
|
||||
z = Double.parseDouble(str.substring(i + 1).trim());
|
||||
}
|
||||
}else if(str.startsWith("volume")) {
|
||||
int i = str.indexOf('=');
|
||||
if(i > 0) {
|
||||
volume = Float.parseFloat(str.substring(i + 1).trim());
|
||||
}
|
||||
}else {
|
||||
try {
|
||||
String[] digits = str.split(",");
|
||||
int firstInt = Integer.parseInt(digits[0].trim());
|
||||
int[] newRow = new int[digits.length];
|
||||
newRow[0] = firstInt;
|
||||
for(int i = 1; i < digits.length; ++i) {
|
||||
newRow[i] = Integer.parseInt(digits[i].trim());
|
||||
}
|
||||
if(mapRows.size() > 0 && mapRows.get(0).length != newRow.length) {
|
||||
throw new IOException("All rows in map list must be the same length (" + mapRows.get(0).length + " != " + newRow.length + ")");
|
||||
}
|
||||
mapRows.add(newRow);
|
||||
}catch(NumberFormatException t) {
|
||||
}
|
||||
}
|
||||
}
|
||||
r.close();
|
||||
if(mapRows.size() > 0) {
|
||||
if(currentCodecInstance != null) {
|
||||
currentCodecInstance.disableVideoBukkit().send((Player)arg0);
|
||||
currentCodecInstance = null;
|
||||
}
|
||||
int[][] matrix = new int[mapRows.size()][mapRows.get(0).length];
|
||||
for(int i = 0, l = mapRows.size(); i < l; ++i) {
|
||||
for(int j = 0; j < matrix[i].length; ++j) {
|
||||
matrix[i][j] = mapRows.get(i)[j];
|
||||
}
|
||||
}
|
||||
currentCodecInstance = new VideoMapPacketCodecBukkit(matrix, x, y, z, volume);
|
||||
currentCodecInstance.beginPlaybackBukkit(arg3[1], true, arg3[2].indexOf('.') > 0 ? Float.parseFloat(arg3[2]) : Float.parseFloat(arg3[2] + ".0")).send((Player)arg0);
|
||||
arg0.sendMessage(ChatColor.GREEN + "Enabled video map, URL:" + ChatColor.WHITE + " " + arg3[1]);
|
||||
return true;
|
||||
}else {
|
||||
throw new IOException("No map rows were defined");
|
||||
}
|
||||
}catch(IOException ex) {
|
||||
arg0.sendMessage(ChatColor.RED + "Internal Error while reading \'video_map_config.txt\': " + ChatColor.WHITE + ex.toString());
|
||||
}
|
||||
}else if((arg3.length == 2 || arg3.length == 3) && arg3[0].equalsIgnoreCase("preload")) {
|
||||
int ttl = arg3.length == 3 ? Integer.parseInt(arg3[2]) * 1000 : 180 * 1000;
|
||||
VideoMapPacketCodecBukkit.bufferVideoBukkit(arg3[1], ttl).send((Player)arg0);
|
||||
arg0.sendMessage(ChatColor.GREEN + "Buffered video URL:" + ChatColor.WHITE + " " + arg3[1] + " " + ChatColor.GREEN + "for " + ChatColor.WHITE + (ttl / 1000) + ChatColor.GREEN + " seconds");
|
||||
return true;
|
||||
}else {
|
||||
if(arg3.length == 1 && arg3[0].equalsIgnoreCase("stop")) {
|
||||
if(currentCodecInstance != null) {
|
||||
currentCodecInstance.disableVideoBukkit().send((Player)arg0);
|
||||
currentCodecInstance = null;
|
||||
arg0.sendMessage(ChatColor.GREEN + "Disabled video map");
|
||||
return true;
|
||||
}else {
|
||||
arg0.sendMessage(ChatColor.RED + "Error: " + ChatColor.WHITE + "no video is loaded");
|
||||
}
|
||||
}else if(arg3.length == 1 && arg3[0].equalsIgnoreCase("pause")) {
|
||||
if(currentCodecInstance != null) {
|
||||
currentCodecInstance.setPausedBukkit(true).send((Player)arg0);
|
||||
arg0.sendMessage(ChatColor.GREEN + "Paused video map");
|
||||
return true;
|
||||
}else {
|
||||
arg0.sendMessage(ChatColor.RED + "Error: " + ChatColor.WHITE + "no video is loaded");
|
||||
}
|
||||
}else if(arg3.length == 1 && arg3[0].equalsIgnoreCase("resume")) {
|
||||
if(currentCodecInstance != null) {
|
||||
currentCodecInstance.setPausedBukkit(false).send((Player)arg0);
|
||||
arg0.sendMessage(ChatColor.GREEN + "Resumed video map");
|
||||
return true;
|
||||
}else {
|
||||
arg0.sendMessage(ChatColor.RED + "Error: " + ChatColor.WHITE + "no video is loaded");
|
||||
}
|
||||
}else if((arg3.length == 1 || arg3.length == 2) && arg3[0].equalsIgnoreCase("loop")) {
|
||||
if(currentCodecInstance != null) {
|
||||
boolean gottaLoop = arg3.length == 1 || arg3[1].equalsIgnoreCase("true");
|
||||
currentCodecInstance.setLoopEnableBukkit(gottaLoop).send((Player)arg0);
|
||||
arg0.sendMessage(ChatColor.GREEN + (gottaLoop ? "Enabled video map loop" : "Disabled video map loop"));
|
||||
return true;
|
||||
}else {
|
||||
arg0.sendMessage(ChatColor.RED + "Error: " + ChatColor.WHITE + "no video is loaded");
|
||||
}
|
||||
}else if(arg3.length == 1 && arg3[0].equalsIgnoreCase("move")) {
|
||||
if(currentCodecInstance != null) {
|
||||
Location l = ((Player)arg0).getLocation();
|
||||
currentCodecInstance.moveAudioSourceBukkit(l.getX(), l.getY(), l.getZ(), currentCodecInstance.getVolume()).send((Player)arg0);
|
||||
arg0.sendMessage(ChatColor.GREEN + "Repositioned audio source to " + l.getBlockX() + ", " + l.getBlockY() + ", " + l.getBlockZ());
|
||||
return true;
|
||||
}else {
|
||||
arg0.sendMessage(ChatColor.RED + "Error: " + ChatColor.WHITE + "no video is loaded");
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -6,6 +6,7 @@ public class EaglerSamplesPlugin extends JavaPlugin {
|
|||
|
||||
public void onEnable() {
|
||||
getCommand("samplemap").setExecutor(new CommandSampleMap(this));
|
||||
getCommand("videomap").setExecutor(new CommandVideoMap());
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
These are sample source files to assist the process of integrating Eaglercraft into other projects, or to assist the process of integrating other projects into Eaglercraft
|
||||
These are sample source files to assist the process of integrating Eaglercraft into other projects, or to assist the process of integrating other projects into Eaglercraft
|
||||
|
||||
place "video_map_config.txt" in the working directory of the server to use /videomap
|
14
samples/video_map_config.txt
Normal file
14
samples/video_map_config.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
# type map ids like this to create the video screen:
|
||||
|
||||
1, 2, 3
|
||||
4, 5, 6
|
||||
|
||||
# position and volume:
|
||||
|
||||
x = 0.0
|
||||
y = 0.0
|
||||
z = 0.0
|
||||
|
||||
volume = 1.0
|
||||
|
||||
# set volume to '-1.0' to disable directional audio
|
|
@ -607,6 +607,73 @@ public class EaglerAdapterImpl2 {
|
|||
return GL20.glGetAttribLocation(p1.obj, p2);
|
||||
}
|
||||
|
||||
public static final boolean isVideoSupported() {
|
||||
return false;
|
||||
}
|
||||
public static final void loadVideo(String src, boolean autoplay) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void loadVideo(String src, boolean autoplay, String setJavascriptPointer) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void loadVideo(String src, boolean autoplay, String setJavascriptPointer, String javascriptOnloadFunction) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void bufferVideo(String src, int ttl) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void unloadVideo() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final boolean isVideoLoaded() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final boolean isVideoPaused() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void setVideoPaused(boolean pause) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void setVideoLoop(boolean pause) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void setVideoVolume(float x, float y, float z, float v) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void updateVideoTexture() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void bindVideoTexture() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final int getVideoWidth() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final int getVideoHeight() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final float getVideoCurrentTime() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void setVideoCurrentTime(float seconds) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final float getVideoDuration() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
public static final void setVideoFrameRate(float seconds) {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
|
||||
public static final int VIDEO_ERR_NONE = -1;
|
||||
public static final int VIDEO_ERR_ABORTED = 1;
|
||||
public static final int VIDEO_ERR_NETWORK = 2;
|
||||
public static final int VIDEO_ERR_DECODE = 3;
|
||||
public static final int VIDEO_ERR_SRC_NOT_SUPPORTED = 4;
|
||||
|
||||
public static final int getVideoError() {
|
||||
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
|
||||
}
|
||||
|
||||
// =======================================================================================
|
||||
// =======================================================================================
|
||||
|
@ -1119,10 +1186,10 @@ public class EaglerAdapterImpl2 {
|
|||
return s;
|
||||
}
|
||||
public static final void setListenerPos(float x, float y, float z, float vx, float vy, float vz, float pitch, float yaw) {
|
||||
float var11 = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI);
|
||||
float var12 = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI);
|
||||
float var11 = -MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI);
|
||||
float var12 = -MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI);
|
||||
float var13 = -var12;
|
||||
float var14 = -MathHelper.sin(-pitch * 0.017453292F - (float) Math.PI);
|
||||
float var14 = MathHelper.sin(-pitch * 0.017453292F - (float) Math.PI);
|
||||
float var15 = -var11;
|
||||
float var16 = 0.0F;
|
||||
float var17 = 1.0F;
|
||||
|
|
|
@ -4,11 +4,14 @@ public class ConfigConstants {
|
|||
|
||||
public static boolean profanity = false;
|
||||
|
||||
public static final String version = "22w15d";
|
||||
public static final String version = "22w16a";
|
||||
public static final String mainMenuString = "eaglercraft " + version;
|
||||
|
||||
public static final String forkMe = "https://github.com/LAX1DUDE/eaglercraft";
|
||||
|
||||
public static final boolean html5build = true;
|
||||
|
||||
public static String ayonullTitle = null;
|
||||
public static String ayonullLink = null;
|
||||
|
||||
}
|
||||
|
|
101
src/main/java/net/lax1dude/eaglercraft/GuiScreenLicense.java
Normal file
101
src/main/java/net/lax1dude/eaglercraft/GuiScreenLicense.java
Normal file
|
@ -0,0 +1,101 @@
|
|||
package net.lax1dude.eaglercraft;
|
||||
|
||||
import net.minecraft.src.GuiButton;
|
||||
import net.minecraft.src.GuiScreen;
|
||||
|
||||
public class GuiScreenLicense extends GuiScreen {
|
||||
|
||||
private final GuiScreen continueScreen;
|
||||
private boolean hasCheckedBox = false;
|
||||
private int beginOffset = 0;
|
||||
private GuiButton acceptButton;
|
||||
|
||||
public GuiScreenLicense(GuiScreen scr) {
|
||||
continueScreen = scr;
|
||||
}
|
||||
|
||||
public void initGui() {
|
||||
beginOffset = this.height / 2 - 100;
|
||||
if(beginOffset < 5) {
|
||||
beginOffset = 5;
|
||||
}
|
||||
this.buttonList.add(new GuiButton(1, this.width / 2 - 120, beginOffset + 180, 115, 20, new String(License.line61)));
|
||||
this.buttonList.add(acceptButton = new GuiButton(2, this.width / 2 + 5, beginOffset + 180, 115, 20, new String(License.line60)));
|
||||
acceptButton.enabled = false;
|
||||
}
|
||||
|
||||
protected void actionPerformed(GuiButton par1GuiButton) {
|
||||
if(par1GuiButton.id == 2) {
|
||||
LocalStorageManager.profileSettingsStorage.setBoolean("acceptLicense", true);
|
||||
LocalStorageManager.saveStorageP();
|
||||
mc.displayGuiScreen(continueScreen);
|
||||
}else if(par1GuiButton.id == 1) {
|
||||
mc.displayGuiScreen(new GuiScreenLicenseDeclined());
|
||||
}
|
||||
}
|
||||
|
||||
private static final TextureLocation beaconx = new TextureLocation("/gui/beacon.png");
|
||||
|
||||
public void drawScreen(int mx, int my, float par3) {
|
||||
drawDefaultBackground();
|
||||
acceptButton.enabled = hasCheckedBox;
|
||||
super.drawScreen(mx, my, par3);
|
||||
|
||||
EaglerAdapter.glPushMatrix();
|
||||
EaglerAdapter.glScalef(1.33f, 1.33f, 1.33f);
|
||||
drawCenteredString(fontRenderer, new String(License.line00), width * 3 / 8, beginOffset * 3 / 4, 0xDDDD55);
|
||||
EaglerAdapter.glPopMatrix();
|
||||
|
||||
drawCenteredString(fontRenderer, new String(License.line10), width / 2, beginOffset + 22, 0xFF7777);
|
||||
drawCenteredString(fontRenderer, new String(License.line11), width / 2, beginOffset + 33, 0xFF7777);
|
||||
drawCenteredString(fontRenderer, new String(License.line12), width / 2, beginOffset + 44, 0xFF7777);
|
||||
|
||||
drawCenteredString(fontRenderer, new String(License.line20), width / 2, beginOffset + 62, 0x448844);
|
||||
drawCenteredString(fontRenderer, new String(License.line21), width / 2, beginOffset + 71, 0x448844);
|
||||
|
||||
EaglerAdapter.glPushMatrix();
|
||||
EaglerAdapter.glScalef(0.75f, 0.75f, 0.75f);
|
||||
drawCenteredString(fontRenderer, new String(License.line30), width * 4 / 6, (beginOffset + 89) * 4 / 3, 0x666666);
|
||||
drawCenteredString(fontRenderer, new String(License.line31), width * 4 / 6, (beginOffset + 97) * 4 / 3, 0x999999);
|
||||
drawCenteredString(fontRenderer, new String(License.line32), width * 4 / 6, (beginOffset + 105) * 4 / 3, 0x999999);
|
||||
EaglerAdapter.glPopMatrix();
|
||||
|
||||
drawCenteredString(fontRenderer, new String(License.line40), width / 2, beginOffset + 120, 0xFF7777);
|
||||
|
||||
boolean mouseOverCheck = width / 2 - 100 < mx && width / 2 - 83 > mx && beginOffset + 142 < my && beginOffset + 159 > my;
|
||||
|
||||
if(mouseOverCheck) {
|
||||
EaglerAdapter.glColor4f(0.7f, 0.7f, 1.0f, 1.0f);
|
||||
}else {
|
||||
EaglerAdapter.glColor4f(0.6f, 0.6f, 0.6f, 1.0f);
|
||||
}
|
||||
|
||||
beaconx.bindTexture();
|
||||
|
||||
EaglerAdapter.glPushMatrix();
|
||||
EaglerAdapter.glScalef(0.75f, 0.75f, 0.75f);
|
||||
drawTexturedModalRect((width / 2 - 100) * 4 / 3, (beginOffset + 142) * 4 / 3, 22, 219, 22, 22);
|
||||
EaglerAdapter.glPopMatrix();
|
||||
|
||||
if(hasCheckedBox) {
|
||||
EaglerAdapter.glPushMatrix();
|
||||
EaglerAdapter.glColor4f(1.1f, 1.1f, 1.1f, 1.0f);
|
||||
EaglerAdapter.glTranslatef(0.5f, 0.5f, 0.0f);
|
||||
drawTexturedModalRect((width / 2 - 100), (beginOffset + 142), 90, 222, 16, 16);
|
||||
EaglerAdapter.glPopMatrix();
|
||||
}
|
||||
|
||||
EaglerAdapter.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
|
||||
drawString(fontRenderer, new String(License.line50), width / 2 - 75, beginOffset + 147, 0xEEEEEE);
|
||||
}
|
||||
|
||||
protected void mouseClicked(int par1, int par2, int par3) {
|
||||
super.mouseClicked(par1, par2, par3);
|
||||
if(width / 2 - 100 < par1 && width / 2 - 83 > par1 && beginOffset + 142 < par2 && beginOffset + 159 > par2) {
|
||||
this.mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F);
|
||||
hasCheckedBox = !hasCheckedBox;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package net.lax1dude.eaglercraft;
|
||||
|
||||
import net.minecraft.src.GuiScreen;
|
||||
|
||||
public class GuiScreenLicenseDeclined extends GuiScreen {
|
||||
|
||||
public void drawScreen(int mx, int my, float par3) {
|
||||
this.drawDefaultBackground();
|
||||
drawCenteredString(fontRenderer, new String(License.line70), width / 2, height / 3 - 10, 0xFFFFFF);
|
||||
drawCenteredString(fontRenderer, new String(License.line71), width / 2, height / 3 + 18, 0xFF7777);
|
||||
drawCenteredString(fontRenderer, new String(License.line72), width / 2, height / 3 + 35, 0x666666);
|
||||
}
|
||||
}
|
129
src/main/java/net/lax1dude/eaglercraft/License.java
Normal file
129
src/main/java/net/lax1dude/eaglercraft/License.java
Normal file
|
@ -0,0 +1,129 @@
|
|||
package net.lax1dude.eaglercraft;
|
||||
|
||||
public class License {
|
||||
|
||||
/*
|
||||
* This is the text on the 'License Agreement' screen
|
||||
* It is encoded to stop people from easily modifying it
|
||||
* in classes.js via find/replace in a text editor
|
||||
*/
|
||||
|
||||
static final byte[] line00 = new byte[] {
|
||||
(byte)76,(byte)105,(byte)99,(byte)101,(byte)110,(byte)115,(byte)101,(byte)32,(byte)39,(byte)65,
|
||||
(byte)103,(byte)114,(byte)101,(byte)101,(byte)109,(byte)101,(byte)110,(byte)116,(byte)39
|
||||
};
|
||||
|
||||
static final byte[] line10 = new byte[] {
|
||||
(byte)69,(byte)97,(byte)103,(byte)108,(byte)101,(byte)114,(byte)99,(byte)114,(byte)97,(byte)102,
|
||||
(byte)116,(byte)32,(byte)105,(byte)115,(byte)32,(byte)194,(byte)167,(byte)100,(byte)102,(byte)114,
|
||||
(byte)101,(byte)101,(byte)32,(byte)115,(byte)111,(byte)102,(byte)116,(byte)119,(byte)97,(byte)114,
|
||||
(byte)101,(byte)44,(byte)194,(byte)167,(byte)114,(byte)32,(byte)105,(byte)102,(byte)32,(byte)115,
|
||||
(byte)111,(byte)109,(byte)101,(byte)111,(byte)110,(byte)101,(byte)32,(byte)105,(byte)110,(byte)116,
|
||||
(byte)101,(byte)110,(byte)116,(byte)105,(byte)111,(byte)110,(byte)97,(byte)108,(byte)108,(byte)121,
|
||||
(byte)32,(byte)99,(byte)104,(byte)97,(byte)114,(byte)103,(byte)101,(byte)100
|
||||
};
|
||||
|
||||
static final byte[] line11 = new byte[] {(byte)121,(byte)111,(byte)117,(byte)32,(byte)97,(byte)110,
|
||||
(byte)121,(byte)32,(byte)115,(byte)117,(byte)109,(byte)32,(byte)111,(byte)102,(byte)32,(byte)109,
|
||||
(byte)111,(byte)110,(byte)101,(byte)121,(byte)32,(byte)116,(byte)111,(byte)32,(byte)103,(byte)97,
|
||||
(byte)105,(byte)110,(byte)32,(byte)97,(byte)99,(byte)99,(byte)101,(byte)115,(byte)115,(byte)32,
|
||||
(byte)116,(byte)111,(byte)32,(byte)116,(byte)104,(byte)105,(byte)115,(byte)32,(byte)102,(byte)105,
|
||||
(byte)108,(byte)101,(byte)44,(byte)32,(byte)121,(byte)111,(byte)117,(byte)32,(byte)97,(byte)114,
|
||||
(byte)101,(byte)32,(byte)97,(byte)110
|
||||
};
|
||||
|
||||
static final byte[] line12 = new byte[] {(byte)105,(byte)100,(byte)105,(byte)111,(byte)116,(byte)32,
|
||||
(byte)97,(byte)110,(byte)100,(byte)32,(byte)97,(byte)32,(byte)118,(byte)105,(byte)99,(byte)116,
|
||||
(byte)105,(byte)109,(byte)32,(byte)111,(byte)102,(byte)32,(byte)112,(byte)105,(byte)114,(byte)97,
|
||||
(byte)99,(byte)121,(byte)46,(byte)32,(byte)83,(byte)116,(byte)111,(byte)112,(byte)32,(byte)112,
|
||||
(byte)108,(byte)97,(byte)121,(byte)105,(byte)110,(byte)103,(byte)32,(byte)121,(byte)111,(byte)117,
|
||||
(byte)114,(byte)115,(byte)101,(byte)108,(byte)102,(byte)46
|
||||
};
|
||||
|
||||
static final byte[] line20 = new byte[] {
|
||||
(byte)67,(byte)108,(byte)105,(byte)99,(byte)107,(byte)32,(byte)39,(byte)70,(byte)111,(byte)114,
|
||||
(byte)107,(byte)32,(byte)111,(byte)110,(byte)32,(byte)71,(byte)105,(byte)116,(byte)104,(byte)117,
|
||||
(byte)98,(byte)39,(byte)32,(byte)111,(byte)110,(byte)32,(byte)116,(byte)104,(byte)101,(byte)32,
|
||||
(byte)109,(byte)97,(byte)105,(byte)110,(byte)32,(byte)109,(byte)101,(byte)110,(byte)117,(byte)32,
|
||||
(byte)116,(byte)111,(byte)32,(byte)97,(byte)99,(byte)99,(byte)101,(byte)115,(byte)115,(byte)32,
|
||||
(byte)116,(byte)104,(byte)101,(byte)32,(byte)111,(byte)102,(byte)102,(byte)105,(byte)99,(byte)97,(byte)108
|
||||
};
|
||||
|
||||
static final byte[] line21 = new byte[] {
|
||||
(byte)115,(byte)111,(byte)117,(byte)114,(byte)99,(byte)101,(byte)32,(byte)99,(byte)111,(byte)100,
|
||||
(byte)101,(byte)32,(byte)116,(byte)111,(byte)32,(byte)100,(byte)111,(byte)119,(byte)110,(byte)108,
|
||||
(byte)111,(byte)97,(byte)100,(byte)32,(byte)116,(byte)104,(byte)105,(byte)115,(byte)32,(byte)101,
|
||||
(byte)100,(byte)117,(byte)99,(byte)97,(byte)116,(byte)105,(byte)111,(byte)110,(byte)97,(byte)108,
|
||||
(byte)32,(byte)112,(byte)114,(byte)111,(byte)106,(byte)101,(byte)99,(byte)116,(byte)32,(byte)108,
|
||||
(byte)101,(byte)103,(byte)105,(byte)116,(byte)105,(byte)109,(byte)97,(byte)116,(byte)101,(byte)108,(byte)121
|
||||
};
|
||||
|
||||
static final byte[] line30 = new byte[] {
|
||||
(byte)73,(byte)32,(byte)97,(byte)109,(byte)32,(byte)97,(byte)119,(byte)97,(byte)114,(byte)101,
|
||||
(byte)32,(byte)116,(byte)104,(byte)97,(byte)116,(byte)32,(byte)116,(byte)104,(byte)105,(byte)115,
|
||||
(byte)32,(byte)112,(byte)114,(byte)111,(byte)106,(byte)101,(byte)99,(byte)116,(byte)32,(byte)118,
|
||||
(byte)105,(byte)111,(byte)108,(byte)97,(byte)116,(byte)101,(byte)100,(byte)32,(byte)77,(byte)111,
|
||||
(byte)106,(byte)97,(byte)110,(byte)103,(byte)39,(byte)115,(byte)32,(byte)84,(byte)101,(byte)114,
|
||||
(byte)109,(byte)115,(byte)32,(byte)111,(byte)102,(byte)32,(byte)83,(byte)101,(byte)114,(byte)118,
|
||||
(byte)105,(byte)99,(byte)101
|
||||
};
|
||||
|
||||
static final byte[] line31 = new byte[] {
|
||||
(byte)84,(byte)104,(byte)105,(byte)115,(byte)32,(byte)105,(byte)115,(byte)32,(byte)103,(byte)111,
|
||||
(byte)105,(byte)110,(byte)103,(byte)32,(byte)116,(byte)111,(byte)32,(byte)99,(byte)104,(byte)97,
|
||||
(byte)110,(byte)103,(byte)101,(byte)32,(byte)105,(byte)110,(byte)32,(byte)97,(byte)32,(byte)102,
|
||||
(byte)101,(byte)119,(byte)32,(byte)119,(byte)101,(byte)101,(byte)107,(byte)115,(byte)44,(byte)32,
|
||||
(byte)119,(byte)104,(byte)101,(byte)110,(byte)32,(byte)73,(byte)32,(byte)99,(byte)111,(byte)110,
|
||||
(byte)118,(byte)101,(byte)114,(byte)116,(byte)32,(byte)116,(byte)104,(byte)105,(byte)115,(byte)32,
|
||||
(byte)103,(byte)97,(byte)109,(byte)101
|
||||
};
|
||||
|
||||
static final byte[] line32 = new byte[] {
|
||||
(byte)105,(byte)110,(byte)116,(byte)111,(byte)32,(byte)97,(byte)110,(byte)32,(byte)111,(byte)110,
|
||||
(byte)108,(byte)105,(byte)110,(byte)101,(byte)45,(byte)109,(byte)111,(byte)100,(byte)101,(byte)32,
|
||||
(byte)112,(byte)108,(byte)117,(byte)103,(byte)105,(byte)110,(byte)32,(byte)116,(byte)104,(byte)97,
|
||||
(byte)116,(byte)32,(byte)114,(byte)101,(byte)113,(byte)117,(byte)105,(byte)114,(byte)101,(byte)115,
|
||||
(byte)32,(byte)97,(byte)32,(byte)109,(byte)105,(byte)99,(byte)114,(byte)111,(byte)115,(byte)111,
|
||||
(byte)102,(byte)116,(byte)32,(byte)97,(byte)99,(byte)99,(byte)111,(byte)117,(byte)110,(byte)116,(byte)46
|
||||
};
|
||||
|
||||
static final byte[] line40 = new byte[] {
|
||||
(byte)85,(byte)110,(byte)116,(byte)105,(byte)108,(byte)32,(byte)116,(byte)104,(byte)101,(byte)110,
|
||||
(byte)44,(byte)32,(byte)68,(byte)79,(byte)32,(byte)78,(byte)79,(byte)84,(byte)32,(byte)66,(byte)85,
|
||||
(byte)89,(byte)32,(byte)79,(byte)82,(byte)32,(byte)83,(byte)69,(byte)76,(byte)76,(byte)32,(byte)65,
|
||||
(byte)67,(byte)67,(byte)69,(byte)83,(byte)83,(byte)32,(byte)84,(byte)79,(byte)32,(byte)84,(byte)72,
|
||||
(byte)73,(byte)83,(byte)32,(byte)80,(byte)82,(byte)79,(byte)74,(byte)69,(byte)67,(byte)84
|
||||
};
|
||||
|
||||
static final byte[] line50 = new byte[] {
|
||||
(byte)73,(byte)32,(byte)117,(byte)110,(byte)100,(byte)101,(byte)114,(byte)115,(byte)116,(byte)97,
|
||||
(byte)110,(byte)100,(byte)32,(byte)97,(byte)110,(byte)100,(byte)32,(byte)107,(byte)110,(byte)111,
|
||||
(byte)119,(byte)32,(byte)104,(byte)111,(byte)119,(byte)32,(byte)116,(byte)111,(byte)32,(byte)114,
|
||||
(byte)101,(byte)97,(byte)100
|
||||
};
|
||||
|
||||
static final byte[] line60 = new byte[] {(byte)65,(byte)99,(byte)99,(byte)101,(byte)112,(byte)116};
|
||||
|
||||
static final byte[] line61 = new byte[] {(byte)68,(byte)101,(byte)99,(byte)108,(byte)105,(byte)110,(byte)101};
|
||||
|
||||
static final byte[] line70 = new byte[] {
|
||||
(byte)84,(byte)101,(byte)114,(byte)109,(byte)115,(byte)32,(byte)111,(byte)102,(byte)32,(byte)83,
|
||||
(byte)101,(byte)114,(byte)118,(byte)105,(byte)99,(byte)101,(byte)32,(byte)68,(byte)101,(byte)99,
|
||||
(byte)108,(byte)105,(byte)110,(byte)101,(byte)100
|
||||
};
|
||||
|
||||
static final byte[] line71 = new byte[] {
|
||||
(byte)121,(byte)111,(byte)117,(byte)32,(byte)99,(byte)97,(byte)110,(byte)110,(byte)111,(byte)116,
|
||||
(byte)32,(byte)117,(byte)115,(byte)101,(byte)32,(byte)116,(byte)104,(byte)105,(byte)115,(byte)32,
|
||||
(byte)115,(byte)111,(byte)102,(byte)116,(byte)119,(byte)97,(byte)114,(byte)101,(byte)32,(byte)105,
|
||||
(byte)102,(byte)32,(byte)121,(byte)111,(byte)117,(byte)32,(byte)100,(byte)111,(byte)32,(byte)110,
|
||||
(byte)111,(byte)116,(byte)32,(byte)97,(byte)99,(byte)99,(byte)101,(byte)112,(byte)116
|
||||
};
|
||||
|
||||
static final byte[] line72 = new byte[] {
|
||||
(byte)114,(byte)101,(byte)102,(byte)114,(byte)101,(byte)115,(byte)104,(byte)32,(byte)116,(byte)104,
|
||||
(byte)101,(byte)32,(byte)112,(byte)97,(byte)103,(byte)101,(byte)32,(byte)116,(byte)111,(byte)32,
|
||||
(byte)116,(byte)114,(byte)121,(byte)32,(byte)97,(byte)103,(byte)97,(byte)105,(byte)110
|
||||
};
|
||||
|
||||
}
|
|
@ -15,116 +15,116 @@ import net.lax1dude.eaglercraft.glemu.vector.Vector4f;
|
|||
|
||||
public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
|
||||
|
||||
public static final int GL_ZERO = 0;
|
||||
public static final int GL_ONE = 1;
|
||||
public static final int GL_TEXTURE_2D = 2;
|
||||
public static final int GL_SMOOTH = 3;
|
||||
public static final int GL_DEPTH_TEST = 4;
|
||||
public static final int GL_LEQUAL = 5;
|
||||
public static final int GL_ALPHA_TEST = 6;
|
||||
public static final int GL_GREATER = 7;
|
||||
public static final int GL_BACK = 8;
|
||||
public static final int GL_PROJECTION = 9;
|
||||
public static final int GL_MODELVIEW = 10;
|
||||
public static final int GL_COLOR_BUFFER_BIT = 1;
|
||||
public static final int GL_DEPTH_BUFFER_BIT = 2;
|
||||
public static final int GL_LIGHTING = 13;
|
||||
public static final int GL_FOG = 14;
|
||||
public static final int GL_COLOR_MATERIAL = 15;
|
||||
public static final int GL_BLEND = 16;
|
||||
public static final int GL_RGBA = 18;
|
||||
public static final int GL_UNSIGNED_BYTE = 19;
|
||||
public static final int GL_TEXTURE_WIDTH = 20;
|
||||
public static final int GL_LIGHT0 = 21;
|
||||
public static final int GL_LIGHT1 = 22;
|
||||
public static final int GL_POSITION = 30;
|
||||
public static final int GL_DIFFUSE = 31;
|
||||
public static final int GL_SPECULAR = 32;
|
||||
public static final int GL_AMBIENT = 33;
|
||||
public static final int GL_FLAT = 34;
|
||||
public static final int GL_LIGHT_MODEL_AMBIENT = 35;
|
||||
public static final int GL_FRONT_AND_BACK = 36;
|
||||
public static final int GL_AMBIENT_AND_DIFFUSE = 37;
|
||||
public static final int GL_MODELVIEW_MATRIX = 38;
|
||||
public static final int GL_PROJECTION_MATRIX = 39;
|
||||
public static final int GL_VIEWPORT = 40;
|
||||
public static final int GL_RESCALE_NORMAL = 41;
|
||||
public static final int GL_SRC_ALPHA = 42;
|
||||
public static final int GL_ONE_MINUS_SRC_ALPHA = 43;
|
||||
public static final int GL_ONE_MINUS_DST_COLOR = 44;
|
||||
public static final int GL_ONE_MINUS_SRC_COLOR = 45;
|
||||
public static final int GL_CULL_FACE = 46;
|
||||
public static final int GL_TEXTURE_MIN_FILTER = 47;
|
||||
public static final int GL_TEXTURE_MAG_FILTER = 48;
|
||||
public static final int GL_LINEAR = 49;
|
||||
public static final int GL_COLOR_LOGIC_OP = 50;
|
||||
public static final int GL_OR_REVERSE = 51;
|
||||
public static final int GL_EQUAL = 52;
|
||||
public static final int GL_SRC_COLOR = 53;
|
||||
public static final int GL_TEXTURE = 54;
|
||||
public static final int GL_FRONT = 55;
|
||||
public static final int GL_COMPILE = 56;
|
||||
public static final int GL_S = 57;
|
||||
public static final int GL_T = 58;
|
||||
public static final int GL_R = 59;
|
||||
public static final int GL_Q = 60;
|
||||
public static final int GL_TEXTURE_GEN_S = 61;
|
||||
public static final int GL_TEXTURE_GEN_T = 62;
|
||||
public static final int GL_TEXTURE_GEN_R = 63;
|
||||
public static final int GL_TEXTURE_GEN_Q = 64;
|
||||
public static final int GL_TEXTURE_GEN_MODE = 65;
|
||||
public static final int GL_OBJECT_PLANE = 66;
|
||||
public static final int GL_EYE_PLANE = 67;
|
||||
public static final int GL_OBJECT_LINEAR = 68;
|
||||
public static final int GL_EYE_LINEAR = 69;
|
||||
public static final int GL_NEAREST = 70;
|
||||
public static final int GL_CLAMP = 71;
|
||||
public static final int GL_TEXTURE_WRAP_S = 72;
|
||||
public static final int GL_TEXTURE_WRAP_T = 73;
|
||||
public static final int GL_REPEAT = 74;
|
||||
public static final int GL_BGRA = 75;
|
||||
public static final int GL_UNSIGNED_INT_8_8_8_8_REV = 76;
|
||||
public static final int GL_DST_COLOR = 77;
|
||||
public static final int GL_POLYGON_OFFSET_FILL = 78;
|
||||
public static final int GL_NORMALIZE = 79;
|
||||
public static final int GL_DST_ALPHA = 80;
|
||||
public static final int GL_FLOAT = 81;
|
||||
public static final int GL_TEXTURE_COORD_ARRAY = 82;
|
||||
public static final int GL_SHORT = 83;
|
||||
public static final int GL_COLOR_ARRAY = 84;
|
||||
public static final int GL_VERTEX_ARRAY = 85;
|
||||
public static final int GL_TRIANGLES = 86;
|
||||
public static final int GL_NORMAL_ARRAY = 87;
|
||||
public static final int GL_TEXTURE_3D = 88;
|
||||
public static final int GL_FOG_MODE = 89;
|
||||
public static final int GL_EXP = 90;
|
||||
public static final int GL_FOG_DENSITY = 91;
|
||||
public static final int GL_FOG_START = 92;
|
||||
public static final int GL_FOG_END = 93;
|
||||
public static final int GL_FOG_COLOR = 94;
|
||||
public static final int GL_TRIANGLE_STRIP = 95;
|
||||
public static final int GL_PACK_ALIGNMENT = 96;
|
||||
public static final int GL_UNPACK_ALIGNMENT = 97;
|
||||
public static final int GL_QUADS = 98;
|
||||
public static final int GL_TEXTURE0 = 99;
|
||||
public static final int GL_TEXTURE1 = 100;
|
||||
public static final int GL_TEXTURE2 = 101;
|
||||
public static final int GL_TEXTURE3 = 102;
|
||||
public static final int GL_INVALID_ENUM = 140;
|
||||
public static final int GL_INVALID_VALUE= 141;
|
||||
public static final int GL_INVALID_OPERATION = 142;
|
||||
public static final int GL_OUT_OF_MEMORY = 143;
|
||||
public static final int GL_CONTEXT_LOST_WEBGL = 144;
|
||||
public static final int GL_TRIANGLE_FAN = 145;
|
||||
public static final int GL_LINE_STRIP = 146;
|
||||
public static final int GL_LIGHTING2 = 147;
|
||||
public static final int GL_LINES = 148;
|
||||
public static final int GL_NEAREST_MIPMAP_LINEAR = 149;
|
||||
public static final int GL_TEXTURE_MAX_ANISOTROPY = 150;
|
||||
public static final int GL_TEXTURE_MAX_LEVEL = 151;
|
||||
public static final int GL_LINEAR_MIPMAP_LINEAR = 152;
|
||||
public static final int GL_LINEAR_MIPMAP_NEAREST = 153;
|
||||
public static final int GL_NEAREST_MIPMAP_NEAREST = 154;
|
||||
public static final int GL_ZERO = RealOpenGLEnums.GL_ZERO;
|
||||
public static final int GL_ONE = RealOpenGLEnums.GL_ONE;
|
||||
public static final int GL_TEXTURE_2D = RealOpenGLEnums.GL_TEXTURE_2D;
|
||||
public static final int GL_SMOOTH = RealOpenGLEnums.GL_SMOOTH;
|
||||
public static final int GL_DEPTH_TEST = RealOpenGLEnums.GL_DEPTH_TEST;
|
||||
public static final int GL_LEQUAL = RealOpenGLEnums.GL_LEQUAL;
|
||||
public static final int GL_ALPHA_TEST = RealOpenGLEnums.GL_ALPHA_TEST;
|
||||
public static final int GL_GREATER = RealOpenGLEnums.GL_GREATER;
|
||||
public static final int GL_BACK = RealOpenGLEnums.GL_BACK;
|
||||
public static final int GL_PROJECTION = RealOpenGLEnums.GL_PROJECTION;
|
||||