diff --git a/.idea/misc.xml b/.idea/misc.xml index c3fc748c8..f125deeb7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -38,7 +38,7 @@ - + \ No newline at end of file diff --git a/lib/AppleJavaExtensions-1.4.jar b/lib/AppleJavaExtensions-1.4.jar deleted file mode 100644 index d1aa7851d..000000000 Binary files a/lib/AppleJavaExtensions-1.4.jar and /dev/null differ diff --git a/lib/AppleJavaExtensions-1.4.jar.gz b/lib/AppleJavaExtensions-1.4.jar.gz new file mode 100644 index 000000000..a4dec1b54 --- /dev/null +++ b/lib/AppleJavaExtensions-1.4.jar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a33c7cfa851124610d83ffc30dc2495c8549c2a65a4cac9a30a152d7adb6b70 +size 8607 diff --git a/lib/gdx-backend-lwjgl3.jar b/lib/gdx-backend-lwjgl3.jar deleted file mode 100644 index 492ac9aaa..000000000 Binary files a/lib/gdx-backend-lwjgl3.jar and /dev/null differ diff --git a/lib/gdx-backend-lwjgl3.jar.gz b/lib/gdx-backend-lwjgl3.jar.gz new file mode 100644 index 000000000..2a391f531 --- /dev/null +++ b/lib/gdx-backend-lwjgl3.jar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95f27e027b825dfb4603b5efcdfb3e68e0cdd45a5653e11fbba7c25e79df87db +size 1691011 diff --git a/lib/gdx-controllers-lwjgl3.jar b/lib/gdx-controllers-lwjgl3.jar deleted file mode 100644 index 219f44aca..000000000 Binary files a/lib/gdx-controllers-lwjgl3.jar and /dev/null differ diff --git a/lib/gdx-controllers-lwjgl3.jar.gz b/lib/gdx-controllers-lwjgl3.jar.gz new file mode 100644 index 000000000..a404999d6 --- /dev/null +++ b/lib/gdx-controllers-lwjgl3.jar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5d6954efe7547a4ae86fd7cd27343a4ff8a3c1b5537e990e506af8e2c438707 +size 5541 diff --git a/lib/gdx-nightly-20170610.zip b/lib/gdx-nightly-20170610.zip deleted file mode 100644 index 1c7582ca9..000000000 --- a/lib/gdx-nightly-20170610.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ee007f71452f9c2d6d3274845814f397eb05c297b978c40d1bbd3b7842b08559 -size 13757529 diff --git a/lib/gdx-nightly-20170610.zip.gz b/lib/gdx-nightly-20170610.zip.gz new file mode 100644 index 000000000..6929e9eb7 --- /dev/null +++ b/lib/gdx-nightly-20170610.zip.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30d86d6e6ed0ea725e7e8d4cd4bb9aa0ab1ef69c9e14eb557808cd8e2ace8737 +size 13760205 diff --git a/lib/gdx-nightly-20181111.zip b/lib/gdx-nightly-20181111.zip deleted file mode 100644 index f7bae4b8a..000000000 --- a/lib/gdx-nightly-20181111.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0cd019457445999d7fbba963301c8b6caa6e89c3a9cdf80c450e75cadd998bff -size 7837787 diff --git a/lib/gdx-nightly-20181111.zip.gz b/lib/gdx-nightly-20181111.zip.gz new file mode 100644 index 000000000..e12f352bd --- /dev/null +++ b/lib/gdx-nightly-20181111.zip.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2d984a7706b6b047e5b4974090f66015afb864d0c3059959d8fc9a18b2fe558 +size 7840303 diff --git a/lib/gdx-nightly-20190112.zip b/lib/gdx-nightly-20190112.zip deleted file mode 100644 index 381ccc663..000000000 --- a/lib/gdx-nightly-20190112.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:21c2abdcc6bbacbfe579c25d4101f4c41b4335833485c346cb0ce1b742ebd8ef -size 10003424 diff --git a/lib/gdx-nightly-20190112.zip.gz b/lib/gdx-nightly-20190112.zip.gz new file mode 100644 index 000000000..bf3a8d807 --- /dev/null +++ b/lib/gdx-nightly-20190112.zip.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5d7c447e5f6f67191984aa7a3b93a40d7a31a93991659443eca4b685fc44423 +size 10005989 diff --git a/lib/jogg-0.0.7.jar b/lib/jogg-0.0.7.jar deleted file mode 100644 index ecb026034..000000000 Binary files a/lib/jogg-0.0.7.jar and /dev/null differ diff --git a/lib/jogg-0.0.7.jar.gz b/lib/jogg-0.0.7.jar.gz new file mode 100644 index 000000000..983351b54 --- /dev/null +++ b/lib/jogg-0.0.7.jar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07108b22478debd82b3affbf17d8adfc0c95f71ec16898a080e6a777bcad3f63 +size 6122 diff --git a/lib/jorbis-0.0.17.jar b/lib/jorbis-0.0.17.jar deleted file mode 100644 index e58a6aaf6..000000000 Binary files a/lib/jorbis-0.0.17.jar and /dev/null differ diff --git a/lib/jorbis-0.0.17.jar.gz b/lib/jorbis-0.0.17.jar.gz new file mode 100644 index 000000000..f87a868dd --- /dev/null +++ b/lib/jorbis-0.0.17.jar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ac3bed29268510d5f9dddadcf8e38fc77ffaca21df307ed73c108c6ef01f123 +size 94544 diff --git a/lib/libjinput.zip b/lib/libjinput.zip deleted file mode 100644 index 571e8b633..000000000 --- a/lib/libjinput.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:56dbd27bd4cb84906ac0e2a4a9547300a85661d2b273c060bd8a8483282f1b18 -size 342890 diff --git a/lib/libjinput.zip.gz b/lib/libjinput.zip.gz new file mode 100644 index 000000000..10950c87a --- /dev/null +++ b/lib/libjinput.zip.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e69225c091ee28d6c48b94dbcccccb7b8b58420c82558ddd94e9f2cbc0f73377 +size 342469 diff --git a/lib/luaj-jse-3.0.1.jar b/lib/luaj-jse-3.0.1.jar deleted file mode 100644 index e1258605e..000000000 Binary files a/lib/luaj-jse-3.0.1.jar and /dev/null differ diff --git a/lib/luaj-jse-3.0.2.jar b/lib/luaj-jse-3.0.2.jar new file mode 100644 index 000000000..f14957539 Binary files /dev/null and b/lib/luaj-jse-3.0.2.jar differ diff --git a/lib/source/luaj-sources-3.0.1.jar b/lib/source/luaj-sources-3.0.1.jar deleted file mode 100644 index 9e8df5d4b..000000000 Binary files a/lib/source/luaj-sources-3.0.1.jar and /dev/null differ diff --git a/lib/source/luaj-sources-3.0.2.jar b/lib/source/luaj-sources-3.0.2.jar new file mode 100644 index 000000000..3a89c23bd Binary files /dev/null and b/lib/source/luaj-sources-3.0.2.jar differ diff --git a/src/com/badlogic/gdx/backends/lwjgl/audio/OpenALAudio.java b/src/com/badlogic/gdx/backends/lwjgl/audio/OpenALAudio.java deleted file mode 100644 index 593573ed4..000000000 --- a/src/com/badlogic/gdx/backends/lwjgl/audio/OpenALAudio.java +++ /dev/null @@ -1,367 +0,0 @@ -/******************************************************************************* - * Copyright 2011 See AUTHORS file. - * - * 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. - ******************************************************************************/ - -package com.badlogic.gdx.backends.lwjgl.audio; - -import java.nio.FloatBuffer; - -import org.lwjgl.BufferUtils; -import org.lwjgl.LWJGLException; -import org.lwjgl.openal.AL; -import org.lwjgl.openal.AL10; - -import com.badlogic.gdx.Audio; -import com.badlogic.gdx.audio.AudioDevice; -import com.badlogic.gdx.audio.AudioRecorder; -import com.badlogic.gdx.files.FileHandle; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.GdxRuntimeException; -import com.badlogic.gdx.utils.IntArray; -import com.badlogic.gdx.utils.IntMap; -import com.badlogic.gdx.utils.LongMap; -import com.badlogic.gdx.utils.ObjectMap; - -import static org.lwjgl.openal.AL10.*; - -/** @author Nathan Sweet */ -public class OpenALAudio implements Audio { - private final int deviceBufferSize; - private final int deviceBufferCount; - private IntArray idleSources, allSources; - private LongMap soundIdToSource; - private IntMap sourceToSoundId; - private long nextSoundId = 0; - private ObjectMap> extensionToSoundClass = new ObjectMap(); - private ObjectMap> extensionToMusicClass = new ObjectMap(); - private OpenALSound[] recentSounds; - private int mostRecetSound = -1; - - Array music = new Array(false, 1, OpenALMusic.class); - boolean noDevice = false; - - public OpenALAudio () { - this(16, 9, 512); - } - - public OpenALAudio (int simultaneousSources, int deviceBufferCount, int deviceBufferSize) { - this.deviceBufferSize = deviceBufferSize; - this.deviceBufferCount = deviceBufferCount; - - registerSound("ogg", Ogg.Sound.class); - registerMusic("ogg", Ogg.Music.class); - registerSound("wav", Wav.Sound.class); - registerMusic("wav", Wav.Music.class); - registerSound("mp3", Mp3.Sound.class); - registerMusic("mp3", Mp3.Music.class); - - try { - AL.create(); - } catch (LWJGLException ex) { - noDevice = true; - ex.printStackTrace(); - return; - } - - allSources = new IntArray(false, simultaneousSources); - for (int i = 0; i < simultaneousSources; i++) { - int sourceID = alGenSources(); - if (alGetError() != AL_NO_ERROR) break; - allSources.add(sourceID); - } - idleSources = new IntArray(allSources); - soundIdToSource = new LongMap(); - sourceToSoundId = new IntMap(); - - FloatBuffer orientation = (FloatBuffer)BufferUtils.createFloatBuffer(6) - .put(new float[] {0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f}).flip(); - alListener(AL_ORIENTATION, orientation); - FloatBuffer velocity = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] {0.0f, 0.0f, 0.0f}).flip(); - alListener(AL_VELOCITY, velocity); - FloatBuffer position = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] {0.0f, 0.0f, 0.0f}).flip(); - alListener(AL_POSITION, position); - - recentSounds = new OpenALSound[simultaneousSources]; - } - - public void registerSound (String extension, Class soundClass) { - if (extension == null) throw new IllegalArgumentException("extension cannot be null."); - if (soundClass == null) throw new IllegalArgumentException("soundClass cannot be null."); - extensionToSoundClass.put(extension, soundClass); - } - - public void registerMusic (String extension, Class musicClass) { - if (extension == null) throw new IllegalArgumentException("extension cannot be null."); - if (musicClass == null) throw new IllegalArgumentException("musicClass cannot be null."); - extensionToMusicClass.put(extension, musicClass); - } - - public OpenALSound newSound (FileHandle file) { - if (file == null) throw new IllegalArgumentException("file cannot be null."); - Class soundClass = extensionToSoundClass.get(file.extension().toLowerCase()); - if (soundClass == null) throw new GdxRuntimeException("Unknown file extension for sound: " + file); - try { - return soundClass.getConstructor(new Class[] {OpenALAudio.class, FileHandle.class}).newInstance(this, file); - } catch (Exception ex) { - throw new GdxRuntimeException("Error creating sound " + soundClass.getName() + " for file: " + file, ex); - } - } - - public OpenALMusic newMusic (FileHandle file) { - if (file == null) throw new IllegalArgumentException("file cannot be null."); - Class musicClass = extensionToMusicClass.get(file.extension().toLowerCase()); - if (musicClass == null) throw new GdxRuntimeException("Unknown file extension for music: " + file); - try { - return musicClass.getConstructor(new Class[] {OpenALAudio.class, FileHandle.class}).newInstance(this, file); - } catch (Exception ex) { - throw new GdxRuntimeException("Error creating music " + musicClass.getName() + " for file: " + file, ex); - } - } - - int obtainSource (boolean isMusic) { - if (noDevice) return 0; - for (int i = 0, n = idleSources.size; i < n; i++) { - int sourceId = idleSources.get(i); - int state = alGetSourcei(sourceId, AL_SOURCE_STATE); - if (state != AL_PLAYING && state != AL_PAUSED) { - if (isMusic) { - idleSources.removeIndex(i); - } else { - if (sourceToSoundId.containsKey(sourceId)) { - long soundId = sourceToSoundId.get(sourceId); - sourceToSoundId.remove(sourceId); - soundIdToSource.remove(soundId); - } - - long soundId = nextSoundId++; - sourceToSoundId.put(sourceId, soundId); - soundIdToSource.put(soundId, sourceId); - } - alSourceStop(sourceId); - alSourcei(sourceId, AL_BUFFER, 0); - AL10.alSourcef(sourceId, AL10.AL_GAIN, 1); - AL10.alSourcef(sourceId, AL10.AL_PITCH, 1); - AL10.alSource3f(sourceId, AL10.AL_POSITION, 0, 0, 1f); - return sourceId; - } - } - return -1; - } - - void freeSource (int sourceID) { - if (noDevice) return; - alSourceStop(sourceID); - alSourcei(sourceID, AL_BUFFER, 0); - if (sourceToSoundId.containsKey(sourceID)) { - long soundId = sourceToSoundId.remove(sourceID); - soundIdToSource.remove(soundId); - } - idleSources.add(sourceID); - } - - void freeBuffer (int bufferID) { - if (noDevice) return; - for (int i = 0, n = idleSources.size; i < n; i++) { - int sourceID = idleSources.get(i); - if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) { - if (sourceToSoundId.containsKey(sourceID)) { - long soundId = sourceToSoundId.remove(sourceID); - soundIdToSource.remove(soundId); - } - alSourceStop(sourceID); - alSourcei(sourceID, AL_BUFFER, 0); - } - } - } - - void stopSourcesWithBuffer (int bufferID) { - if (noDevice) return; - for (int i = 0, n = idleSources.size; i < n; i++) { - int sourceID = idleSources.get(i); - if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) { - if (sourceToSoundId.containsKey(sourceID)) { - long soundId = sourceToSoundId.remove(sourceID); - soundIdToSource.remove(soundId); - } - alSourceStop(sourceID); - } - } - } - - void pauseSourcesWithBuffer (int bufferID) { - if (noDevice) return; - for (int i = 0, n = idleSources.size; i < n; i++) { - int sourceID = idleSources.get(i); - if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) - alSourcePause(sourceID); - } - } - - void resumeSourcesWithBuffer (int bufferID) { - if (noDevice) return; - for (int i = 0, n = idleSources.size; i < n; i++) { - int sourceID = idleSources.get(i); - if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) { - if (alGetSourcei(sourceID, AL_SOURCE_STATE) == AL_PAUSED) - alSourcePlay(sourceID); - } - } - } - - public void update () { - if (noDevice) return; - for (int i = 0; i < music.size; i++) - music.items[i].update(); - } - - public long getSoundId (int sourceId) { - if (!sourceToSoundId.containsKey(sourceId)) return -1; - return sourceToSoundId.get(sourceId); - } - - public void stopSound (long soundId) { - if (!soundIdToSource.containsKey(soundId)) return; - int sourceId = soundIdToSource.get(soundId); - alSourceStop(sourceId); - } - - public void pauseSound (long soundId) { - if (!soundIdToSource.containsKey(soundId)) return; - int sourceId = soundIdToSource.get(soundId); - alSourcePause(sourceId); - } - - public void resumeSound (long soundId) { - if (!soundIdToSource.containsKey(soundId)) return; - int sourceId = soundIdToSource.get(soundId); - if (alGetSourcei(sourceId, AL_SOURCE_STATE) == AL_PAUSED) - alSourcePlay(sourceId); - } - - public void setSoundGain (long soundId, float volume) { - if (!soundIdToSource.containsKey(soundId)) return; - int sourceId = soundIdToSource.get(soundId); - AL10.alSourcef(sourceId, AL10.AL_GAIN, volume); - } - - public void setSoundLooping (long soundId, boolean looping) { - if (!soundIdToSource.containsKey(soundId)) return; - int sourceId = soundIdToSource.get(soundId); - alSourcei(sourceId, AL10.AL_LOOPING, looping ? AL10.AL_TRUE : AL10.AL_FALSE); - } - - public void setSoundPitch (long soundId, float pitch) { - if (!soundIdToSource.containsKey(soundId)) return; - int sourceId = soundIdToSource.get(soundId); - AL10.alSourcef(sourceId, AL10.AL_PITCH, pitch); - } - - public void setSoundPan (long soundId, float pan, float volume) { - if (!soundIdToSource.containsKey(soundId)) return; - int sourceId = soundIdToSource.get(soundId); - - AL10.alSource3f(sourceId, AL10.AL_POSITION, MathUtils.cos((pan - 1) * MathUtils.PI / 2), 0, - MathUtils.sin((pan + 1) * MathUtils.PI / 2)); - AL10.alSourcef(sourceId, AL10.AL_GAIN, volume); - } - - public void dispose () { - if (noDevice) return; - for (int i = 0, n = allSources.size; i < n; i++) { - int sourceID = allSources.get(i); - int state = alGetSourcei(sourceID, AL_SOURCE_STATE); - if (state != AL_STOPPED) alSourceStop(sourceID); - alDeleteSources(sourceID); - } - - sourceToSoundId.clear(); - soundIdToSource.clear(); - - AL.destroy(); - while (AL.isCreated()) { - try { - Thread.sleep(10); - } catch (InterruptedException e) { - } - } - } - - public AudioDevice newAudioDevice (int sampleRate, final boolean isMono) { - if (noDevice) return new AudioDevice() { - @Override - public void writeSamples (float[] samples, int offset, int numSamples) { - } - - @Override - public void writeSamples (short[] samples, int offset, int numSamples) { - } - - @Override - public void setVolume (float volume) { - } - - @Override - public boolean isMono () { - return isMono; - } - - @Override - public int getLatency () { - return 0; - } - - @Override - public void dispose () { - } - }; - return new OpenALAudioDevice(this, sampleRate, isMono, deviceBufferSize, deviceBufferCount); - } - - public AudioRecorder newAudioRecorder (int samplingRate, boolean isMono) { - if (noDevice) return new AudioRecorder() { - @Override - public void read (short[] samples, int offset, int numSamples) { - } - - @Override - public void dispose () { - } - }; - return new JavaSoundAudioRecorder(samplingRate, isMono); - } - - /** Retains a list of the most recently played sounds and stops the sound played least recently if necessary for a new sound to - * play */ - protected void retain (OpenALSound sound, boolean stop) { - // Move the pointer ahead and wrap - mostRecetSound++; - mostRecetSound %= recentSounds.length; - - if (stop) { - // Stop the least recent sound (the one we are about to bump off the buffer) - if (recentSounds[mostRecetSound] != null) recentSounds[mostRecetSound].stop(); - } - - recentSounds[mostRecetSound] = sound; - } - - /** Removes the disposed sound from the least recently played list */ - public void forget (OpenALSound sound) { - for (int i = 0; i < recentSounds.length; i++) { - if (recentSounds[i] == sound) recentSounds[i] = null; - } - } -} diff --git a/src/module-info.java.wtf b/src/module-info.java.wtf new file mode 100644 index 000000000..f5a203305 --- /dev/null +++ b/src/module-info.java.wtf @@ -0,0 +1,16 @@ +module terrarum { + requires gdx; + requires gdx.backend.lwjgl; + requires gdx.controllers; + requires jxinput; + requires gson; + requires GetCpuName; + requires TerrarumSansBitmap; + requires kotlin.stdlib; + requires java.desktop; + requires java.logging; + requires TerranVirtualDisk; + requires commons.codec; + requires commons.csv; + requires Terrarum.Joise; +} \ No newline at end of file diff --git a/src/net/torvald/colourutil/CIELChabUtil.kt b/src/net/torvald/colourutil/CIELChabUtil.kt index 78f7c0ea2..7c36342fc 100644 --- a/src/net/torvald/colourutil/CIELChabUtil.kt +++ b/src/net/torvald/colourutil/CIELChabUtil.kt @@ -1,5 +1,6 @@ package net.torvald.colourutil +import com.badlogic.gdx.graphics.Color import com.jme3.math.FastMath import net.torvald.colourutil.CIELChabUtil.toLCh import net.torvald.colourutil.CIELChabUtil.toLab @@ -7,7 +8,6 @@ import net.torvald.colourutil.CIELabUtil.toLab import net.torvald.colourutil.CIEXYZUtil.toXYZ import net.torvald.colourutil.CIEXYZUtil.toColor import net.torvald.colourutil.CIELabUtil.toXYZ -import com.badlogic.gdx.graphics.Color /** * Cylindrical modification of CIELab colour space * diff --git a/src/net/torvald/colourutil/CIELabUtil.kt b/src/net/torvald/colourutil/CIELabUtil.kt index 2ce79b7f5..fcb52b67a 100644 --- a/src/net/torvald/colourutil/CIELabUtil.kt +++ b/src/net/torvald/colourutil/CIELabUtil.kt @@ -1,12 +1,12 @@ package net.torvald.colourutil +import com.badlogic.gdx.graphics.Color import com.jme3.math.FastMath import net.torvald.colourutil.CIELabUtil.toLab import net.torvald.colourutil.CIEXYZUtil.toColor import net.torvald.colourutil.CIEXYZUtil.toRGB import net.torvald.colourutil.CIEXYZUtil.toXYZ import net.torvald.colourutil.CIELabUtil.toXYZ -import com.badlogic.gdx.graphics.Color /** * A modification of CIEXYZ that is useful for surface colours diff --git a/src/net/torvald/colourutil/CIELuvUtil.kt b/src/net/torvald/colourutil/CIELuvUtil.kt index 768a28634..ab61ac33b 100644 --- a/src/net/torvald/colourutil/CIELuvUtil.kt +++ b/src/net/torvald/colourutil/CIELuvUtil.kt @@ -2,7 +2,6 @@ package net.torvald.colourutil import com.jme3.math.FastMath import com.badlogic.gdx.graphics.Color -import net.torvald.colourutil.CIELabUtil.toXYZ import net.torvald.colourutil.CIEXYZUtil.toColor import net.torvald.colourutil.CIEXYZUtil.toRGB import net.torvald.colourutil.CIEXYZUtil.toXYZ diff --git a/src/com/badlogic/gdx/graphics/Color.java b/src/net/torvald/gdx/graphics/Cvec.java similarity index 56% rename from src/com/badlogic/gdx/graphics/Color.java rename to src/net/torvald/gdx/graphics/Cvec.java index 56836fcf6..3c2c9fabb 100644 --- a/src/com/badlogic/gdx/graphics/Color.java +++ b/src/net/torvald/gdx/graphics/Cvec.java @@ -14,70 +14,35 @@ * limitations under the License. ******************************************************************************/ -package com.badlogic.gdx.graphics; +package net.torvald.gdx.graphics; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.NumberUtils; /** A color class, holding the r, g, b and alpha component as floats in the range [0,1]. All methods perform clamping on the * internal values after execution. * * @author mzechner */ -public class Color { - public static final Color WHITE = new Color(1, 1, 1,1); - public static final Color LIGHT_GRAY = new Color(0xbfbfbfff); - public static final Color GRAY = new Color(0x7f7f7fff); - public static final Color DARK_GRAY = new Color(0x3f3f3fff); - public static final Color BLACK = new Color(0, 0, 0, 1); - - /** Convenience for frequently used WHITE.toFloatBits() */ - public static final float WHITE_FLOAT_BITS = WHITE.toFloatBits(); - - public static final Color CLEAR = new Color(0, 0, 0, 0); - - public static final Color BLUE = new Color(0, 0, 1, 1); - public static final Color NAVY = new Color(0, 0, 0.5f, 1); - public static final Color ROYAL = new Color(0x4169e1ff); - public static final Color SLATE = new Color(0x708090ff); - public static final Color SKY = new Color(0x87ceebff); - public static final Color CYAN = new Color(0, 1, 1, 1); - public static final Color TEAL = new Color(0, 0.5f, 0.5f, 1); - - public static final Color GREEN = new Color(0x00ff00ff); - public static final Color CHARTREUSE = new Color(0x7fff00ff); - public static final Color LIME = new Color(0x32cd32ff); - public static final Color FOREST = new Color(0x228b22ff); - public static final Color OLIVE = new Color(0x6b8e23ff); - - public static final Color YELLOW = new Color(0xffff00ff); - public static final Color GOLD = new Color(0xffd700ff); - public static final Color GOLDENROD = new Color(0xdaa520ff); - public static final Color ORANGE = new Color(0xffa500ff); - - public static final Color BROWN = new Color(0x8b4513ff); - public static final Color TAN = new Color(0xd2b48cff); - public static final Color FIREBRICK = new Color(0xb22222ff); - - public static final Color RED = new Color(0xff0000ff); - public static final Color SCARLET = new Color(0xff341cff); - public static final Color CORAL = new Color(0xff7f50ff); - public static final Color SALMON = new Color(0xfa8072ff); - public static final Color PINK = new Color(0xff69b4ff); - public static final Color MAGENTA = new Color(1, 0, 1, 1); - - public static final Color PURPLE = new Color(0xa020f0ff); - public static final Color VIOLET = new Color(0xee82eeff); - public static final Color MAROON = new Color(0xb03060ff); +public class Cvec { + public static final Cvec WHITE = new Cvec(1, 1, 1,1); /** the red, green, blue and alpha components **/ public float r, g, b, a; - /** Constructs a new Color with all components set to 0. */ - public Color () { + /** Constructs a new Cvec with all components set to 0. */ + public Cvec () { } - /** @see #rgba8888ToColor(Color, int) */ - public Color (int rgba8888) { - rgba8888ToColor(this, rgba8888); + /** @see #rgba8888ToCvec(Cvec, int) */ + public Cvec (int rgba8888) { + rgba8888ToCvec(this, rgba8888); + } + + public Cvec (Color color) { + this.r = color.r; + this.g = color.g; + this.b = color.b; + this.a = color.a; } /** Constructor, sets the components of the color @@ -86,7 +51,7 @@ public class Color { * @param g the green component * @param b the blue component * @param a the alpha component */ - public Color (float r, float g, float b, float a) { + public Cvec (float r, float g, float b, float a) { this.r = r; this.g = g; this.b = b; @@ -96,14 +61,14 @@ public class Color { /** Constructs a new color using the given color * * @param color the color */ - public Color (Color color) { + public Cvec (Cvec color) { set(color); } /** Sets this color to the given color. * - * @param color the Color */ - public Color set (Color color) { + * @param color the Cvec */ + public Cvec set (Cvec color) { this.r = color.r; this.g = color.g; this.b = color.b; @@ -115,7 +80,7 @@ public class Color { * * @param color the color * @return this color. */ - public Color mul (Color color) { + public Cvec mul (Cvec color) { this.r *= color.r; this.g *= color.g; this.b *= color.b; @@ -123,11 +88,11 @@ public class Color { return this; } - /** Multiplies all components of this Color with the given value. + /** Multiplies all components of this Cvec with the given value. * * @param value the value * @return this color */ - public Color mul (float value) { + public Cvec mul (float value) { this.r *= value; this.g *= value; this.b *= value; @@ -139,7 +104,7 @@ public class Color { * * @param color the color * @return this color */ - public Color add (Color color) { + public Cvec add (Cvec color) { this.r += color.r; this.g += color.g; this.b += color.b; @@ -151,7 +116,7 @@ public class Color { * * @param color the color * @return this color */ - public Color sub (Color color) { + public Cvec sub (Cvec color) { this.r -= color.r; this.g -= color.g; this.b -= color.b; @@ -159,15 +124,15 @@ public class Color { return this; } - /** Sets this Color's component values. + /** Sets this Cvec's component values. * * @param r Red component * @param g Green component * @param b Blue component * @param a Alpha component * - * @return this Color for chaining */ - public Color set (float r, float g, float b, float a) { + * @return this Cvec for chaining */ + public Cvec set (float r, float g, float b, float a) { this.r = r; this.g = g; this.b = b; @@ -177,22 +142,22 @@ public class Color { /** Sets this color's component values through an integer representation. * - * @return this Color for chaining - * @see #rgba8888ToColor(Color, int) */ - public Color set (int rgba) { - rgba8888ToColor(this, rgba); + * @return this Cvec for chaining + * @see #rgba8888ToCvec(Cvec, int) */ + public Cvec set (int rgba) { + rgba8888ToCvec(this, rgba); return this; } - /** Adds the given color component values to this Color's values. + /** Adds the given color component values to this Cvec's values. * * @param r Red component * @param g Green component * @param b Blue component * @param a Alpha component * - * @return this Color for chaining */ - public Color add (float r, float g, float b, float a) { + * @return this Cvec for chaining */ + public Cvec add (float r, float g, float b, float a) { this.r += r; this.g += g; this.b += b; @@ -200,15 +165,15 @@ public class Color { return this; } - /** Subtracts the given values from this Color's component values. + /** Subtracts the given values from this Cvec's component values. * * @param r Red component * @param g Green component * @param b Blue component * @param a Alpha component * - * @return this Color for chaining */ - public Color sub (float r, float g, float b, float a) { + * @return this Cvec for chaining */ + public Cvec sub (float r, float g, float b, float a) { this.r -= r; this.g -= g; this.b -= b; @@ -216,15 +181,15 @@ public class Color { return this; } - /** Multiplies this Color's color components by the given ones. + /** Multiplies this Cvec's color components by the given ones. * * @param r Red component * @param g Green component * @param b Blue component * @param a Alpha component * - * @return this Color for chaining */ - public Color mul (float r, float g, float b, float a) { + * @return this Cvec for chaining */ + public Cvec mul (float r, float g, float b, float a) { this.r *= r; this.g *= g; this.b *= b; @@ -237,7 +202,7 @@ public class Color { * @param target The target color * @param t The interpolation coefficient * @return This color for chaining. */ - public Color lerp (final Color target, final float t) { + public Cvec lerp (final Cvec target, final float t) { this.r += t * (target.r - this.r); this.g += t * (target.g - this.g); this.b += t * (target.b - this.b); @@ -253,7 +218,7 @@ public class Color { * @param a The alpha component of the target color * @param t The interpolation coefficient * @return This color for chaining. */ - public Color lerp (final float r, final float g, final float b, final float a, final float t) { + public Cvec lerp (final float r, final float g, final float b, final float a, final float t) { this.r += t * (r - this.r); this.g += t * (g - this.g); this.b += t * (b - this.b); @@ -262,7 +227,7 @@ public class Color { } /** Multiplies the RGB values by the alpha. */ - public Color premultiplyAlpha () { + public Cvec premultiplyAlpha () { r *= a; g *= a; b *= a; @@ -273,7 +238,7 @@ public class Color { public boolean equals (Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - Color color = (Color)o; + Cvec color = (Cvec)o; return toIntBits() == color.toIntBits(); } @@ -311,35 +276,13 @@ public class Color { /** Returns a new color from a hex string with the format RRGGBBAA. * @see #toString() */ - public static Color valueOf (String hex) { + public static Cvec valueOf (String hex) { hex = hex.charAt(0) == '#' ? hex.substring(1) : hex; int r = Integer.valueOf(hex.substring(0, 2), 16); int g = Integer.valueOf(hex.substring(2, 4), 16); int b = Integer.valueOf(hex.substring(4, 6), 16); int a = hex.length() != 8 ? 255 : Integer.valueOf(hex.substring(6, 8), 16); - return new Color(r / 255f, g / 255f, b / 255f, a / 255f); - } - - /** Packs the color components into a 32-bit integer with the format ABGR and then converts it to a float. Note that no range - * checking is performed for higher performance. - * @param r the red component, 0 - 255 - * @param g the green component, 0 - 255 - * @param b the blue component, 0 - 255 - * @param a the alpha component, 0 - 255 - * @return the packed color as a float - * @see NumberUtils#intToFloatColor(int) */ - public static float toFloatBits (int r, int g, int b, int a) { - int color = (a << 24) | (b << 16) | (g << 8) | r; - float floatColor = NumberUtils.intToFloatColor(color); - return floatColor; - } - - /** Packs the color components into a 32-bit integer with the format ABGR and then converts it to a float. - * @return the packed color as a 32-bit float - * @see NumberUtils#intToFloatColor(int) */ - public static float toFloatBits (float r, float g, float b, float a) { - int color = ((int)(255 * a) << 24) | ((int)(255 * b) << 16) | ((int)(255 * g) << 8) | ((int)(255 * r)); - return NumberUtils.intToFloatColor(color); + return new Cvec(r / 255f, g / 255f, b / 255f, a / 255f); } /** Packs the color components into a 32-bit integer with the format ABGR. Note that no range checking is performed for higher @@ -357,22 +300,6 @@ public class Color { return (int)(alpha * 255.0f); } - public static int luminanceAlpha (float luminance, float alpha) { - return ((int)(luminance * 255.0f) << 8) | (int)(alpha * 255); - } - - public static int rgb565 (float r, float g, float b) { - return ((int)(r * 31) << 11) | ((int)(g * 63) << 5) | (int)(b * 31); - } - - public static int rgba4444 (float r, float g, float b, float a) { - return ((int)(r * 15) << 12) | ((int)(g * 15) << 8) | ((int)(b * 15) << 4) | (int)(a * 15); - } - - public static int rgb888 (float r, float g, float b) { - return ((int)(r * 255) << 16) | ((int)(g * 255) << 8) | (int)(b * 255); - } - public static int rgba8888 (float r, float g, float b, float a) { return ((int)(r * 255) << 24) | ((int)(g * 255) << 16) | ((int)(b * 255) << 8) | (int)(a * 255); } @@ -381,87 +308,41 @@ public class Color { return ((int)(a * 255) << 24) | ((int)(r * 255) << 16) | ((int)(g * 255) << 8) | (int)(b * 255); } - public static int rgb565 (Color color) { - return ((int)(color.r * 31) << 11) | ((int)(color.g * 63) << 5) | (int)(color.b * 31); - } - - public static int rgba4444 (Color color) { - return ((int)(color.r * 15) << 12) | ((int)(color.g * 15) << 8) | ((int)(color.b * 15) << 4) | (int)(color.a * 15); - } - - public static int rgb888 (Color color) { - return ((int)(color.r * 255) << 16) | ((int)(color.g * 255) << 8) | (int)(color.b * 255); - } - - public static int rgba8888 (Color color) { + public static int rgba8888 (Cvec color) { return ((int)(color.r * 255) << 24) | ((int)(color.g * 255) << 16) | ((int)(color.b * 255) << 8) | (int)(color.a * 255); } - public static int argb8888 (Color color) { + public static int argb8888 (Cvec color) { return ((int)(color.a * 255) << 24) | ((int)(color.r * 255) << 16) | ((int)(color.g * 255) << 8) | (int)(color.b * 255); } - /** Sets the Color components using the specified integer value in the format RGB565. This is inverse to the rgb565(r, g, b) - * method. - * - * @param color The Color to be modified. - * @param value An integer color value in RGB565 format. */ - public static void rgb565ToColor (Color color, int value) { - color.r = ((value & 0x0000F800) >>> 11) / 31f; - color.g = ((value & 0x000007E0) >>> 5) / 63f; - color.b = ((value & 0x0000001F) >>> 0) / 31f; - } - - /** Sets the Color components using the specified integer value in the format RGBA4444. This is inverse to the rgba4444(r, g, + /** Sets the Cvec components using the specified integer value in the format RGBA8888. This is inverse to the rgba8888(r, g, * b, a) method. * - * @param color The Color to be modified. - * @param value An integer color value in RGBA4444 format. */ - public static void rgba4444ToColor (Color color, int value) { - color.r = ((value & 0x0000f000) >>> 12) / 15f; - color.g = ((value & 0x00000f00) >>> 8) / 15f; - color.b = ((value & 0x000000f0) >>> 4) / 15f; - color.a = ((value & 0x0000000f)) / 15f; - } - - /** Sets the Color components using the specified integer value in the format RGB888. This is inverse to the rgb888(r, g, b) - * method. - * - * @param color The Color to be modified. - * @param value An integer color value in RGB888 format. */ - public static void rgb888ToColor (Color color, int value) { - color.r = ((value & 0x00ff0000) >>> 16) / 255f; - color.g = ((value & 0x0000ff00) >>> 8) / 255f; - color.b = ((value & 0x000000ff)) / 255f; - } - - /** Sets the Color components using the specified integer value in the format RGBA8888. This is inverse to the rgba8888(r, g, - * b, a) method. - * - * @param color The Color to be modified. + * @param color The Cvec to be modified. * @param value An integer color value in RGBA8888 format. */ - public static void rgba8888ToColor (Color color, int value) { + public static void rgba8888ToCvec (Cvec color, int value) { color.r = ((value & 0xff000000) >>> 24) / 255f; color.g = ((value & 0x00ff0000) >>> 16) / 255f; color.b = ((value & 0x0000ff00) >>> 8) / 255f; color.a = ((value & 0x000000ff)) / 255f; } - /** Sets the Color components using the specified integer value in the format ARGB8888. This is the inverse to the argb8888(a, + /** Sets the Cvec components using the specified integer value in the format ARGB8888. This is the inverse to the argb8888(a, * r, g, b) method * - * @param color The Color to be modified. + * @param color The Cvec to be modified. * @param value An integer color value in ARGB8888 format. */ - public static void argb8888ToColor (Color color, int value) { + public static void argb8888ToCvec (Cvec color, int value) { color.a = ((value & 0xff000000) >>> 24) / 255f; color.r = ((value & 0x00ff0000) >>> 16) / 255f; color.g = ((value & 0x0000ff00) >>> 8) / 255f; color.b = ((value & 0x000000ff)) / 255f; } - /** Sets the Color components using the specified float value in the format ABGB8888. - * @param color The Color to be modified. */ - public static void abgr8888ToColor (Color color, float value) { + /** Sets the Cvec components using the specified float value in the format ABGB8888. + * @param color The Cvec to be modified. */ + public static void abgr8888ToCvec (Cvec color, float value) { int c = NumberUtils.floatToIntColor(value); color.a = ((c & 0xff000000) >>> 24) / 255f; color.b = ((c & 0x00ff0000) >>> 16) / 255f; @@ -469,13 +350,13 @@ public class Color { color.r = ((c & 0x000000ff)) / 255f; } - /** Sets the RGB Color components using the specified Hue-Saturation-Value. Note that HSV components are voluntary not clamped + /** Sets the RGB Cvec components using the specified Hue-Saturation-Value. Note that HSV components are voluntary not clamped * to preserve high range color and can range beyond typical values. * @param h The Hue in degree from 0 to 360 * @param s The Saturation from 0 to 1 * @param v The Value (brightness) from 0 to 1 - * @return The modified Color for chaining. */ - public Color fromHsv (float h, float s, float v) { + * @return The modified Cvec for chaining. */ + public Cvec fromHsv (float h, float s, float v) { float x = (h / 60f + 6) % 6; int i = (int)x; float f = x - i; @@ -521,8 +402,8 @@ public class Color { /** Sets RGB components using the specified Hue-Saturation-Value. This is a convenient method for * {@link #fromHsv(float, float, float)}. This is the inverse of {@link #toHsv(float[])}. * @param hsv The Hue, Saturation and Value components in that order. - * @return The modified Color for chaining. */ - public Color fromHsv (float[] hsv) { + * @return The modified Cvec for chaining. */ + public Cvec fromHsv (float[] hsv) { return fromHsv(hsv[0], hsv[1], hsv[2]); } @@ -555,7 +436,7 @@ public class Color { } /** @return a copy of this color */ - public Color cpy () { - return new Color(this); + public Cvec cpy () { + return new Cvec(this); } } diff --git a/src/com/badlogic/gdx/graphics/PixmapIO2.java b/src/net/torvald/gdx/graphics/PixmapIO2.java similarity index 98% rename from src/com/badlogic/gdx/graphics/PixmapIO2.java rename to src/net/torvald/gdx/graphics/PixmapIO2.java index 0cfbd8c02..b63b86ae9 100644 --- a/src/com/badlogic/gdx/graphics/PixmapIO2.java +++ b/src/net/torvald/gdx/graphics/PixmapIO2.java @@ -1,6 +1,7 @@ -package com.badlogic.gdx.graphics; +package net.torvald.gdx.graphics; import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.utils.StreamUtils; import java.io.IOException; diff --git a/src/com/badlogic/gdx/backends/lwjgl/LwjglGraphics.java.txt b/src/net/torvald/gdx/lwjgl/LwjglGraphics.java.txt similarity index 100% rename from src/com/badlogic/gdx/backends/lwjgl/LwjglGraphics.java.txt rename to src/net/torvald/gdx/lwjgl/LwjglGraphics.java.txt diff --git a/src/net/torvald/gdx/lwjgl/audio/OpenALAudio.java b/src/net/torvald/gdx/lwjgl/audio/OpenALAudio.java new file mode 100644 index 000000000..e69de29bb diff --git a/src/net/torvald/parametricsky/Application.kt b/src/net/torvald/parametricsky/Application.kt index 263852bb1..d01d40abc 100644 --- a/src/net/torvald/parametricsky/Application.kt +++ b/src/net/torvald/parametricsky/Application.kt @@ -5,23 +5,15 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.Screen import com.badlogic.gdx.backends.lwjgl.LwjglApplication import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration -import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.SpriteBatch -import com.badlogic.gdx.math.Affine2 -import com.jme3.math.FastMath -import net.torvald.colourutil.CIEYXY -import net.torvald.colourutil.CIEXYZUtil.toXYZ import net.torvald.colourutil.CIEXYZUtil.toColorRaw -import net.torvald.colourutil.CIEXYZUtil.toColor -import net.torvald.colourutil.RGB -import net.torvald.terrarum.gameworld.fmod +import net.torvald.colourutil.CIEXYZUtil.toXYZ +import net.torvald.colourutil.CIEYXY import net.torvald.terrarum.inUse -import java.awt.BorderLayout import java.awt.Dimension import javax.swing.* -import kotlin.math.pow const val WIDTH = 1200 diff --git a/src/net/torvald/spriteassembler/SpriteAssemblerApp.kt b/src/net/torvald/spriteassembler/SpriteAssemblerApp.kt index 4456b1055..e94e95ecc 100644 --- a/src/net/torvald/spriteassembler/SpriteAssemblerApp.kt +++ b/src/net/torvald/spriteassembler/SpriteAssemblerApp.kt @@ -6,9 +6,9 @@ import com.badlogic.gdx.backends.lwjgl.LwjglApplication import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Pixmap -import com.badlogic.gdx.graphics.PixmapIO2 import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.gdx.graphics.PixmapIO2 import net.torvald.terrarum.gdxClearAndSetBlend import net.torvald.terrarum.inUse import java.awt.BorderLayout @@ -258,7 +258,7 @@ class SpriteAssemblerPreview: Game() { renderTexture = Texture(1, 1, Pixmap.Format.RGBA8888) } - private val bgCol = Color(.62f,.79f,1f,1f) + private val bgCol = Color(.62f, .79f, 1f, 1f) private var doAssemble = false private lateinit var assembleProp: ADProperties diff --git a/src/net/torvald/terrarum/AppLoader.java b/src/net/torvald/terrarum/AppLoader.java index ca708d1e1..98d3e1253 100644 --- a/src/net/torvald/terrarum/AppLoader.java +++ b/src/net/torvald/terrarum/AppLoader.java @@ -19,6 +19,7 @@ import com.github.strikerx3.jxinput.XInputDevice; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; +import net.torvald.gdx.graphics.PixmapIO2; import net.torvald.getcpuname.GetCpuName; import net.torvald.terrarum.controller.GdxControllerAdapter; import net.torvald.terrarum.controller.TerrarumController; @@ -255,8 +256,8 @@ public class AppLoader implements ApplicationListener { public static TextureRegion logo; public static AudioDevice audioDevice; - private Color gradWhiteTop = new Color(0xf8f8f8ff); - private Color gradWhiteBottom = new Color(0xd8d8d8ff); + private com.badlogic.gdx.graphics.Color gradWhiteTop = new com.badlogic.gdx.graphics.Color(0xf8f8f8ff); + private com.badlogic.gdx.graphics.Color gradWhiteBottom = new com.badlogic.gdx.graphics.Color(0xd8d8d8ff); public Screen screen; public static int screenW = 0; diff --git a/src/net/torvald/terrarum/GlslTilingTest.kt b/src/net/torvald/terrarum/GlslTilingTest.kt index 94783e213..018202bfd 100644 --- a/src/net/torvald/terrarum/GlslTilingTest.kt +++ b/src/net/torvald/terrarum/GlslTilingTest.kt @@ -7,7 +7,7 @@ import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration import com.badlogic.gdx.graphics.* import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.ShaderProgram -import com.jme3.math.FastMath +import com.badlogic.gdx.graphics.Color import net.torvald.terrarumsansbitmap.gdx.GameFontBase /** diff --git a/src/net/torvald/terrarum/TestTestTest.kt b/src/net/torvald/terrarum/TestTestTest.kt index 46ed50e31..000c3f1d2 100644 --- a/src/net/torvald/terrarum/TestTestTest.kt +++ b/src/net/torvald/terrarum/TestTestTest.kt @@ -10,6 +10,7 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.graphics.glutils.ShaderProgram +import com.badlogic.gdx.graphics.Color import net.torvald.terrarumsansbitmap.gdx.GameFontBase diff --git a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt index 3320a9a47..64827daf7 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt @@ -1,6 +1,6 @@ package net.torvald.terrarum.blockproperties -import com.badlogic.gdx.graphics.Color +import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.AppLoader import net.torvald.terrarum.AppLoader.printmsg import net.torvald.terrarum.gameworld.FluidType @@ -110,7 +110,7 @@ object BlockCodex { prop.shadeColG = floatVal(record, "shdg") / LightmapRenderer.MUL_FLOAT prop.shadeColB = floatVal(record, "shdb") / LightmapRenderer.MUL_FLOAT prop.shadeColA = floatVal(record, "shduv") / LightmapRenderer.MUL_FLOAT - prop.opacity = Color(prop.shadeColR, prop.shadeColG, prop.shadeColB, prop.shadeColA) + prop.opacity = Cvec(prop.shadeColR, prop.shadeColG, prop.shadeColB, prop.shadeColA) prop.strength = intVal(record, "str") prop.density = intVal(record, "dsty") @@ -119,7 +119,7 @@ object BlockCodex { prop.lumColG = floatVal(record, "lumg") / LightmapRenderer.MUL_FLOAT prop.lumColB = floatVal(record, "lumb") / LightmapRenderer.MUL_FLOAT prop.lumColA = floatVal(record, "lumuv") / LightmapRenderer.MUL_FLOAT - prop.internalLumCol = Color(prop.lumColR, prop.lumColG, prop.lumColB, prop.lumColA) + prop.internalLumCol = Cvec(prop.lumColR, prop.lumColG, prop.lumColB, prop.lumColA) prop.friction = intVal(record, "fr") prop.viscosity = intVal(record, "vscs") diff --git a/src/net/torvald/terrarum/blockproperties/BlockProp.kt b/src/net/torvald/terrarum/blockproperties/BlockProp.kt index 8bca216e8..90953384e 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockProp.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockProp.kt @@ -1,6 +1,6 @@ package net.torvald.terrarum.blockproperties -import com.badlogic.gdx.graphics.Color +import net.torvald.gdx.graphics.Cvec /** * Created by minjaesong on 2016-02-16. @@ -17,7 +17,7 @@ class BlockProp { var shadeColB = 0f var shadeColA = 0f - lateinit var opacity: Color + lateinit var opacity: Cvec var strength: Int = 0 var density: Int = 0 @@ -36,12 +36,12 @@ class BlockProp { var lumColG = 0f var lumColB = 0f var lumColA = 0f - lateinit var internalLumCol: Color + lateinit var internalLumCol: Cvec /** * @param luminosity */ - inline val luminosity: Color + inline val luminosity: Cvec get() = BlockPropUtil.getDynamicLumFunc(internalLumCol, dynamicLuminosityFunction) var drop: Int = 0 diff --git a/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt b/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt index 0cde2a6c5..427424e93 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt @@ -1,8 +1,8 @@ package net.torvald.terrarum.blockproperties import com.badlogic.gdx.Gdx -import com.badlogic.gdx.graphics.Color import com.jme3.math.FastMath +import net.torvald.gdx.graphics.Cvec import net.torvald.random.HQRNG import net.torvald.terrarum.Second import net.torvald.terrarum.Terrarum @@ -37,7 +37,7 @@ object BlockPropUtil { } - private fun getTorchFlicker(baseLum: Color): Color { + private fun getTorchFlicker(baseLum: Cvec): Cvec { val funcY = FastMath.interpolateCatmullRom(0.0f, flickerFuncX / flickerFuncDomain, flickerP0, flickerP1, flickerP2, flickerP3 ) @@ -45,13 +45,13 @@ object BlockPropUtil { return LightmapRenderer.alterBrightnessUniform(baseLum, funcY) } - private fun getSlowBreath(baseLum: Color): Color { + private fun getSlowBreath(baseLum: Cvec): Cvec { val funcY = FastMath.sin(FastMath.PI * breathFuncX / breathCycleDuration) * breathRange return LightmapRenderer.alterBrightnessUniform(baseLum, funcY) } - private fun getPulsate(baseLum: Color): Color { + private fun getPulsate(baseLum: Cvec): Cvec { val funcY = FastMath.sin(FastMath.PI * pulsateFuncX / pulsateCycleDuration) * pulsateRange return LightmapRenderer.alterBrightnessUniform(baseLum, funcY) @@ -91,7 +91,7 @@ object BlockPropUtil { private fun linearInterpolation1D(a: Float, b: Float, x: Float) = a * (1 - x) + b * x - fun getDynamicLumFunc(baseLum: Color, type: Int): Color { + fun getDynamicLumFunc(baseLum: Cvec, type: Int): Cvec { return when (type) { 1 -> getTorchFlicker(baseLum) 2 -> (Terrarum.ingame!!.world).globalLight.cpy().mul(LightmapRenderer.DIV_FLOAT) // current global light diff --git a/src/net/torvald/terrarum/console/SetGlobalLightOverride.kt b/src/net/torvald/terrarum/console/SetGlobalLightOverride.kt index 50af96216..c7914017b 100644 --- a/src/net/torvald/terrarum/console/SetGlobalLightOverride.kt +++ b/src/net/torvald/terrarum/console/SetGlobalLightOverride.kt @@ -1,10 +1,9 @@ package net.torvald.terrarum.console -import com.badlogic.gdx.graphics.Color -import net.torvald.terrarum.worlddrawer.LightmapRenderer +import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.Terrarum -import net.torvald.terrarum.modulebasegame.Ingame import net.torvald.terrarum.modulebasegame.weather.WeatherMixer +import net.torvald.terrarum.worlddrawer.LightmapRenderer /** * Created by minjaesong on 2016-02-17. @@ -18,7 +17,7 @@ internal object SetGlobalLightOverride : ConsoleCommand { val g = args[2].toFloat() val b = args[3].toFloat() val a = args[4].toFloat() - val GL = Color(r, g, b, a) + val GL = Cvec(r, g, b, a) WeatherMixer.globalLightOverridden = true (Terrarum.ingame!!.world).globalLight = GL diff --git a/src/net/torvald/terrarum/gameactors/Luminous.kt b/src/net/torvald/terrarum/gameactors/Luminous.kt index 0a25c101d..5694c5a3d 100644 --- a/src/net/torvald/terrarum/gameactors/Luminous.kt +++ b/src/net/torvald/terrarum/gameactors/Luminous.kt @@ -1,6 +1,6 @@ package net.torvald.terrarum.gameactors -import com.badlogic.gdx.graphics.Color +import net.torvald.gdx.graphics.Cvec /** * Created by minjaesong on 2016-02-19. @@ -26,7 +26,7 @@ interface Luminous { actorValue[AVKey.LUMA] = value.a * LightmapRenderer.MUL_FLOAT } */ - var color: Color + var color: Cvec /** * Arguments: diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index 7b95a45a1..b760a6050 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -1,7 +1,7 @@ package net.torvald.terrarum.gameworld -import com.badlogic.gdx.graphics.Color +import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blockproperties.Block @@ -90,7 +90,7 @@ open class GameWorld { /** Meter per second squared. Currently only the downward gravity is supported. No reverse gravity :p */ var gravitation: Vector2 = Vector2(0.0, 9.80665) /** 0.0..1.0+ */ - var globalLight = Color(0f,0f,0f,0f) + var globalLight = Cvec(0f, 0f, 0f, 0f) var averageTemperature = 288f // 15 deg celsius; simulates global warming diff --git a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt index b6f5abde1..87a57d711 100644 --- a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt +++ b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt @@ -5,6 +5,7 @@ import com.badlogic.gdx.InputAdapter import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.* import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.blockproperties.BlockCodex @@ -279,7 +280,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { init { gameWorld.time.setTimeOfToday(WorldTime.HOUR_SEC * 10) - gameWorld.globalLight = Color(.8f,.8f,.8f,.8f) + gameWorld.globalLight = Cvec(.8f, .8f, .8f, .8f) essentialOverlays.add(blockPointingCursor) diff --git a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt index 7394bd803..bda4b3767 100644 --- a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt +++ b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt @@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.utils.Disposable import com.badlogic.gdx.utils.ScreenUtils +import net.torvald.gdx.graphics.PixmapIO2 import net.torvald.terrarum.* import net.torvald.terrarum.gameactors.ActorWithBody import net.torvald.terrarum.gamecontroller.KeyToggler diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt index d94557697..6027b785c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt @@ -1,8 +1,8 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.Gdx -import com.badlogic.gdx.graphics.Color import com.jme3.math.FastMath +import net.torvald.gdx.graphics.Cvec import net.torvald.spriteanimation.HasAssembledSprite import net.torvald.terrarum.* import net.torvald.terrarum.gameactors.* @@ -68,8 +68,8 @@ open class ActorHumanoid( if (houseDesignation != null) houseDesignation!!.clear() } - override var color: Color - get() = Color( + override var color: Cvec + get() = Cvec( (actorValue.getAsFloat(AVKey.LUMR) ?: 0f) / LightmapRenderer.MUL_FLOAT, (actorValue.getAsFloat(AVKey.LUMG) ?: 0f) / LightmapRenderer.MUL_FLOAT, (actorValue.getAsFloat(AVKey.LUMB) ?: 0f) / LightmapRenderer.MUL_FLOAT, diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/DecodeTapestry.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/DecodeTapestry.kt index fdbd2f824..b7340a075 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/DecodeTapestry.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/DecodeTapestry.kt @@ -2,9 +2,7 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Pixmap -import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameworld.toUint -import net.torvald.terrarum.modulebasegame.Ingame import java.io.File import java.nio.charset.Charset import java.util.* @@ -99,9 +97,9 @@ object DecodeTapestry { private fun Int.fourBitCol() = Color( this.and(0xF00).shl(20) or this.and(0xF00).shl(16) or - this.and(0x0F0).shl(16) or this.and(0x0F0).shl(12) or - this.and(0x00F).shl(12) or this.and(0x00F).shl(8) or - 0xFF + this.and(0x0F0).shl(16) or this.and(0x0F0).shl(12) or + this.and(0x00F).shl(12) or this.and(0x00F).shl(8) or + 0xFF ) val MAGIC = "TEAF".toByteArray(charset = Charset.forName("US-ASCII")) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt index d4bbd8557..1eb2d97a1 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt @@ -1,6 +1,6 @@ package net.torvald.terrarum.modulebasegame.gameactors -import com.badlogic.gdx.graphics.Color +import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.ModMgr import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.blockproperties.BlockCodex @@ -15,7 +15,7 @@ import java.util.* */ internal class FixtureTikiTorch : FixtureBase(BlockBox(BlockBox.NO_COLLISION, 1, 2)), Luminous { - override var color: Color + override var color: Cvec get() = BlockCodex[Block.TORCH].luminosity set(value) { throw UnsupportedOperationException() diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/PhysTestBall.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/PhysTestBall.kt index df16e9437..727def0bc 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/PhysTestBall.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/PhysTestBall.kt @@ -4,7 +4,6 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.ActorWBMovable -import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.modulebasegame.worldgenerator.RoguelikeRandomiser /** diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ProjectileSimple.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ProjectileSimple.kt index 9451d3b68..c4425de6e 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ProjectileSimple.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ProjectileSimple.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.Point2d import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blockproperties.Block @@ -31,8 +32,8 @@ open class ProjectileSimple( val speed: Int - override var color: Color - get() = (bulletDatabase[type][OFFSET_LUMINOSITY] as Color).cpy() + override var color: Cvec + get() = (bulletDatabase[type][OFFSET_LUMINOSITY] as Cvec).cpy() set(value) { } /** @@ -118,8 +119,8 @@ open class ProjectileSimple( val OFFSET_LUMINOSITY = 4 val bulletDatabase = arrayOf( // damage, display colour, no gravity, speed - arrayOf(7, Color(0xFF5429_FF.toInt()), true, 40, 32), - arrayOf(8, Color(0xFF5429_FF.toInt()), true, 20, 0) + arrayOf(7, Cvec(0xFF5429_FF.toInt()), true, 40, 32), + arrayOf(8, Cvec(0xFF5429_FF.toInt()), true, 20, 0) // ... ) } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/WeaponSwung.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/WeaponSwung.kt index 58d9ae398..205d2c67d 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/WeaponSwung.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/WeaponSwung.kt @@ -1,10 +1,9 @@ package net.torvald.terrarum.modulebasegame.gameactors -import com.badlogic.gdx.graphics.Color +import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.gameactors.ActorWBMovable import net.torvald.terrarum.gameactors.Hitbox import net.torvald.terrarum.gameactors.Luminous -import net.torvald.terrarum.gameworld.GameWorld /** * Created by minjaesong on 2016-04-26. @@ -21,7 +20,7 @@ class WeaponSwung(val itemID: Int) : ActorWBMovable(RenderOrder.MIDTOP), Luminou actorValue[AVKey.LUMINOSITY] = value } */ - override var color: Color + override var color: Cvec get() = throw UnsupportedOperationException() set(value) { } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/Notification.kt b/src/net/torvald/terrarum/modulebasegame/ui/Notification.kt index 538aabd70..799c290b3 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/Notification.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/Notification.kt @@ -48,7 +48,7 @@ class Notification : UICanvas() { } } - private val drawColor = Color(1f,1f,1f,1f) + private val drawColor = Color(1f, 1f, 1f, 1f) override fun renderUI(batch: SpriteBatch, camera: Camera) { blendNormal(batch) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIBasicInfo.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIBasicInfo.kt index c386fad1e..ec8b29f21 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIBasicInfo.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIBasicInfo.kt @@ -72,7 +72,7 @@ class UIBasicInfo(private val player: ActorHumanoid?) : UICanvas() { private val mailCount: Int get() = 0 // cap things at 99 - private val drawCol = Color(1f,1f,1f,UIQuickslotBar.DISPLAY_OPACITY) + private val drawCol = Color(1f, 1f, 1f, UIQuickslotBar.DISPLAY_OPACITY) private val lcdLitColELoff = Color(0xc0c0c0ff.toInt()) mul drawCol private val lcdLitColELon = Color(0x404040ff) mul drawCol diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt index e64450706..d5ecb9cd0 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.* import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.graphics.glutils.ShapeRenderer +import com.badlogic.gdx.graphics.Color import net.torvald.terrarum.* import net.torvald.terrarum.AppLoader.IS_DEVELOPMENT_BUILD import net.torvald.terrarum.AppLoader.printdbg diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt index ad22449fa..e6fca1868 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt @@ -42,7 +42,7 @@ class UIQuickslotBar : UICanvas() { override fun updateUI(delta: Float) { } - private val drawColor = Color(1f,1f,1f,1f) + private val drawColor = Color(1f, 1f, 1f, 1f) override fun renderUI(batch: SpriteBatch, camera: Camera) { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITierOneWatch.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITierOneWatch.kt index 97537e84d..a097f7759 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITierOneWatch.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITierOneWatch.kt @@ -30,7 +30,7 @@ class UITierOneWatch(private val player: ActorHumanoid?) : UICanvas() { private var moonDial = TextureRegionPack(ModMgr.getPath("basegame", "fonts/watch_17pxmoondial.tga"), 17, 17) private var moonDialCount = moonDial.horizontalCount - private val drawCol = Color(1f,1f,1f,UIQuickslotBar.DISPLAY_OPACITY) + private val drawCol = Color(1f, 1f, 1f, UIQuickslotBar.DISPLAY_OPACITY) private val lcdLitColELoff = Color(0xc0c0c0ff.toInt()) mul drawCol private val lcdLitColELon = Color(0x404040ff) mul drawCol diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConRoot.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConRoot.kt index e19b3f5f7..fae5b3478 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConRoot.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConRoot.kt @@ -1,16 +1,5 @@ package net.torvald.terrarum.modulebasegame.ui -import com.badlogic.gdx.graphics.Camera -import com.badlogic.gdx.graphics.Color -import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.random.HQRNG -import net.torvald.terrarum.modulebasegame.Ingame -import net.torvald.terrarum.LoadScreen -import net.torvald.terrarum.Terrarum -import net.torvald.terrarum.modulebasegame.BuildingMaker -import net.torvald.terrarum.ui.UICanvas -import net.torvald.terrarum.ui.UIItemTextButtonList - /*class UITitleRemoConRoot : UICanvas() { companion object { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/uiQuickslotPie.kt b/src/net/torvald/terrarum/modulebasegame/ui/uiQuickslotPie.kt index 598845cda..c7ba8ec1a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/uiQuickslotPie.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/uiQuickslotPie.kt @@ -58,7 +58,7 @@ class uiQuickslotPie : UICanvas() { } } - private val drawColor = Color(1f,1f,1f,1f) + private val drawColor = Color(1f, 1f, 1f, 1f) override fun renderUI(batch: SpriteBatch, camera: Camera) { // draw radial thingies diff --git a/src/net/torvald/terrarum/modulebasegame/weather/WeatherMixer.kt b/src/net/torvald/terrarum/modulebasegame/weather/WeatherMixer.kt index 4f3f0cc27..d4463b887 100644 --- a/src/net/torvald/terrarum/modulebasegame/weather/WeatherMixer.kt +++ b/src/net/torvald/terrarum/modulebasegame/weather/WeatherMixer.kt @@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.GL20 import com.badlogic.gdx.graphics.Texture import net.torvald.colourutil.CIELuvUtil +import net.torvald.gdx.graphics.Cvec import net.torvald.random.HQRNG import net.torvald.terrarum.GdxColorMap import net.torvald.terrarum.ModMgr @@ -51,7 +52,7 @@ internal object WeatherMixer : RNGConsumer { lateinit var mixedWeather: BaseModularWeather - val globalLightNow = Color(0) + val globalLightNow = Cvec(0) // Weather indices const val WEATHER_GENERIC = "generic" @@ -178,10 +179,10 @@ internal object WeatherMixer : RNGConsumer { /** * Get a GL of specific time */ - fun getGlobalLightOfTime(timeInSec: Int): Color = + fun getGlobalLightOfTime(timeInSec: Int): Cvec = getGradientColour(currentWeather.skyboxGradColourMap, 2, timeInSec) - fun getGradientColour(colorMap: GdxColorMap, row: Int, timeInSec: Int): Color { + fun getGradientColour(colorMap: GdxColorMap, row: Int, timeInSec: Int): Cvec { val dataPointDistance = WorldTime.DAY_LENGTH / colorMap.width val phaseThis: Int = timeInSec / dataPointDistance // x-coord in gradmap @@ -203,7 +204,7 @@ internal object WeatherMixer : RNGConsumer { " | ${colourThis.toStringRGB()} -[${scale.times(100).toInt()}%]-> ${colourNext.toStringRGB()}" + " | * `$r`$g`$b`")*/ - return newCol + return Cvec(newCol) } fun getWeatherList(classification: String) = weatherList[classification]!! diff --git a/src/net/torvald/terrarum/serialise/WriteWorldInfo.kt b/src/net/torvald/terrarum/serialise/WriteWorldInfo.kt index 48eb30302..302b69184 100644 --- a/src/net/torvald/terrarum/serialise/WriteWorldInfo.kt +++ b/src/net/torvald/terrarum/serialise/WriteWorldInfo.kt @@ -4,10 +4,10 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.GL30 import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.Pixmap -import com.badlogic.gdx.graphics.PixmapIO2 import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.utils.ScreenUtils +import net.torvald.gdx.graphics.PixmapIO2 import net.torvald.terrarum.* import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension import net.torvald.terrarum.modulebasegame.weather.WeatherMixer diff --git a/src/net/torvald/terrarum/tests/Addnewcolumn.kt b/src/net/torvald/terrarum/tests/Addnewcolumn.kt index e81300c5c..4e5a90737 100644 --- a/src/net/torvald/terrarum/tests/Addnewcolumn.kt +++ b/src/net/torvald/terrarum/tests/Addnewcolumn.kt @@ -1,3 +1,4 @@ +package net.torvald.terrarum.tests import net.torvald.terrarum.utils.JsonFetcher import net.torvald.terrarum.utils.JsonWriter diff --git a/src/net/torvald/terrarum/tests/Base32Test.kt b/src/net/torvald/terrarum/tests/Base32Test.kt index 6228915ad..03ee3ea6b 100644 --- a/src/net/torvald/terrarum/tests/Base32Test.kt +++ b/src/net/torvald/terrarum/tests/Base32Test.kt @@ -1,3 +1,5 @@ +package net.torvald.terrarum.tests + import net.torvald.terrarum.utils.PasswordBase32 import java.nio.charset.Charset diff --git a/src/net/torvald/terrarum/tests/ByteArray64Test.kt b/src/net/torvald/terrarum/tests/ByteArray64Test.kt index 6bca648ee..cac49f47d 100644 --- a/src/net/torvald/terrarum/tests/ByteArray64Test.kt +++ b/src/net/torvald/terrarum/tests/ByteArray64Test.kt @@ -1,3 +1,5 @@ +package net.torvald.terrarum.tests + import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.ByteArray64GrowableOutputStream import net.torvald.terrarum.serialise.WriteLayerDataZip import net.torvald.terrarum.serialise.toLittle diff --git a/src/net/torvald/terrarum/tests/CircularArrayTest.kt b/src/net/torvald/terrarum/tests/CircularArrayTest.kt index 7c0635e03..29c04ffbc 100644 --- a/src/net/torvald/terrarum/tests/CircularArrayTest.kt +++ b/src/net/torvald/terrarum/tests/CircularArrayTest.kt @@ -1,3 +1,5 @@ +package net.torvald.terrarum.tests + import net.torvald.util.CircularArray /** diff --git a/src/net/torvald/terrarum/tests/FixedMathTest.kt b/src/net/torvald/terrarum/tests/FixedMathTest.kt index 1c35f7864..70ea4b7e1 100644 --- a/src/net/torvald/terrarum/tests/FixedMathTest.kt +++ b/src/net/torvald/terrarum/tests/FixedMathTest.kt @@ -1,3 +1,5 @@ +package net.torvald.terrarum.tests + import kotlin.system.measureNanoTime /** diff --git a/src/net/torvald/terrarum/tests/GsonTest.kt b/src/net/torvald/terrarum/tests/GsonTest.kt index 2866b61d5..d48684087 100644 --- a/src/net/torvald/terrarum/tests/GsonTest.kt +++ b/src/net/torvald/terrarum/tests/GsonTest.kt @@ -1,3 +1,4 @@ +package net.torvald.terrarum.tests import net.torvald.terrarum.utils.JsonWriter import org.dyn4j.geometry.Vector2 diff --git a/src/net/torvald/terrarum/tests/MakeKeylayoutFile.kt b/src/net/torvald/terrarum/tests/MakeKeylayoutFile.kt index e498077fd..d6200421f 100644 --- a/src/net/torvald/terrarum/tests/MakeKeylayoutFile.kt +++ b/src/net/torvald/terrarum/tests/MakeKeylayoutFile.kt @@ -1,3 +1,4 @@ +package net.torvald.terrarum.tests import com.badlogic.gdx.* import com.badlogic.gdx.Input.Keys.* diff --git a/src/net/torvald/terrarum/tests/NoiseGenerator.kt b/src/net/torvald/terrarum/tests/NoiseGenerator.kt index e39117623..3ab951cf3 100644 --- a/src/net/torvald/terrarum/tests/NoiseGenerator.kt +++ b/src/net/torvald/terrarum/tests/NoiseGenerator.kt @@ -15,22 +15,16 @@ import com.badlogic.gdx.graphics.glutils.ShaderProgram import com.sudoplay.joise.Joise import com.sudoplay.joise.module.ModuleBasisFunction import com.sudoplay.joise.module.ModuleFractal -import com.sudoplay.joise.module.ModuleScaleDomain import com.sudoplay.joise.module.ModuleScaleOffset import net.torvald.random.HQRNG import net.torvald.terrarum.AppLoader -import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.Terrarum import net.torvald.terrarum.concurrent.BlockingThreadPool -import net.torvald.terrarum.concurrent.RunnableFun import net.torvald.terrarum.concurrent.ParallelUtils.sliceEvenly -import net.torvald.terrarum.concurrent.ThreadParallel import net.torvald.terrarum.inUse import net.torvald.terrarum.modulebasegame.Ingame import net.torvald.terrarum.roundInt import kotlin.math.absoluteValue -import kotlin.system.measureNanoTime -import kotlin.system.measureTimeMillis /** * Created by minjaesong on 2018-12-14. diff --git a/src/net/torvald/terrarum/tests/NoopRectTest.kt b/src/net/torvald/terrarum/tests/NoopRectTest.kt index da9f39b90..f04730699 100644 --- a/src/net/torvald/terrarum/tests/NoopRectTest.kt +++ b/src/net/torvald/terrarum/tests/NoopRectTest.kt @@ -1,3 +1,4 @@ +package net.torvald.terrarum.tests import com.badlogic.gdx.Game import com.badlogic.gdx.Gdx diff --git a/src/net/torvald/terrarum/tests/SurroundPannerTest.kt b/src/net/torvald/terrarum/tests/SurroundPannerTest.kt index 2daae4d08..9faa38d9b 100644 --- a/src/net/torvald/terrarum/tests/SurroundPannerTest.kt +++ b/src/net/torvald/terrarum/tests/SurroundPannerTest.kt @@ -1,3 +1,4 @@ +package net.torvald.terrarum.tests import com.badlogic.gdx.Game import com.badlogic.gdx.Gdx diff --git a/src/net/torvald/terrarum/tests/UITestPad1.kt b/src/net/torvald/terrarum/tests/UITestPad1.kt index b708c476c..f3ad25dde 100644 --- a/src/net/torvald/terrarum/tests/UITestPad1.kt +++ b/src/net/torvald/terrarum/tests/UITestPad1.kt @@ -80,7 +80,7 @@ class UITestPad1 : ScreenAdapter() { } - val bgCol = Color(.62f,.79f,1f,1f) + val bgCol = Color(.62f, .79f, 1f, 1f) var _dct = 0f diff --git a/src/net/torvald/terrarum/ui/UIHandler.kt b/src/net/torvald/terrarum/ui/UIHandler.kt index 8574d745a..08c43c312 100644 --- a/src/net/torvald/terrarum/ui/UIHandler.kt +++ b/src/net/torvald/terrarum/ui/UIHandler.kt @@ -61,7 +61,7 @@ class UIHandler(//var UI: UICanvas, } var scale = 1f - val opacityColour = Color(1f,1f,1f,opacity) + val opacityColour = Color(1f, 1f, 1f, opacity) var openCloseCounter = 0f diff --git a/src/net/torvald/terrarum/ui/UINSMenu.kt b/src/net/torvald/terrarum/ui/UINSMenu.kt index c50d1622a..abb731255 100644 --- a/src/net/torvald/terrarum/ui/UINSMenu.kt +++ b/src/net/torvald/terrarum/ui/UINSMenu.kt @@ -24,7 +24,7 @@ class UINSMenu( ) : UICanvas() { companion object { - val DEFAULT_TITLEBACKCOL = Color(0f,0f,0f,.77f) + val DEFAULT_TITLEBACKCOL = Color(0f, 0f, 0f, .77f) val DEFAULT_TITLETEXTCOL = Color.WHITE } @@ -104,7 +104,7 @@ class UINSMenu( uiWidth, listHeight, textAreaWidth = listWidth, alignment = UIItemTextButton.Companion.Alignment.LEFT, - inactiveCol = Color(.94f,.94f,.94f,1f), + inactiveCol = Color(.94f, .94f, .94f, 1f), itemHitboxSize = LINE_HEIGHT ) diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt index b95693b9e..ec9ba90cf 100644 --- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt +++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawerNew.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.* import com.badlogic.gdx.math.Matrix4 import com.jme3.math.FastMath +import com.badlogic.gdx.graphics.Color import net.torvald.terrarum.* import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.blockproperties.Block @@ -55,7 +56,7 @@ internal object BlocksDrawer { //val tileItemWall = Image(TILE_SIZE * 16, TILE_SIZE * GameWorld.TILES_SUPPORTED / 16) // 4 MB - val wallOverlayColour = Color(5f/9f,5f/9f,5f/9f,1f) + val wallOverlayColour = Color(5f / 9f, 5f / 9f, 5f / 9f, 1f) const val BREAKAGE_STEPS = 10 const val TILES_PER_BLOCK = PairedMapLayer.RANGE diff --git a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer_old.kt b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer_old.kt index c22a55ba7..d4db447d6 100644 --- a/src/net/torvald/terrarum/worlddrawer/BlocksDrawer_old.kt +++ b/src/net/torvald/terrarum/worlddrawer/BlocksDrawer_old.kt @@ -1,7 +1,7 @@ /*package net.torvald.terrarum.worlddrawer import com.badlogic.gdx.Gdx -import com.badlogic.gdx.graphics.Color +import Color import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.SpriteBatch diff --git a/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt b/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt index d3cdd36a1..e2eb5397f 100644 --- a/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt +++ b/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt @@ -1,18 +1,6 @@ package net.torvald.terrarum.worlddrawer -import com.badlogic.gdx.graphics.Color -import com.badlogic.gdx.graphics.g2d.SpriteBatch -import com.jme3.math.FastMath -import net.torvald.terrarum.Terrarum -import net.torvald.terrarum.blockproperties.Block -import net.torvald.terrarum.blockproperties.BlockCodex -import net.torvald.terrarum.fillRect -import net.torvald.terrarum.floorInt -import net.torvald.terrarum.gameactors.ActorWBMovable -import net.torvald.terrarum.gameactors.Luminous -import net.torvald.terrarum.gameworld.GameWorld -import net.torvald.terrarum.modulebasegame.IngameRenderer -import java.util.* + /** * Warning: you are not going to store float value to the lightmap -- see RGB_HDR_LUT (beziér) @@ -20,755 +8,3 @@ import java.util.* * Created by minjaesong on 2016-01-25. */ -//typealias RGB10 = Int - -// NOTE: no Float16 on this thing: 67 kB of memory footage is totally acceptable - -object LightmapRendererOld { - lateinit var world: GameWorld - - - // TODO if (VBO works on BlocksDrawer) THEN overscan of 256, utilise same technique in here - - val overscan_open: Int = 32 - val overscan_opaque: Int = 8 - - init { - println("[LightmapRenderer] Overscan open: $overscan_open; opaque: $overscan_opaque") - } - - // TODO resize(int, int) -aware - - val LIGHTMAP_WIDTH = (Terrarum.ingame?.ZOOM_MINIMUM ?: 1f).inv().times(Terrarum.WIDTH) - .div(CreateTileAtlas.TILE_SIZE).ceil() + overscan_open * 2 + 3 - val LIGHTMAP_HEIGHT = (Terrarum.ingame?.ZOOM_MINIMUM ?: 1f).inv().times(Terrarum.HEIGHT) - .div(CreateTileAtlas.TILE_SIZE).ceil() + overscan_open * 2 + 3 - - /** - * Float value, 1.0 for 1023 - */ - // TODO utilise alpha channel to determine brightness of "glow" sprites (so that alpha channel works like UV light) - private val lightmap: Array> = Array(LIGHTMAP_HEIGHT) { Array(LIGHTMAP_WIDTH, { Color(0f,0f,0f,0f) }) } // TODO framebuffer? - private val lanternMap = ArrayList((Terrarum.ingame?.ACTORCONTAINER_INITIAL_SIZE ?: 2) * 4) - - private val AIR = Block.AIR - - private const val TILE_SIZE = CreateTileAtlas.TILE_SIZE - private val DRAW_TILE_SIZE: Float = CreateTileAtlas.TILE_SIZE / IngameRenderer.lightmapDownsample - - // color model related constants - const val MUL = 1024 // modify this to 1024 to implement 30-bit RGB - const val CHANNEL_MAX_DECIMAL = 1f - const val MUL_2 = MUL * MUL - const val CHANNEL_MAX = MUL - 1 - const val CHANNEL_MAX_FLOAT = CHANNEL_MAX.toFloat() - const val COLOUR_RANGE_SIZE = MUL * MUL_2 - const val MUL_FLOAT = MUL / 256f - const val DIV_FLOAT = 256f / MUL - - internal var for_x_start: Int = 0 - internal var for_y_start: Int = 0 - internal var for_x_end: Int = 0 - internal var for_y_end: Int = 0 - - - //inline fun getLightRawPos(x: Int, y: Int) = lightmap[y][x] - - - /** - * Conventional level (multiplied by four) - */ - fun getLight(x: Int, y: Int): Color? { - val col = getLightInternal(x, y) - if (col == null) { - return null - } - else { - return Color(col.r * MUL_FLOAT, col.g * MUL_FLOAT, col.b * MUL_FLOAT, col.a * MUL_FLOAT) - } - } - - private fun getLightInternal(x: Int, y: Int): Color? { - if (y - for_y_start + overscan_open in 0..lightmap.lastIndex && - x - for_x_start + overscan_open in 0..lightmap[0].lastIndex) { - - return lightmap[y - for_y_start + overscan_open][x - for_x_start + overscan_open] - } - - return null - } - - private fun setLight(x: Int, y: Int, colour: Color) { - if (y - for_y_start + overscan_open in 0..lightmap.lastIndex && - x - for_x_start + overscan_open in 0..lightmap[0].lastIndex) { - - lightmap[y - for_y_start + overscan_open][x - for_x_start + overscan_open] = colour - } - } - - fun fireRecalculateEventtt() { - - } - - fun fireRecalculateEvent() { - for_x_start = WorldCamera.x / TILE_SIZE - 1 // fix for premature lightmap rendering - for_y_start = WorldCamera.y / TILE_SIZE - 1 // on topmost/leftmost side - - for_x_end = for_x_start + WorldCamera.width / TILE_SIZE + 3 - for_y_end = for_y_start + WorldCamera.height / TILE_SIZE + 2 // same fix as above - - /** - * * true: overscanning is limited to 8 tiles in width (overscan_opaque) - * * false: overscanning will fully applied to 32 tiles in width (overscan_open) - */ - /*val rect_width = for_x_end - for_x_start - val rect_height_rem_hbars = for_y_end - for_y_start - 2 - val noop_mask = BitSet(2 * (rect_width) + - 2 * (rect_height_rem_hbars)) - val rect_size = noop_mask.size() - - // get No-op mask - fun edgeToMaskNum(i: Int): Pair { - if (i > rect_size) throw IllegalArgumentException() - - if (i < rect_width) // top edge horizontal - return Pair(for_x_start + i, for_y_start) - else if (i >= rect_size - rect_width) // bottom edge horizontal - return Pair( - for_x_start + i.minus(rect_size - rect_width), - for_y_end - ) - else { // vertical edges without horizontal edge pair - return Pair( - if ((rect_width.even() && i.even()) || (rect_width.odd() && i.odd())) - // if the index is on the left side of the box - for_x_start - else for_x_end, - (i - rect_width).div(2) + for_y_start + 1 - ) - } - } - - fun posToMaskNum(x: Int, y: Int): Int? { - if (x in for_x_start + 1..for_x_end - 1 && y in for_y_start + 1..for_y_end - 1) { - return null // inside of this imaginary box - } - else if (y <= for_y_start) { // upper edge - if (x < for_x_start) return 0 - else if (x > for_x_end) return rect_width - 1 - else return x - for_x_start - } - else if (y >= for_y_end) { // lower edge - if (x < for_x_start) return rect_size - rect_width - else if (x > for_x_end) return rect_size - 1 - else return x - for_x_start + (rect_size - rect_width) - } - else { // between two edges - if (x < for_x_start) return (y - for_y_start - 1) * 2 + rect_width - else if (x > for_x_end) return (y - for_y_start - 1) * 2 + rect_width + 1 - else return null - } - } - - fun isNoop(x: Int, y: Int): Boolean = - if (posToMaskNum(x, y) == null) - false - else if (!(x in for_x_start - overscan_opaque..for_x_end + overscan_opaque && - x in for_y_start - overscan_opaque..for_y_end + overscan_opaque)) - // point is within the range of overscan_open but not overscan_opaque - noop_mask.get(posToMaskNum(x, y)!!) - else // point within the overscan_opaque must be rendered, so no no-op - false - - // build noop map - for (i in 0..rect_size) { - val point = edgeToMaskNum(i) - val tile = world.getTileFromTerrain(point.first, point.second) ?: Block.NULL - val isSolid = BlockCodex[tile].isSolid - - noop_mask.set(i, isSolid) - }*/ - - /** - * Updating order: - * +--------+ +--+-----+ +-----+--+ +--------+ - - * |↘ | | | 3| |3 | | | ↙| ↕︎ overscan_open / overscan_opaque - * | +-----+ | | 2 | | 2 | | +-----+ | - depending on the noop_mask - * | |1 | → | |1 | → | 1| | → | 1| | - * | | 2 | | +-----+ +-----+ | | 2 | | - * | | 3| |↗ | | ↖| |3 | | - * +--+-----+ +--------+ +--------+ +-----+--+ - * round: 1 2 3 4 - * for all lightmap[y][x] - */ - - purgeLightmap() - buildLanternmap() - - // O(36n) == O(n) where n is a size of the map. - // Because of inevitable overlaps on the area, it only works with ADDITIVE blend (aka maxblend) - - - // Round 1 - for (y in for_y_start - overscan_open..for_y_end) { - for (x in for_x_start - overscan_open..for_x_end) { - setLight(x, y, calculate(x, y, 1)) - } - } - - // Round 2 - for (y in for_y_end + overscan_open downTo for_y_start) { - for (x in for_x_start - overscan_open..for_x_end) { - setLight(x, y, calculate(x, y, 2)) - } - } - - // Round 3 - for (y in for_y_end + overscan_open downTo for_y_start) { - for (x in for_x_end + overscan_open downTo for_x_start) { - setLight(x, y, calculate(x, y, 3)) - } - } - - // Round 4 - for (y in for_y_start - overscan_open..for_y_end) { - for (x in for_x_end + overscan_open downTo for_x_start) { - setLight(x, y, calculate(x, y, 4)) - } - } - } - - private fun buildLanternmap() { - lanternMap.clear() - Terrarum.ingame?.let { - it.actorContainerActive.forEach { it -> - if (it is Luminous && it is ActorWBMovable) { - // put lanterns to the area the luminantBox is occupying - for (lightBox in it.lightBoxList) { - val lightBoxX = it.hitbox.startX + lightBox.startX - val lightBoxY = it.hitbox.startY + lightBox.startY - val lightBoxW = lightBox.width - val lightBoxH = lightBox.height - for (y in lightBoxY.div(TILE_SIZE).floorInt() - ..lightBoxY.plus(lightBoxH).div(TILE_SIZE).floorInt()) { - for (x in lightBoxX.div(TILE_SIZE).floorInt() - ..lightBoxX.plus(lightBoxW).div(TILE_SIZE).floorInt()) { - - val normalisedColor = it.color.cpy().mul(DIV_FLOAT) - - lanternMap.add(Lantern(x, y, normalisedColor)) - // Q&D fix for Roundworld anomaly - lanternMap.add(Lantern(x + world.width, y, normalisedColor)) - lanternMap.add(Lantern(x - world.width, y, normalisedColor)) - } - } - } - } - } - } - } - - - - private var ambientAccumulator = Color(0f,0f,0f,0f) - private var lightLevelThis = Color(0f,0f,0f,0f) - private var thisTerrain = 0 - private var thisWall = 0 - private var thisTileLuminosity = Color(0f,0f,0f,0f) - private var thisTileOpacity = Color(0f,0f,0f,0f) - private var sunLight = Color(0f,0f,0f,0f) - - - private fun calculate(x: Int, y: Int, pass: Int): Color = calculate(x, y, pass, false) - - private fun calculate(x: Int, y: Int, pass: Int, doNotCalculateAmbient: Boolean): Color { - // O(9n) == O(n) where n is a size of the map - // TODO devise multithreading on this - - ambientAccumulator = Color(0f,0f,0f,0f) - - lightLevelThis = Color(0f,0f,0f,0f) - thisTerrain = world.getTileFromTerrain(x, y) ?: Block.STONE - thisWall = world.getTileFromWall(x, y) ?: Block.STONE - thisTileLuminosity = BlockCodex[thisTerrain].luminosity // already been div by four - thisTileOpacity = BlockCodex[thisTerrain].opacity // already been div by four - sunLight = world.globalLight.cpy().mul(DIV_FLOAT) - - - // MIX TILE - // open air - if (thisTerrain == AIR && thisWall == AIR) { - lightLevelThis = sunLight - } - // luminous tile on top of air - else if (thisWall == AIR && thisTileLuminosity.nonZero()) { - lightLevelThis = sunLight maxBlend thisTileLuminosity // maximise to not exceed 1.0 with normal (<= 1.0) light - } - // opaque wall and luminous tile - else if (thisWall != AIR && thisTileLuminosity.nonZero()) { - lightLevelThis = thisTileLuminosity - } - // END MIX TILE - - for (i in 0 until lanternMap.size) { - val lmap = lanternMap[i] - if (lmap.posX == x && lmap.posY == y) - lightLevelThis = lightLevelThis maxBlend lmap.color // maximise to not exceed 1.0 with normal (<= 1.0) light - } - - if (!doNotCalculateAmbient) { - // calculate ambient - /* + * + - * * @ * - * + * + - * sample ambient for eight points and apply attenuation for those - * maxblend eight values and use it - */ - /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x - 1, y - 1) ?: Color(0f,0f,0f,0f), scaleSqrt2(thisTileOpacity)) - /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x + 1, y - 1) ?: Color(0f,0f,0f,0f), scaleSqrt2(thisTileOpacity)) - /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x - 1, y + 1) ?: Color(0f,0f,0f,0f), scaleSqrt2(thisTileOpacity)) - /* + */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x + 1, y + 1) ?: Color(0f,0f,0f,0f), scaleSqrt2(thisTileOpacity)) - - /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x , y - 1) ?: Color(0f,0f,0f,0f), thisTileOpacity) - /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x , y + 1) ?: Color(0f,0f,0f,0f), thisTileOpacity) - /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x - 1, y ) ?: Color(0f,0f,0f,0f), thisTileOpacity) - /* * */ambientAccumulator = ambientAccumulator maxBlend darkenColoured(getLightInternal(x + 1, y ) ?: Color(0f,0f,0f,0f), thisTileOpacity) - - val ret = lightLevelThis maxBlend ambientAccumulator - - - - return ret - } - else { - val ret = lightLevelThis - - return ret - } - - } - - private fun getLightForOpaque(x: Int, y: Int): Color? { // ...so that they wouldn't appear too dark - val l = getLightInternal(x, y) - if (l == null) return null - - if (BlockCodex[world.getTileFromTerrain(x, y)].isSolid) { - return Color( - (l.r * 1.25f),//.clampOne(), - (l.g * 1.25f),//.clampOne(), - (l.b * 1.25f),//.clampOne() - (l.a * 1.25f) - ) - } - else { - return l - } - } - - const val DRAW_FOR_RGB = 0xFFF0 - const val DRAW_FOR_ALPHA = 0x000F - - fun draw(batch: SpriteBatch, drawMode: Int) { - val this_x_start = for_x_start// + overscan_open - val this_x_end = for_x_end// + overscan_open - val this_y_start = for_y_start// + overscan_open - val this_y_end = for_y_end// + overscan_open - - - val originalColour = batch.color.cpy() - - // draw to the - try { - // loop for "scanlines" - for (y in this_y_start..this_y_end) { - // loop x - var x = this_x_start - while (x < this_x_end) { - try { - val thisLightLevel = getLightForOpaque(x, y) - - // coalesce identical intensity blocks to one - var sameLevelCounter = 1 - while (getLightForOpaque(x + sameLevelCounter, y) == thisLightLevel) { - sameLevelCounter += 1 - - if (x + sameLevelCounter >= this_x_end) break - } - - - if (drawMode == DRAW_FOR_RGB) { - batch.color = (getLightForOpaque(x, y) ?: Color(0f,0f,0f,0f)).normaliseToColourHDR() - } - else if (drawMode == DRAW_FOR_ALPHA) { - batch.color = (getLightForOpaque(x, y) ?: Color(0f,0f,0f,0f)).normaliseToAlphaHDR() - } - - - batch.fillRect( - x * DRAW_TILE_SIZE, - y * DRAW_TILE_SIZE, - (DRAW_TILE_SIZE * sameLevelCounter).ceil().toFloat(),// + 1f, - DRAW_TILE_SIZE.ceil().toFloat()// + 1f - ) - - x += sameLevelCounter - 1 - } - catch (e: ArrayIndexOutOfBoundsException) { - // do nothing - } - - - x++ - } - } - } - catch (e: ArrayIndexOutOfBoundsException) { - } - - - batch.color = originalColour - - } - - val lightScalingMagic = 8f - - /** - * Subtract each channel's RGB value. - * - * @param data Raw channel value (0-255) per channel - * @param darken (0-255) per channel - * @return darkened data (0-255) per channel - */ - fun darkenColoured(data: Color, darken: Color): Color { - // use equation with magic number 8.0 - // should draw somewhat exponential curve when you plot the propagation of light in-game - - return Color( - data.r * (1f - darken.r * lightScalingMagic),//.clampZero(), - data.g * (1f - darken.g * lightScalingMagic),//.clampZero(), - data.b * (1f - darken.b * lightScalingMagic),//.clampZero(), - data.a * (1f - darken.a * lightScalingMagic)) - } - - private fun scaleSqrt2(data: Color): Color { - return Color( - data.r * 1.41421356f, - data.g * 1.41421356f, - data.b * 1.41421356f, - data.a * 1.41421356f) - } - - /** - * Add each channel's RGB value. - * - * @param data Raw channel value (0-255) per channel - * @param brighten (0-255) per channel - * @return brightened data (0-255) per channel - */ - fun brightenColoured(data: Color, brighten: Color): Color { - return Color( - data.r * (1f + brighten.r * lightScalingMagic), - data.g * (1f + brighten.g * lightScalingMagic), - data.b * (1f + brighten.b * lightScalingMagic), - data.a * (1f + brighten.a * lightScalingMagic) - ) - } - - /** - * Darken each channel by 'darken' argument - * - * @param data Raw channel value (0-255) per channel - * @param darken (0-255) - * @return - */ - fun darkenUniformInt(data: Color, darken: Float): Color { - if (darken < 0 || darken > CHANNEL_MAX) - throw IllegalArgumentException("darken: out of range ($darken)") - - val darkenColoured = Color(darken, darken, darken, darken) - return darkenColoured(data, darkenColoured) - } - - /** - * Darken or brighten colour by 'brighten' argument - * - * @param data Raw channel value (0-255) per channel - * @param brighten (-1.0 - 1.0) negative means darkening - * @return processed colour - */ - fun alterBrightnessUniform(data: Color, brighten: Float): Color { - return Color( - data.r + brighten, - data.g + brighten, - data.b + brighten, - data.a + brighten - ) - } - - /** Get each channel from two RGB values, return new RGB that has max value of each channel - * @param rgb - * @param rgb2 - * @return - */ - infix fun Color.maxBlend(other: Color): Color { - return Color( - if (this.r > other.r) this.r else other.r, - if (this.g > other.g) this.g else other.g, - if (this.b > other.b) this.b else other.b, - if (this.a > other.a) this.a else other.a - ) - } - - - /*inline fun RGB10.rawR() = this.ushr(20) and 1023 - inline fun RGB10.rawG() = this.ushr(10) and 1023 - inline fun RGB10.rawB() = this and 1023 - - /** 0.0 - 1.0 for 0-1023 (0.0 - 0.25 for 0-255) */ - inline fun RGB10.r(): Float = this.rawR() / CHANNEL_MAX_FLOAT - inline fun RGB10.g(): Float = this.rawG() / CHANNEL_MAX_FLOAT - inline fun RGB10.b(): Float = this.rawB() / CHANNEL_MAX_FLOAT*/ - - - /*inline fun constructRGBFromInt(r: Int, g: Int, b: Int): RGB10 { - //if (r !in 0..CHANNEL_MAX) throw IllegalArgumentException("Red: out of range ($r)") - //if (g !in 0..CHANNEL_MAX) throw IllegalArgumentException("Green: out of range ($g)") - //if (b !in 0..CHANNEL_MAX) throw IllegalArgumentException("Blue: out of range ($b)") - - return r.shl(20) or - g.shl(10) or - b - }*/ - - /*inline fun constructRGBFromFloat(r: Float, g: Float, b: Float): RGB10 { - //if (r < 0 || r > CHANNEL_MAX_DECIMAL) throw IllegalArgumentException("Red: out of range ($r)") - //if (g < 0 || g > CHANNEL_MAX_DECIMAL) throw IllegalArgumentException("Green: out of range ($g)") - //if (b < 0 || b > CHANNEL_MAX_DECIMAL) throw IllegalArgumentException("Blue: out of range ($b)") - - return (r * CHANNEL_MAX).round().shl(20) or - (g * CHANNEL_MAX).round().shl(10) or - (b * CHANNEL_MAX).round() - }*/ - - fun Int.clampZero() = if (this < 0) 0 else this - fun Float.clampZero() = if (this < 0) 0f else this - fun Int.clampChannel() = if (this < 0) 0 else if (this > CHANNEL_MAX) CHANNEL_MAX else this - fun Float.clampOne() = if (this < 0) 0f else if (this > 1) 1f else this - fun Float.clampChannel() = if (this > CHANNEL_MAX_DECIMAL) CHANNEL_MAX_DECIMAL else this - - fun getHighestRGB(x: Int, y: Int): Float? { - val value = getLightInternal(x, y) - if (value == null) - return null - else - return FastMath.max(value.r, value.g, value.b) - } - - fun getHighestRGBA(x: Int, y: Int): Float? { - val value = getLightInternal(x, y) - if (value == null) - return null - else - return FastMath.max(value.r, value.g, value.b, value.a) - } - - private fun purgeLightmap() { - for (y in 0..LIGHTMAP_HEIGHT - 1) { - for (x in 0..LIGHTMAP_WIDTH - 1) { - lightmap[y][x] = Color(0f,0f,0f,0f) - } - } - } - - infix fun Float.powerOf(f: Float) = FastMath.pow(this, f) - private fun Float.sqr() = this * this - private fun Float.sqrt() = FastMath.sqrt(this) - private fun Float.inv() = 1f / this - fun Float.floor() = FastMath.floor(this) - fun Double.floorInt() = Math.floor(this).toInt() - fun Float.round(): Int = Math.round(this) - fun Double.round(): Int = Math.round(this).toInt() - fun Float.ceil() = FastMath.ceil(this) - fun Int.even(): Boolean = this and 1 == 0 - fun Int.odd(): Boolean = this and 1 == 1 - - // TODO: float LUT lookup using linear interpolation - - // input: 0..1 for int 0..1023 - fun hdr(intensity: Float): Float { - val intervalStart = (intensity * MUL).floorInt() - val intervalEnd = minOf(rgbHDRLookupTable.lastIndex, (intensity * MUL).floorInt() + 1) - - if (intervalStart == intervalEnd) return rgbHDRLookupTable[intervalStart] - - val intervalPos = (intensity * MUL) - (intensity * MUL).toInt() - - return interpolateLinear( - intervalPos, - rgbHDRLookupTable[intervalStart], - rgbHDRLookupTable[intervalEnd] - ) - } - - val rgbHDRLookupTable = floatArrayOf( // polynomial of 6.0 please refer to work_files/HDRcurveBezierLinIntp.kts - 0.0000f,0.0000f,0.0020f,0.0060f,0.0100f,0.0139f,0.0179f,0.0219f,0.0259f,0.0299f,0.0338f,0.0378f,0.0418f,0.0458f,0.0497f,0.0537f, - 0.0577f,0.0617f,0.0656f,0.0696f,0.0736f,0.0776f,0.0816f,0.0855f,0.0895f,0.0935f,0.0975f,0.1014f,0.1054f,0.1094f,0.1134f,0.1173f, - 0.1213f,0.1253f,0.1293f,0.1332f,0.1372f,0.1412f,0.1451f,0.1491f,0.1531f,0.1571f,0.1610f,0.1650f,0.1690f,0.1730f,0.1769f,0.1809f, - 0.1849f,0.1888f,0.1928f,0.1968f,0.2007f,0.2047f,0.2087f,0.2127f,0.2166f,0.2206f,0.2246f,0.2285f,0.2325f,0.2365f,0.2404f,0.2444f, - 0.2484f,0.2523f,0.2563f,0.2602f,0.2642f,0.2682f,0.2721f,0.2761f,0.2800f,0.2840f,0.2880f,0.2919f,0.2959f,0.2998f,0.3038f,0.3078f, - 0.3117f,0.3157f,0.3196f,0.3236f,0.3275f,0.3315f,0.3354f,0.3394f,0.3433f,0.3472f,0.3512f,0.3551f,0.3591f,0.3630f,0.3669f,0.3709f, - 0.3748f,0.3788f,0.3827f,0.3866f,0.3905f,0.3945f,0.3984f,0.4023f,0.4062f,0.4101f,0.4141f,0.4180f,0.4219f,0.4258f,0.4297f,0.4336f, - 0.4375f,0.4414f,0.4453f,0.4491f,0.4530f,0.4569f,0.4608f,0.4647f,0.4685f,0.4724f,0.4762f,0.4801f,0.4839f,0.4878f,0.4916f,0.4954f, - 0.4993f,0.5031f,0.5069f,0.5107f,0.5145f,0.5183f,0.5220f,0.5258f,0.5296f,0.5333f,0.5371f,0.5408f,0.5445f,0.5482f,0.5520f,0.5556f, - 0.5593f,0.5630f,0.5667f,0.5703f,0.5739f,0.5776f,0.5812f,0.5848f,0.5883f,0.5919f,0.5955f,0.5990f,0.6025f,0.6060f,0.6095f,0.6130f, - 0.6164f,0.6199f,0.6233f,0.6267f,0.6300f,0.6334f,0.6367f,0.6401f,0.6433f,0.6466f,0.6499f,0.6531f,0.6563f,0.6595f,0.6627f,0.6658f, - 0.6689f,0.6720f,0.6751f,0.6781f,0.6811f,0.6841f,0.6871f,0.6901f,0.6930f,0.6959f,0.6987f,0.7016f,0.7044f,0.7072f,0.7100f,0.7127f, - 0.7154f,0.7181f,0.7208f,0.7234f,0.7260f,0.7286f,0.7311f,0.7337f,0.7362f,0.7386f,0.7411f,0.7435f,0.7459f,0.7483f,0.7506f,0.7530f, - 0.7553f,0.7575f,0.7598f,0.7620f,0.7642f,0.7664f,0.7685f,0.7706f,0.7727f,0.7748f,0.7769f,0.7789f,0.7809f,0.7829f,0.7849f,0.7868f, - 0.7887f,0.7906f,0.7925f,0.7944f,0.7962f,0.7980f,0.7998f,0.8016f,0.8033f,0.8051f,0.8068f,0.8085f,0.8101f,0.8118f,0.8134f,0.8150f, - 0.8166f,0.8182f,0.8198f,0.8213f,0.8229f,0.8244f,0.8259f,0.8274f,0.8288f,0.8303f,0.8317f,0.8331f,0.8345f,0.8359f,0.8373f,0.8386f, - 0.8400f,0.8413f,0.8426f,0.8439f,0.8452f,0.8465f,0.8477f,0.8490f,0.8502f,0.8514f,0.8526f,0.8538f,0.8550f,0.8562f,0.8573f,0.8585f, - 0.8596f,0.8608f,0.8619f,0.8630f,0.8641f,0.8651f,0.8662f,0.8673f,0.8683f,0.8693f,0.8704f,0.8714f,0.8724f,0.8734f,0.8744f,0.8754f, - 0.8763f,0.8773f,0.8782f,0.8792f,0.8801f,0.8811f,0.8820f,0.8829f,0.8838f,0.8847f,0.8856f,0.8864f,0.8873f,0.8882f,0.8890f,0.8899f, - 0.8907f,0.8915f,0.8923f,0.8932f,0.8940f,0.8948f,0.8956f,0.8963f,0.8971f,0.8979f,0.8987f,0.8994f,0.9002f,0.9009f,0.9017f,0.9024f, - 0.9031f,0.9039f,0.9046f,0.9053f,0.9060f,0.9067f,0.9074f,0.9081f,0.9087f,0.9094f,0.9101f,0.9108f,0.9114f,0.9121f,0.9127f,0.9134f, - 0.9140f,0.9146f,0.9153f,0.9159f,0.9165f,0.9171f,0.9177f,0.9184f,0.9190f,0.9195f,0.9201f,0.9207f,0.9213f,0.9219f,0.9225f,0.9230f, - 0.9236f,0.9242f,0.9247f,0.9253f,0.9258f,0.9264f,0.9269f,0.9274f,0.9280f,0.9285f,0.9290f,0.9296f,0.9301f,0.9306f,0.9311f,0.9316f, - 0.9321f,0.9326f,0.9331f,0.9336f,0.9341f,0.9346f,0.9351f,0.9355f,0.9360f,0.9365f,0.9370f,0.9374f,0.9379f,0.9383f,0.9388f,0.9393f, - 0.9397f,0.9402f,0.9406f,0.9410f,0.9415f,0.9419f,0.9423f,0.9428f,0.9432f,0.9436f,0.9440f,0.9445f,0.9449f,0.9453f,0.9457f,0.9461f, - 0.9465f,0.9469f,0.9473f,0.9477f,0.9481f,0.9485f,0.9489f,0.9493f,0.9497f,0.9501f,0.9504f,0.9508f,0.9512f,0.9516f,0.9519f,0.9523f, - 0.9527f,0.9530f,0.9534f,0.9537f,0.9541f,0.9545f,0.9548f,0.9552f,0.9555f,0.9559f,0.9562f,0.9565f,0.9569f,0.9572f,0.9576f,0.9579f, - 0.9582f,0.9586f,0.9589f,0.9592f,0.9595f,0.9599f,0.9602f,0.9605f,0.9608f,0.9611f,0.9614f,0.9617f,0.9621f,0.9624f,0.9627f,0.9630f, - 0.9633f,0.9636f,0.9639f,0.9642f,0.9645f,0.9648f,0.9650f,0.9653f,0.9656f,0.9659f,0.9662f,0.9665f,0.9668f,0.9670f,0.9673f,0.9676f, - 0.9679f,0.9681f,0.9684f,0.9687f,0.9690f,0.9692f,0.9695f,0.9697f,0.9700f,0.9703f,0.9705f,0.9708f,0.9711f,0.9713f,0.9716f,0.9718f, - 0.9721f,0.9723f,0.9726f,0.9728f,0.9731f,0.9733f,0.9735f,0.9738f,0.9740f,0.9743f,0.9745f,0.9747f,0.9750f,0.9752f,0.9754f,0.9757f, - 0.9759f,0.9761f,0.9764f,0.9766f,0.9768f,0.9770f,0.9773f,0.9775f,0.9777f,0.9779f,0.9781f,0.9784f,0.9786f,0.9788f,0.9790f,0.9792f, - 0.9794f,0.9796f,0.9799f,0.9801f,0.9803f,0.9805f,0.9807f,0.9809f,0.9811f,0.9813f,0.9815f,0.9817f,0.9819f,0.9821f,0.9823f,0.9825f, - 0.9827f,0.9829f,0.9831f,0.9832f,0.9834f,0.9836f,0.9838f,0.9840f,0.9842f,0.9844f,0.9846f,0.9847f,0.9849f,0.9851f,0.9853f,0.9855f, - 0.9856f,0.9858f,0.9860f,0.9862f,0.9864f,0.9865f,0.9867f,0.9869f,0.9870f,0.9872f,0.9874f,0.9876f,0.9877f,0.9879f,0.9881f,0.9882f, - 0.9884f,0.9886f,0.9887f,0.9889f,0.9890f,0.9892f,0.9894f,0.9895f,0.9897f,0.9898f,0.9900f,0.9901f,0.9903f,0.9905f,0.9906f,0.9908f, - 0.9909f,0.9911f,0.9912f,0.9914f,0.9915f,0.9917f,0.9918f,0.9920f,0.9921f,0.9922f,0.9924f,0.9925f,0.9927f,0.9928f,0.9930f,0.9931f, - 0.9932f,0.9934f,0.9935f,0.9937f,0.9938f,0.9939f,0.9941f,0.9942f,0.9943f,0.9945f,0.9946f,0.9947f,0.9949f,0.9950f,0.9951f,0.9953f, - 0.9954f,0.9955f,0.9957f,0.9958f,0.9959f,0.9960f,0.9962f,0.9963f,0.9964f,0.9965f,0.9967f,0.9968f,0.9969f,0.9970f,0.9971f,0.9973f, - 0.9974f,0.9975f,0.9976f,0.9977f,0.9978f,0.9980f,0.9981f,0.9982f,0.9983f,0.9984f,0.9985f,0.9987f,0.9988f,0.9989f,0.9990f,0.9991f, - 0.9992f,0.9993f,0.9994f,0.9995f,0.9996f,0.9997f,0.9999f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f, - 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f // isn't it beautiful? - ) - /** To eliminated visible edge on the gradient when 255/1023 is exceeded */ - fun Color.normaliseToColourHDR() = Color( - hdr(this.r), - hdr(this.g), - hdr(this.b), - 1f - ) - - fun Color.normaliseToAlphaHDR() = Color( - hdr(this.a), - hdr(this.a), - hdr(this.a), - 1f - ) - - /** - * color values are normalised -- 0.0 to 1.0 for 0..1023 - */ - data class Lantern(val posX: Int, val posY: Int, val color: Color) - - private fun Color.nonZero() = this.r != 0f || this.g != 0f || this.b != 0f || this.a != 0f - - val histogram: Histogram - get() { - var reds = IntArray(MUL) // reds[intensity] ← counts - var greens = IntArray(MUL) // do. - var blues = IntArray(MUL) // do. - val render_width = for_x_end - for_x_start - val render_height = for_y_end - for_y_start - // excluiding overscans; only reckon echo lights - for (y in overscan_open..render_height + overscan_open + 1) { - for (x in overscan_open..render_width + overscan_open + 1) { - reds [minOf(CHANNEL_MAX, lightmap[y][x].r.times(MUL).floorInt())] += 1 - greens[minOf(CHANNEL_MAX, lightmap[y][x].g.times(MUL).floorInt())] += 1 - blues [minOf(CHANNEL_MAX, lightmap[y][x].b.times(MUL).floorInt())] += 1 - } - } - return Histogram(reds, greens, blues) - } - - class Histogram(val reds: IntArray, val greens: IntArray, val blues: IntArray) { - - val RED = 0 - val GREEN = 1 - val BLUE = 2 - - val screen_tiles: Int = (for_x_end - for_x_start + 2) * (for_y_end - for_y_start + 2) - - val brightest: Int - get() { - for (i in CHANNEL_MAX downTo 1) { - if (reds[i] > 0 || greens[i] > 0 || blues[i] > 0) - return i - } - return 0 - } - - val brightest8Bit: Int - get() { val b = brightest - return if (brightest > 255) 255 else b - } - - val dimmest: Int - get() { - for (i in 0..CHANNEL_MAX) { - if (reds[i] > 0 || greens[i] > 0 || blues[i] > 0) - return i - } - return CHANNEL_MAX - } - - val range: Int = CHANNEL_MAX - - fun get(index: Int): IntArray { - return when (index) { - RED -> reds - GREEN -> greens - BLUE -> blues - else -> throw IllegalArgumentException() - } - } - } - - fun interpolateLinear(scale: Float, startValue: Float, endValue: Float): Float { - if (startValue == endValue) { - return startValue - } - if (scale <= 0f) { - return startValue - } - if (scale >= 1f) { - return endValue - } - return (1f - scale) * startValue + scale * endValue - } -} diff --git a/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt b/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt index 91f1ced87..0b5cfebca 100644 --- a/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt +++ b/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt @@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.glutils.ShaderProgram import com.jme3.math.FastMath +import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.* import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.blockproperties.Block @@ -81,9 +82,9 @@ object LightmapRenderer { * Float value, 1.0 for 1023 */ // it utilises alpha channel to determine brightness of "glow" sprites (so that alpha channel works like UV light) - //private val lightmap: Array> = Array(LIGHTMAP_HEIGHT) { Array(LIGHTMAP_WIDTH, { Color(0f,0f,0f,0f) }) } // Can't use framebuffer/pixmap -- this is a fvec4 array, whereas they are ivec4. - private var lightmap: Array = Array(LIGHTMAP_WIDTH * LIGHTMAP_HEIGHT) { Color(0) } // Can't use framebuffer/pixmap -- this is a fvec4 array, whereas they are ivec4. - private val lanternMap = HashMap((Terrarum.ingame?.ACTORCONTAINER_INITIAL_SIZE ?: 2) * 4) + //private val lightmap: Array> = Array(LIGHTMAP_HEIGHT) { Array(LIGHTMAP_WIDTH, { Cvec(0f,0f,0f,0f) }) } // Can't use framebuffer/pixmap -- this is a fvec4 array, whereas they are ivec4. + private var lightmap: Array = Array(LIGHTMAP_WIDTH * LIGHTMAP_HEIGHT) { Cvec(0) } // Can't use framebuffer/pixmap -- this is a fvec4 array, whereas they are ivec4. + private val lanternMap = HashMap((Terrarum.ingame?.ACTORCONTAINER_INITIAL_SIZE ?: 2) * 4) init { printdbg(this, "Overscan open: $overscan_open; opaque: $overscan_opaque") @@ -120,13 +121,13 @@ object LightmapRenderer { * @param x world tile coord * @param y world tile coord */ - internal fun getLight(x: Int, y: Int): Color? { + internal fun getLight(x: Int, y: Int): Cvec? { val col = getLightInternal(x, y) if (col == null) { return null } else { - return Color(col.r * MUL_FLOAT, col.g * MUL_FLOAT, col.b * MUL_FLOAT, col.a * MUL_FLOAT) + return Cvec(col.r * MUL_FLOAT, col.g * MUL_FLOAT, col.b * MUL_FLOAT, col.a * MUL_FLOAT) } } @@ -137,7 +138,7 @@ object LightmapRenderer { * @param y world tile coord */ // TODO in regard of "colour math against integers", return Int? - private fun getLightInternal(x: Int, y: Int): Color? { + private fun getLightInternal(x: Int, y: Int): Cvec? { if (y - for_y_start + overscan_open in 0 until LIGHTMAP_HEIGHT && x - for_x_start + overscan_open in 0 until LIGHTMAP_WIDTH) { @@ -161,10 +162,10 @@ object LightmapRenderer { * @param list The lightmap * @param x World X coordinate * @param y World Y coordinate - * @param colour Color to write + * @param colour Cvec to write * @param applyFun A function ```foo(old_colour, given_colour)``` */ - private fun setLightOf(list: Array, x: Int, y: Int, colour: Color, applyFun: (Color, Color) -> Color = { _, c -> c }) { + private fun setLightOf(list: Array, x: Int, y: Int, colour: Cvec, applyFun: (Cvec, Cvec) -> Cvec = { _, c -> c }) { if (y - for_y_start + overscan_open in 0 until LIGHTMAP_HEIGHT && x - for_x_start + overscan_open in 0 until LIGHTMAP_WIDTH) { @@ -347,13 +348,13 @@ object LightmapRenderer { for (x in lightBoxX.div(TILE_SIZE).floorInt() ..lightBoxX.plus(lightBoxW).div(TILE_SIZE).floorInt()) { - val normalisedColor = it.color//.cpy().mul(DIV_FLOAT) + val normalisedCvec = it.color//.cpy().mul(DIV_FLOAT) - lanternMap[LandUtil.getBlockAddr(world, x, y)] = normalisedColor - //lanternMap[Point2i(x, y)] = normalisedColor + lanternMap[LandUtil.getBlockAddr(world, x, y)] = normalisedCvec + //lanternMap[Point2i(x, y)] = normalisedCvec // Q&D fix for Roundworld anomaly - //lanternMap[Point2i(x + world.width, y)] = normalisedColor - //lanternMap[Point2i(x - world.width, y)] = normalisedColor + //lanternMap[Point2i(x + world.width, y)] = normalisedCvec + //lanternMap[Point2i(x - world.width, y)] = normalisedCvec } } } @@ -393,16 +394,16 @@ object LightmapRenderer { } - //private val ambientAccumulator = Color(0f,0f,0f,0f) - private val lightLevelThis = Color(0) + //private val ambientAccumulator = Cvec(0f,0f,0f,0f) + private val lightLevelThis = Cvec(0) private var thisTerrain = 0 private var thisFluid = GameWorld.FluidInfo(Fluid.NULL, 0f) - private val fluidAmountToCol = Color(0) + private val fluidAmountToCol = Cvec(0) private var thisWall = 0 - private val thisTileLuminosity = Color(0) - private val thisTileOpacity = Color(0) - private val thisTileOpacity2 = Color(0) // thisTileOpacity * sqrt(2) - private val sunLight = Color(0) + private val thisTileLuminosity = Cvec(0) + private val thisTileOpacity = Cvec(0) + private val thisTileOpacity2 = Cvec(0) // thisTileOpacity * sqrt(2) + private val sunLight = Cvec(0) /** * This function will alter following variables: @@ -425,9 +426,9 @@ object LightmapRenderer { fluidAmountToCol.set(thisFluid.amount, thisFluid.amount, thisFluid.amount, thisFluid.amount) thisTileLuminosity.set(BlockCodex[thisTerrain].luminosity) - thisTileLuminosity.maxAndAssign(BlockCodex[thisFluid.type].luminosity mul fluidAmountToCol) // already been div by four + thisTileLuminosity.maxAndAssign(BlockCodex[thisFluid.type].luminosity.mul(fluidAmountToCol)) // already been div by four thisTileOpacity.set(BlockCodex[thisTerrain].opacity) - thisTileOpacity.maxAndAssign(BlockCodex[thisFluid.type].opacity mul fluidAmountToCol) // already been div by four + thisTileOpacity.maxAndAssign(BlockCodex[thisFluid.type].opacity.mul(fluidAmountToCol)) // already been div by four } else { thisTileLuminosity.set(BlockCodex[thisTerrain].luminosity) @@ -499,7 +500,7 @@ object LightmapRenderer { /** * Calculates the light simulation, using main lightmap as one of the input. */ - private fun calculateAndAssign(lightmap: Array, x: Int, y: Int) { + private fun calculateAndAssign(lightmap: Array, x: Int, y: Int) { if (inNoopMask(x, y)) return @@ -531,13 +532,13 @@ object LightmapRenderer { setLightOf(lightmap, x, y, lightLevelThis.cpy()) } - private fun getLightForOpaque(x: Int, y: Int): Color? { // ...so that they wouldn't appear too dark + private fun getLightForOpaque(x: Int, y: Int): Cvec? { // ...so that they wouldn't appear too dark val l = getLightInternal(x, y) if (l == null) return null // brighten if solid if (BlockCodex[world.getTileFromTerrain(x, y)].isSolid) { - return Color( + return Cvec( (l.r * 1.2f), (l.g * 1.2f), (l.b * 1.2f), @@ -551,7 +552,7 @@ object LightmapRenderer { var lightBuffer: Pixmap = Pixmap(1, 1, Pixmap.Format.RGBA8888) - private val colourNull = Color(0) + private val colourNull = Cvec(0) private val epsilon = 1f/1024f private var _lightBufferAsTex: Texture = Texture(1, 1, Pixmap.Format.RGBA8888) @@ -568,7 +569,7 @@ object LightmapRenderer { // wipe out beforehand. You DO need this lightBuffer.blending = Pixmap.Blending.None // gonna overwrite (remove this line causes the world to go bit darker) - lightBuffer.setColor(colourNull) + lightBuffer.setColor(0) lightBuffer.fill() @@ -581,7 +582,7 @@ object LightmapRenderer { for (x in this_x_start..this_x_end) { - val color = (getLightForOpaque(x, y) ?: Color(0f, 0f, 0f, 0f)).normaliseToHDR() + val color = (getLightForOpaque(x, y) ?: Cvec(0f, 0f, 0f, 0f)).normaliseToHDR() lightBuffer.setColor(color) @@ -620,11 +621,11 @@ object LightmapRenderer { * @param darken (0-255) per channel * @return darkened data (0-255) per channel */ - fun darkenColoured(data: Color, darken: Color): Color { + fun darkenColoured(data: Cvec, darken: Cvec): Cvec { // use equation with magic number 8.0 // this function, when done recursively (A_x = darken(A_x-1, C)), draws exponential curve. (R^2 = 1) - return Color( + return Cvec( data.r * (1f - darken.r * lightScalingMagic),//.clampZero(), data.g * (1f - darken.g * lightScalingMagic),//.clampZero(), data.b * (1f - darken.b * lightScalingMagic),//.clampZero(), @@ -638,11 +639,11 @@ object LightmapRenderer { * @param darken (0-255) * @return */ - fun darkenUniformInt(data: Color, darken: Float): Color { + fun darkenUniformInt(data: Cvec, darken: Float): Cvec { if (darken < 0 || darken > CHANNEL_MAX) throw IllegalArgumentException("darken: out of range ($darken)") - val darkenColoured = Color(darken, darken, darken, darken) + val darkenColoured = Cvec(darken, darken, darken, darken) return darkenColoured(data, darkenColoured) } @@ -653,8 +654,8 @@ object LightmapRenderer { * @param brighten (-1.0 - 1.0) negative means darkening * @return processed colour */ - fun alterBrightnessUniform(data: Color, brighten: Float): Color { - return Color( + fun alterBrightnessUniform(data: Cvec, brighten: Float): Cvec { + return Cvec( data.r + brighten, data.g + brighten, data.b + brighten, @@ -663,7 +664,7 @@ object LightmapRenderer { } /** infix is removed to clarify the association direction */ - fun Color.maxAndAssign(other: Color): Color { + fun Cvec.maxAndAssign(other: Cvec): Cvec { this.set( if (this.r > other.r) this.r else other.r, if (this.g > other.g) this.g else other.g, @@ -723,7 +724,7 @@ object LightmapRenderer { _init = true } lightBuffer = Pixmap(tilesInHorizontal, tilesInVertical, Pixmap.Format.RGBA8888) - lightmap = Array(LIGHTMAP_WIDTH * LIGHTMAP_HEIGHT) { Color(0) } + lightmap = Array(LIGHTMAP_WIDTH * LIGHTMAP_HEIGHT) { Cvec(0) } printdbg(this, "Resize event") @@ -797,14 +798,14 @@ object LightmapRenderer { 1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f,1.0000f // isn't it beautiful? ) /** To eliminated visible edge on the gradient when 255/1023 is exceeded */ - internal fun Color.normaliseToHDR() = Color( - hdr(this.r.coerceIn(0f,1f)), - hdr(this.g.coerceIn(0f,1f)), - hdr(this.b.coerceIn(0f,1f)), - hdr(this.a.coerceIn(0f,1f)) + internal fun Cvec.normaliseToHDR() = Color( + hdr(this.r.coerceIn(0f, 1f)), + hdr(this.g.coerceIn(0f, 1f)), + hdr(this.b.coerceIn(0f, 1f)), + hdr(this.a.coerceIn(0f, 1f)) ) - private fun Color.nonZero() = this.r + this.g + this.b + this.a > epsilon + private fun Cvec.nonZero() = this.r + this.g + this.b + this.a > epsilon val histogram: Histogram get() { @@ -890,5 +891,6 @@ object LightmapRenderer { } } +fun Cvec.toRGBA() = (255 * r).toInt() shl 24 or ((255 * g).toInt() shl 16) or ((255 * b).toInt() shl 8) or (255 * a).toInt() fun Color.toRGBA() = (255 * r).toInt() shl 24 or ((255 * g).toInt() shl 16) or ((255 * b).toInt() shl 8) or (255 * a).toInt() diff --git a/terrarum.iml b/terrarum.iml index 47dd18719..619e2a2aa 100644 --- a/terrarum.iml +++ b/terrarum.iml @@ -2,10 +2,10 @@ - + -