diff --git a/Collector/Collector.csproj b/Collector/Collector.csproj index 16c2834..a68146c 100644 --- a/Collector/Collector.csproj +++ b/Collector/Collector.csproj @@ -3,6 +3,7 @@ WinExe netcoreapp2.2 + latest @@ -15,7 +16,8 @@ - + + diff --git a/Collector/LegacyJava/Collector/Character/InputController.java b/Collector/OLD/LegacyJava/Collector/Character/InputController.java similarity index 100% rename from Collector/LegacyJava/Collector/Character/InputController.java rename to Collector/OLD/LegacyJava/Collector/Character/InputController.java diff --git a/Collector/LegacyJava/Collector/Character/Mouse.java b/Collector/OLD/LegacyJava/Collector/Character/Mouse.java similarity index 100% rename from Collector/LegacyJava/Collector/Character/Mouse.java rename to Collector/OLD/LegacyJava/Collector/Character/Mouse.java diff --git a/Collector/LegacyJava/Collector/Character/Player.java b/Collector/OLD/LegacyJava/Collector/Character/Player.java similarity index 100% rename from Collector/LegacyJava/Collector/Character/Player.java rename to Collector/OLD/LegacyJava/Collector/Character/Player.java diff --git a/Collector/LegacyJava/Collector/Dimension/Block.java b/Collector/OLD/LegacyJava/Collector/Dimension/Block.java similarity index 100% rename from Collector/LegacyJava/Collector/Dimension/Block.java rename to Collector/OLD/LegacyJava/Collector/Dimension/Block.java diff --git a/Collector/LegacyJava/Collector/Dimension/BlockMaterials.java b/Collector/OLD/LegacyJava/Collector/Dimension/BlockMaterials.java similarity index 100% rename from Collector/LegacyJava/Collector/Dimension/BlockMaterials.java rename to Collector/OLD/LegacyJava/Collector/Dimension/BlockMaterials.java diff --git a/Collector/LegacyJava/Collector/Dimension/Chunks.java b/Collector/OLD/LegacyJava/Collector/Dimension/Chunks.java similarity index 100% rename from Collector/LegacyJava/Collector/Dimension/Chunks.java rename to Collector/OLD/LegacyJava/Collector/Dimension/Chunks.java diff --git a/Collector/LegacyJava/Collector/Dimension/Inventory.java b/Collector/OLD/LegacyJava/Collector/Dimension/Inventory.java similarity index 100% rename from Collector/LegacyJava/Collector/Dimension/Inventory.java rename to Collector/OLD/LegacyJava/Collector/Dimension/Inventory.java diff --git a/Collector/LegacyJava/Collector/Dimension/ItemStack.java b/Collector/OLD/LegacyJava/Collector/Dimension/ItemStack.java similarity index 100% rename from Collector/LegacyJava/Collector/Dimension/ItemStack.java rename to Collector/OLD/LegacyJava/Collector/Dimension/ItemStack.java diff --git a/Collector/LegacyJava/Collector/Dimension/World.java b/Collector/OLD/LegacyJava/Collector/Dimension/World.java similarity index 100% rename from Collector/LegacyJava/Collector/Dimension/World.java rename to Collector/OLD/LegacyJava/Collector/Dimension/World.java diff --git a/Collector/LegacyJava/Collector/Dimension/WorldRenderer.java b/Collector/OLD/LegacyJava/Collector/Dimension/WorldRenderer.java similarity index 100% rename from Collector/LegacyJava/Collector/Dimension/WorldRenderer.java rename to Collector/OLD/LegacyJava/Collector/Dimension/WorldRenderer.java diff --git a/Collector/LegacyJava/Collector/Main.java b/Collector/OLD/LegacyJava/Collector/Main.java similarity index 100% rename from Collector/LegacyJava/Collector/Main.java rename to Collector/OLD/LegacyJava/Collector/Main.java diff --git a/Collector/LegacyJava/Collector/Restrictions.java b/Collector/OLD/LegacyJava/Collector/Restrictions.java similarity index 100% rename from Collector/LegacyJava/Collector/Restrictions.java rename to Collector/OLD/LegacyJava/Collector/Restrictions.java diff --git a/Collector/LegacyJava/Collector/ThirdPartyCode/OpenSimplexNoise.java b/Collector/OLD/LegacyJava/Collector/ThirdPartyCode/OpenSimplexNoise.java similarity index 100% rename from Collector/LegacyJava/Collector/ThirdPartyCode/OpenSimplexNoise.java rename to Collector/OLD/LegacyJava/Collector/ThirdPartyCode/OpenSimplexNoise.java diff --git a/Collector/LegacyJava/Collector/UI/GUI.java b/Collector/OLD/LegacyJava/Collector/UI/GUI.java similarity index 100% rename from Collector/LegacyJava/Collector/UI/GUI.java rename to Collector/OLD/LegacyJava/Collector/UI/GUI.java diff --git a/Collector/LegacyJava/Collector/UI/InventoryInterface.java b/Collector/OLD/LegacyJava/Collector/UI/InventoryInterface.java similarity index 100% rename from Collector/LegacyJava/Collector/UI/InventoryInterface.java rename to Collector/OLD/LegacyJava/Collector/UI/InventoryInterface.java diff --git a/Collector/LegacyJava/Collector/UI/MiniMap.java b/Collector/OLD/LegacyJava/Collector/UI/MiniMap.java similarity index 100% rename from Collector/LegacyJava/Collector/UI/MiniMap.java rename to Collector/OLD/LegacyJava/Collector/UI/MiniMap.java diff --git a/Collector/Restrictions.cs b/Collector/Restrictions.cs new file mode 100644 index 0000000..5244c99 --- /dev/null +++ b/Collector/Restrictions.cs @@ -0,0 +1,22 @@ +using System; +using static Collector.IRestrictions; + +namespace Collector +{ + public interface IRestrictions + { + public const int Seed = 1; + public const float ViewportHeight = 9/2f; + public const float ViewportWidth = 16/2f; + public const int MovementSpeed = 16; + public const int FreeSpeed = 2; + public const int KeyDelay = 0; + public const int TileSize = 16; + public const int ChunkSize = 8; + public const int SuperChunkSize = 1; + public const int TileShift = 5; + public const int ChunkShift = 3; + public const int RenderDistance = 3; + public const float RenderTime = 1/60f; + } +} \ No newline at end of file diff --git a/Collector/src/Character/InputController.java b/Collector/src/Character/InputController.java new file mode 100644 index 0000000..7e5d613 --- /dev/null +++ b/Collector/src/Character/InputController.java @@ -0,0 +1,113 @@ +package Collector.Character; + +import Collector.Main; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.g2d.Animation; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.math.Vector3; +import Collector.Dimension.Chunks; +import Collector.Restrictions; + +import java.util.HashMap; + +public class InputController implements Restrictions { + + private Player player; + private HashMap> animations; + private Mouse mouse; + int i = 0; + + public InputController(Player player, Mouse mouse) { + this.player = player; + this.mouse = mouse; + animations = new HashMap<>(); + animations.put("Up", new Animation<>(1 / 4f, player.getTextureAtlas().findRegions(player.getSpriteName() + "_" + "Up"))); + animations.put("UpRight", new Animation<>(1 / 4f, player.getTextureAtlas().findRegions(player.getSpriteName() + "_" + "UpRight"))); + animations.put("UpLeft", new Animation<>(1 / 4f, player.getTextureAtlas().findRegions(player.getSpriteName() + "_" + "UpLeft"))); + animations.put("Down", new Animation<>(1 / 4f, player.getTextureAtlas().findRegions(player.getSpriteName() + "_" + "Down"))); + animations.put("DownRight", new Animation<>(1 / 4f, player.getTextureAtlas().findRegions(player.getSpriteName() + "_" + "DownRight"))); + animations.put("DownLeft", new Animation<>(1 / 4f, player.getTextureAtlas().findRegions(player.getSpriteName() + "_" + "DownLeft"))); + animations.put("Left", new Animation<>(1 / 4f, player.getTextureAtlas().findRegions(player.getSpriteName() + "_" + "Left"))); + animations.put("Right", new Animation<>(1 / 4f, player.getTextureAtlas().findRegions(player.getSpriteName() + "_" + "Right"))); + } + + public void handleInput() { + i++; + if (Gdx.input.isKeyPressed(Input.Keys.Q)) { + Main.cam.zoom += 5; + } + if (Gdx.input.isKeyPressed(Input.Keys.E)) { + Main.cam.zoom -= 5; + } + if ((Gdx.input.isButtonJustPressed(Input.Buttons.LEFT) || Gdx.input.isButtonJustPressed(Input.Buttons.RIGHT) )&& i > KEY_DELAY) { + Vector3 mousePos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); + Main.cam.unproject(mousePos); + int x = mouse.getSelectedX(mousePos) >> TILE_SHIFT; + int y = mouse.getSelectedY(mousePos) >> TILE_SHIFT; + if(Gdx.input.isButtonJustPressed(Input.Buttons.LEFT)) { + i = 0; + Chunks.placeBlock(x, y, "wood"); + } + if (Gdx.input.isButtonJustPressed(Input.Buttons.RIGHT)) { + i = 0; + Chunks.removeBlock(x,y); + } + } + + if (Gdx.input.isKeyPressed(Input.Keys.W) && Gdx.input.isKeyPressed(Input.Keys.A) && i > KEY_DELAY) { + i = 0; + player.setAnimation(animations.get("UpLeft")); + Player.addX(-MOVEMENT_SPEED); + Player.addY(MOVEMENT_SPEED); + Main.cam.translate(-MOVEMENT_SPEED, MOVEMENT_SPEED); + } + else if (Gdx.input.isKeyPressed(Input.Keys.W) && Gdx.input.isKeyPressed(Input.Keys.D) && i > KEY_DELAY) { + i = 0; + player.setAnimation(animations.get("UpRight")); + Player.addX(MOVEMENT_SPEED); + Player.addY(MOVEMENT_SPEED); + Main.cam.translate(MOVEMENT_SPEED, MOVEMENT_SPEED); + } + else if (Gdx.input.isKeyPressed(Input.Keys.S) && Gdx.input.isKeyPressed(Input.Keys.A) && i > KEY_DELAY) { + i = 0; + player.setAnimation(animations.get("DownLeft")); + Player.addX(-MOVEMENT_SPEED); + Player.addY(-MOVEMENT_SPEED); + Main.cam.translate(-MOVEMENT_SPEED, -MOVEMENT_SPEED); + } + else if (Gdx.input.isKeyPressed(Input.Keys.S) && Gdx.input.isKeyPressed(Input.Keys.D) && i > KEY_DELAY) { + i = 0; + player.setAnimation(animations.get("DownRight")); + Player.addX(MOVEMENT_SPEED); + Player.addY(-MOVEMENT_SPEED); + + Main.cam.translate(MOVEMENT_SPEED, -MOVEMENT_SPEED); + } + else if (Gdx.input.isKeyPressed(Input.Keys.A) && i > KEY_DELAY) { + i = 0; + player.setAnimation(animations.get("Left")); + Player.addX(-MOVEMENT_SPEED); + Main.cam.translate(-MOVEMENT_SPEED, 0); + } + else if (Gdx.input.isKeyPressed(Input.Keys.D) && i > KEY_DELAY) { + i = 0; + player.setAnimation(animations.get("Right")); + Player.addX(MOVEMENT_SPEED); + Main.cam.translate(MOVEMENT_SPEED, 0); + } + else if (Gdx.input.isKeyPressed(Input.Keys.S) && i > KEY_DELAY) { + i = 0; + player.setAnimation(animations.get("Down")); + Player.addY(-MOVEMENT_SPEED); + Main.cam.translate(0, -MOVEMENT_SPEED); + } + if (Gdx.input.isKeyPressed(Input.Keys.W) && i > KEY_DELAY) { + i = 0; + player.setAnimation(animations.get("Up")); + Player.addY(MOVEMENT_SPEED); + Main.cam.translate(0, MOVEMENT_SPEED); + } + Main.cam.update(); + } +} diff --git a/Collector/src/Character/Mouse.java b/Collector/src/Character/Mouse.java new file mode 100644 index 0000000..2f7f713 --- /dev/null +++ b/Collector/src/Character/Mouse.java @@ -0,0 +1,25 @@ +package Collector.Character; + +import Collector.Restrictions; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.Vector3; + +public class Mouse implements Restrictions { + Texture crosshair; + + public Mouse() { + this.crosshair = new Texture("assets/crosshair.png"); + } + + public Texture getCrosshair() { + return crosshair; + } + + public int getSelectedX(Vector3 mousePos) { + return ((int)(mousePos.x)>>4)<<4; + } + + public int getSelectedY(Vector3 mousePos) { + return ((int)(mousePos.y)>>4)<<4; + } +} diff --git a/Collector/src/Character/Player.cs b/Collector/src/Character/Player.cs new file mode 100644 index 0000000..e8daa86 --- /dev/null +++ b/Collector/src/Character/Player.cs @@ -0,0 +1,64 @@ +using Collector; + +public class Player : IRestrictions { + private static int X; + private static int Y; + //private string SpriteName; + //private TextureAtlas textureAtlas; + //private Animation animation; + private Inventory playerInventory; + + public Player(int x, int y) { + //Player location + Player.X = x< keyFrames = textureAtlas.findRegions(spriteName + "_Down"); + //float frameDuration = 1 / 4f; + //animation = new Animation<>(frameDuration, keyFrames); + } + + public static int getX() { + return X; + } + + public static int getY() { + return Y; + } + + public static void addX(int x){ + Player.X += x; + } + + public static void addY(int y){ + Player.Y += y; + } + + /* + public String getSpriteName() { + return spriteName; + } + + public Animation getAnimation() { + return animation; + } + + public void setAnimation(Animation animationTemp) { + animation = animationTemp; + } + + public void dispose(){ + //textureAtlas.dispose(); + } + + public TextureAtlas getTextureAtlas() { + return textureAtlas; + } + */ +} diff --git a/Collector/src/Dimension/Block.cs b/Collector/src/Dimension/Block.cs new file mode 100644 index 0000000..26acd57 --- /dev/null +++ b/Collector/src/Dimension/Block.cs @@ -0,0 +1,12 @@ + +public class Block { + private string name = null; + + public Block(string name) { + this.name = name; + } + + public string getName() { + return name; + } +} diff --git a/Collector/src/Dimension/BlockMaterials.cs b/Collector/src/Dimension/BlockMaterials.cs new file mode 100644 index 0000000..cea914b --- /dev/null +++ b/Collector/src/Dimension/BlockMaterials.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +namespace Collector.Dimension +{ + public class BlockMaterials { + public static Dictionary Materials = new Dictionary(); + //public static Dictionary Textures = new Dictionary<>(); + + //Private so the singleton can't be instantiated + private BlockMaterials() {} + + public static void create(){ + Materials.Add("grass",new Block("grass")); + Materials.Add("wood",new Block("wood")); + Materials.Add("water",new Block("water")); + Materials.Add("stone",new Block("stone")); + Materials.Add("snow",new Block("snow")); + Materials.Add("sand",new Block("sand")); + Materials.Add("air",new Block("air")); + Materials.Add("roof",new Block("roof")); + Materials.Add("wall",new Block("wall")); + /* + for (String s:BlockMaterials.Materials.keySet()) { + Textures.Add(s,new Texture("assets/" + s + ".png")); + } + */ + } + } +} diff --git a/Collector/src/Dimension/Chunks.cs b/Collector/src/Dimension/Chunks.cs new file mode 100644 index 0000000..41f0d14 --- /dev/null +++ b/Collector/src/Dimension/Chunks.cs @@ -0,0 +1,180 @@ +//https://www.redblobgames.com/maps/terrain-from-noise/ + +using System; +using System.Collections.Generic; +using Collector.ThirdPartyCode; + +namespace Collector.Dimension +{ + public class Chunks: IRestrictions { + public static Dictionary, Block> LoadedChunks = new Dictionary, Block>(); + public static Dictionary, Block> SavedChunks = new Dictionary, Block>(); + public static OpenSimplexNoise Gen1 = new OpenSimplexNoise(IRestrictions.Seed+ 1); + public static OpenSimplexNoise Gen2 = new OpenSimplexNoise(IRestrictions.Seed); + + public static void CreateStructures() { + var i = 10; + SetBlock(3 + i, 2,1,"wall"); + SetBlock(4 + i, 2,1,"wall"); + SetBlock(3 + i, 3,1, "roof"); + SetBlock(4 + i, 3,1,"roof"); + } + + public static void SetBlock(int x, int y,int z, String name) { + LoadedChunks.Add(new Tuple(x, y, z), BlockMaterials.Materials[name]); + SavedChunks.Add(new Tuple(x, y, z), BlockMaterials.Materials[name]); + } + + public static void PlaceBlock(int x, int y, String name){ + var triple = new Tuple(x, y, 1); + if (!Chunks.LoadedChunks[triple].getName().Equals("air")) return; + Chunks.LoadedChunks[triple] = BlockMaterials.Materials[name]; + Chunks.SavedChunks[triple] = BlockMaterials.Materials[name]; + } + + public static void RemoveBlock(int x, int y){ + var triple = new Tuple(x, y, 1); + if (Chunks.LoadedChunks[triple].getName().Equals("air")) return; + Chunks.LoadedChunks[triple] = BlockMaterials.Materials["air"]; + Chunks.SavedChunks[triple] = BlockMaterials.Materials["air"]; + } + + public static void UngenerateChunk(int x, int y) { + var startX = x << IRestrictions.ChunkShift; + var startY = y << IRestrictions.ChunkShift; + var endX = startX + IRestrictions.ChunkSize; + var endY = startY + IRestrictions.ChunkSize; + + //Going from start of selected chunk to end of selected chunk in x and y + for (var i = startX; i != endX; i++) { + for (var j = startY; j != endY; j++) { + LoadedChunks.Remove(new Tuple(i, j, 0)); + } + } + //Second Layer + for (var i = startX; i != endX; i++){ + for (var j = startY; j != endY; j++) { + var triple = new Tuple(i, j,1); + LoadedChunks.Remove(triple); + } + } + } + + public static void GenerateChunk(int x, int y) { + var startX = x << IRestrictions.ChunkShift; + var startY = y << IRestrictions.ChunkShift; + var endX = startX + IRestrictions.ChunkSize; + var endY = startY + IRestrictions.ChunkSize; + + //Going from start of selected chunk to end of selected chunk in x and y + for (var i = startX; i != endX; i++) { + for (var j = startY; j != endY; j++) { + var triple = new Tuple(i, j, 0); + if(SavedChunks[triple] != null){ + LoadedChunks.Add(triple,SavedChunks[triple]); + } + else { + LoadedChunks.Add(triple, GetTerrain(i, j)); + SavedChunks.Add(triple, GetTerrain(i,j)); + } + } + } + + //Second Layer + for (var i = startX; i != endX; i++){ + for (var j = startY; j != endY; j++) { + var triple = new Tuple(i, j,1); + LoadedChunks.Add(triple, GetBlocks(i,j,1)); + SavedChunks.Add(triple, GetBlocks(i,j,1)); + } + } + } + + private static Block GetBlocks(int x, int y, int z) { + return SavedChunks.GetValueOrDefault(new Tuple(x, y, z), new Block("air")); + } + + private static double Noise1(double nx, double ny) { + return Gen1.Evaluate(nx, ny) / 2 + 0.5; + } + + private static double Noise2(double nx, double ny) { + return Gen2.Evaluate(nx, ny) / 2 + 0.5; + } + + private static Block GetTerrain(int x, int y) { + const double scale = 0.01; + var nx = x * scale; + var ny = y * scale; + var elevation = (0.17 * Noise1(1 * nx, 1 * ny) + + 0.42 * Noise1(2 * nx, 2 * ny) + + 0.16 * Noise1(4 * nx, 4 * ny) + + 0.00 * Noise1(8 * nx, 8 * ny) + + 0.00 * Noise1(16 * nx, 16 * ny) + + 0.03 * Noise1(32 * nx, 32 * ny)); + elevation /= (0.17+0.42+0.16+0.00+0.00+0.03); + elevation = Math.Pow(elevation, 3.00); + var moisture = (1.00 * Noise2( 1 * nx, 1 * ny) + + 0.00 * Noise2( 2 * nx, 2 * ny) + + 1.00 * Noise2( 4 * nx, 4 * ny) + + 0.00 * Noise2( 8 * nx, 8 * ny) + + 0.00 * Noise2(16 * nx, 16 * ny) + + 0.00 * Noise2(32 * nx, 32 * ny)); + moisture /= (0.00+1.00+0.00+0.00+0.00+0.00); + + return GetBiomeBlock(moisture, elevation); + } + + private static Block GetBiomeBlock(double moisture, double elevation) { + var biome = GetBiome(moisture, elevation); + if (biome.Equals("Tundra")) return BlockMaterials.Materials["snow"]; + if (biome.Equals("Taiga")) return BlockMaterials.Materials["snow"]; + if (biome.Equals("Snow")) return BlockMaterials.Materials["snow"]; + + if (biome.Equals("Grassland")) return BlockMaterials.Materials["grass"]; + if (biome.Equals("Shrubland")) return BlockMaterials.Materials["grass"]; + if (biome.Equals("TemperateDeciduousForest")) return BlockMaterials.Materials["grass"]; + + if (biome.Equals("TemperateRainForest")) return BlockMaterials.Materials["grass"]; + if (biome.Equals("TropicalSeasonalForest")) return BlockMaterials.Materials["grass"]; + if (biome.Equals("TropicalForest")) return BlockMaterials.Materials["grass"]; + if (biome.Equals("TropicalRainForest")) return BlockMaterials.Materials["grass"]; + + if (biome.Equals("Beach")) return BlockMaterials.Materials["sand"]; + if (biome.Equals("Bare")) return BlockMaterials.Materials["sand"]; + if (biome.Equals("Scorched")) return BlockMaterials.Materials["sand"]; + if (biome.Equals("TemperateDesert")) return BlockMaterials.Materials["sand"]; + return biome.Equals("SubtropicalDesert") ? BlockMaterials.Materials["sand"] : BlockMaterials.Materials["water"]; + } + + private static string GetBiome(double moisture, double elevation) { + if (elevation < 0.1) return "Ocean"; + if (elevation < 0.12) return "Beach"; + + if (elevation > 0.8) { + if (moisture < 0.1) return "Scorched"; + if (moisture < 0.2) return "Bare"; + return moisture < 0.5 ? "Tundra" : "Snow"; + } + + if (elevation > 0.6) { + if (moisture < 0.33) return "TemperateDesert"; + return moisture < 0.66 ? "Shrubland" : "Taiga"; + } + + if (elevation > 0.3) { + if (moisture < 0.16) return "TemperateDesert"; + if (moisture < 0.50) return "Grassland"; + return moisture < 0.83 ? "TemperateDeciduousForest" : "TemperateRainForest"; + } + + if (moisture < 0.16) return "SubtropicalDesert"; + if (moisture < 0.33) return "Grassland"; + return moisture < 0.66 ? "TropicalSeasonalForest" : "TropicalRainForest"; + } + + public static bool IsEmpty(int x, int y){ + return LoadedChunks[new Tuple(x * 8, y * 8,0)] == null; + } + } +} diff --git a/Collector/src/Dimension/Inventory.cs b/Collector/src/Dimension/Inventory.cs new file mode 100644 index 0000000..8228ceb --- /dev/null +++ b/Collector/src/Dimension/Inventory.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using Collector.Dimension; + +public class Inventory { + private LinkedList inventory = new LinkedList(); + + public LinkedList GetInventory() { + return inventory; + } + + public void SetInventory(LinkedList inventory) { + this.inventory = inventory; + } + + public void AddItem(Block block){ + inventory.AddFirst((ItemStack) block); + } + + public void RemoveItem(ItemStack itemStack){ + inventory.Remove(itemStack); + } +} \ No newline at end of file diff --git a/Collector/src/Dimension/ItemStack.cs b/Collector/src/Dimension/ItemStack.cs new file mode 100644 index 0000000..de9c435 --- /dev/null +++ b/Collector/src/Dimension/ItemStack.cs @@ -0,0 +1,14 @@ + +namespace Collector.Dimension +{ + public class ItemStack: Block { + int value; + int quantity; + + public ItemStack(string name, int value, int quantity) : base(name) + { + this.value = value; + this.quantity = quantity; + } + } +} diff --git a/Collector/src/Dimension/World.cs b/Collector/src/Dimension/World.cs new file mode 100644 index 0000000..1e1de6f --- /dev/null +++ b/Collector/src/Dimension/World.cs @@ -0,0 +1,53 @@ +using Collector; +using Collector.Dimension; + +public class World { + public static void generateWorld(int x, int y) { + if (Chunks.IsEmpty(x, y)) { + Chunks.GenerateChunk(x, y); + } + } + + public static void ungenerateWorld(int x, int y) { + if (!Chunks.IsEmpty(x, y)) { + Chunks.UngenerateChunk(x, y); + } + } + + public static void loadChunks() { + for (var i = -(IRestrictions.RenderDistance); i < IRestrictions.RenderDistance; i++) { + for (var j = -(IRestrictions.RenderDistance); j < IRestrictions.RenderDistance; j++) { + generateWorld( + i + Player.getX() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize), + j + Player.getY() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize) + ); + } + } + } + + public static void unloadChunks() { + for (var i = -IRestrictions.RenderDistance; i < IRestrictions.RenderDistance+1; i++) { + //Down + ungenerateWorld( + Player.getX() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+i, + (Player.getY() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize))+3 + ); + //Up + ungenerateWorld( + Player.getX() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+i-1, + (Player.getY() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize))-4 + ); + //Right + ungenerateWorld( + Player.getX() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)-4, + (Player.getY() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize))+i + ); + //Left + ungenerateWorld( + Player.getX() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize)+3, + (Player.getY() / (IRestrictions.TileSize * IRestrictions.SuperChunkSize * IRestrictions.ChunkSize))+i + ); + } + + } +} diff --git a/Collector/src/Dimension/WorldRenderer.cs b/Collector/src/Dimension/WorldRenderer.cs new file mode 100644 index 0000000..b0b191d --- /dev/null +++ b/Collector/src/Dimension/WorldRenderer.cs @@ -0,0 +1,51 @@ +using Microsoft.Xna.Framework.Graphics; + +namespace Collector.Dimension +{ + public class WorldRenderer : IRestrictions { + //private Mouse mouse; + //private InputController inputController; + private Player _player; + +/* + public WorldRenderer(InputController inputController, Mouse mouse, Player player) { + this.inputController = inputController; + this.mouse = mouse; + this.player = player; + } +*/ + public void DrawWorld(SpriteBatch batch, int layer) + { + /* + foreach (var chunkpair in Chunks.LoadedChunks.Keys.Where(chunkpair => chunkpair.Item3 == layer)) + { + batch.draw( + //BlockMaterials.Textures[Chunks.LoadedChunks[chunkpair].getName()], + chunkpair.Item1 << IRestrictions.TileShift, + chunkpair.Item2 << IRestrictions.TileShift + ); + } + */ + } + +/* + private void mouseCrosshair(SpriteBatch batch) { + Vector3 mousePos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); + Main.cam.unproject(mousePos); + int x = mouse.getSelectedX(mousePos); + int y = mouse.getSelectedY(mousePos); + batch.draw(mouse.getCrosshair(), x, y); + } + + public void render(SpriteBatch batch, float timeSinceLastUpdate) { + //Higher means draws in a lower layer + drawWorld(batch,0); + batch.draw(player.getAnimation().getKeyFrame(timeSinceLastUpdate, true), Player.x, Player.y,TILE_SIZE,TILE_SIZE); + drawWorld(batch,1); + mouseCrosshair(batch); + inputController.handleInput(); + batch.setProjectionMatrix(Main.cam.combined); + } + */ + } +} diff --git a/Collector/src/ThirdPartyCode/OpenSimplexNoise.cs b/Collector/src/ThirdPartyCode/OpenSimplexNoise.cs new file mode 100644 index 0000000..61f08d8 --- /dev/null +++ b/Collector/src/ThirdPartyCode/OpenSimplexNoise.cs @@ -0,0 +1,452 @@ +/* OpenSimplex Noise in C# + * Ported from https://gist.github.com/KdotJPG/b1270127455a94ac5d19 + * and heavily refactored to improve performance. */ + +using System; +using System.Runtime.CompilerServices; + +namespace Collector.ThirdPartyCode +{ + public class OpenSimplexNoise + { + private const double STRETCH_2D = -0.211324865405187; //(1/Math.sqrt(2+1)-1)/2; + private const double STRETCH_3D = -1.0 / 6.0; //(1/Math.sqrt(3+1)-1)/3; + private const double STRETCH_4D = -0.138196601125011; //(1/Math.sqrt(4+1)-1)/4; + private const double SQUISH_2D = 0.366025403784439; //(Math.sqrt(2+1)-1)/2; + private const double SQUISH_3D = 1.0 / 3.0; //(Math.sqrt(3+1)-1)/3; + private const double SQUISH_4D = 0.309016994374947; //(Math.sqrt(4+1)-1)/4; + private const double NORM_2D = 1.0 / 47.0; + private const double NORM_3D = 1.0 / 103.0; + private const double NORM_4D = 1.0 / 30.0; + + private byte[] perm; + private byte[] perm2D; + private byte[] perm3D; + private byte[] perm4D; + + private static double[] gradients2D = new double[] + { + 5, 2, 2, 5, + -5, 2, -2, 5, + 5, -2, 2, -5, + -5, -2, -2, -5, + }; + + private static double[] gradients3D = + { + -11, 4, 4, -4, 11, 4, -4, 4, 11, + 11, 4, 4, 4, 11, 4, 4, 4, 11, + -11, -4, 4, -4, -11, 4, -4, -4, 11, + 11, -4, 4, 4, -11, 4, 4, -4, 11, + -11, 4, -4, -4, 11, -4, -4, 4, -11, + 11, 4, -4, 4, 11, -4, 4, 4, -11, + -11, -4, -4, -4, -11, -4, -4, -4, -11, + 11, -4, -4, 4, -11, -4, 4, -4, -11, + }; + + private static double[] gradients4D = + { + 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, + -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, 1, -1, 1, 1, 3, + 3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, + -3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3, + 3, 1, -1, 1, 1, 3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3, + -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, + 3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3, + -3, -1, -1, 1, -1, -3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3, + 3, 1, 1, -1, 1, 3, 1, -1, 1, 1, 3, -1, 1, 1, 1, -3, + -3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3, + 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, + -3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, + 3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3, + -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3, + 3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3, -1, 1, -1, -1, -3, + -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, + }; + + private static Contribution2[] lookup2D; + private static Contribution3[] lookup3D; + private static Contribution4[] lookup4D; + + static OpenSimplexNoise() + { + var base2D = new int[][] + { + new int[] { 1, 1, 0, 1, 0, 1, 0, 0, 0 }, + new int[] { 1, 1, 0, 1, 0, 1, 2, 1, 1 } + }; + var p2D = new int[] { 0, 0, 1, -1, 0, 0, -1, 1, 0, 2, 1, 1, 1, 2, 2, 0, 1, 2, 0, 2, 1, 0, 0, 0 }; + var lookupPairs2D = new int[] { 0, 1, 1, 0, 4, 1, 17, 0, 20, 2, 21, 2, 22, 5, 23, 5, 26, 4, 39, 3, 42, 4, 43, 3 }; + + var contributions2D = new Contribution2[p2D.Length / 4]; + for (var i = 0; i < p2D.Length; i += 4) + { + var baseSet = base2D[p2D[i]]; + Contribution2 previous = null, current = null; + for (var k = 0; k < baseSet.Length; k += 3) + { + current = new Contribution2(baseSet[k], baseSet[k + 1], baseSet[k + 2]); + if (previous == null) + { + contributions2D[i / 4] = current; + } + else + { + previous.Next = current; + } + previous = current; + } + current.Next = new Contribution2(p2D[i + 1], p2D[i + 2], p2D[i + 3]); + } + + lookup2D = new Contribution2[64]; + for (var i = 0; i < lookupPairs2D.Length; i += 2) + { + lookup2D[lookupPairs2D[i]] = contributions2D[lookupPairs2D[i + 1]]; + } + + + var base3D = new int[][] + { + new int[] { 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1 }, + new int[] { 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 1, 3, 1, 1, 1 }, + new int[] { 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 1 } + }; + var p3D = new int[] { 0, 0, 1, -1, 0, 0, 1, 0, -1, 0, 0, -1, 1, 0, 0, 0, 1, -1, 0, 0, -1, 0, 1, 0, 0, -1, 1, 0, 2, 1, 1, 0, 1, 1, 1, -1, 0, 2, 1, 0, 1, 1, 1, -1, 1, 0, 2, 0, 1, 1, 1, -1, 1, 1, 1, 3, 2, 1, 0, 3, 1, 2, 0, 1, 3, 2, 0, 1, 3, 1, 0, 2, 1, 3, 0, 2, 1, 3, 0, 1, 2, 1, 1, 1, 0, 0, 2, 2, 0, 0, 1, 1, 0, 1, 0, 2, 0, 2, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, 2, 0, 0, 0, 0, 1, 1, -1, 1, 2, 0, 0, 0, 0, 1, -1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, -1, 2, 3, 1, 1, 1, 2, 0, 0, 2, 2, 3, 1, 1, 1, 2, 2, 0, 0, 2, 3, 1, 1, 1, 2, 0, 2, 0, 2, 1, 1, -1, 1, 2, 0, 0, 2, 2, 1, 1, -1, 1, 2, 2, 0, 0, 2, 1, -1, 1, 1, 2, 0, 0, 2, 2, 1, -1, 1, 1, 2, 0, 2, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0 }; + var lookupPairs3D = new int[] { 0, 2, 1, 1, 2, 2, 5, 1, 6, 0, 7, 0, 32, 2, 34, 2, 129, 1, 133, 1, 160, 5, 161, 5, 518, 0, 519, 0, 546, 4, 550, 4, 645, 3, 647, 3, 672, 5, 673, 5, 674, 4, 677, 3, 678, 4, 679, 3, 680, 13, 681, 13, 682, 12, 685, 14, 686, 12, 687, 14, 712, 20, 714, 18, 809, 21, 813, 23, 840, 20, 841, 21, 1198, 19, 1199, 22, 1226, 18, 1230, 19, 1325, 23, 1327, 22, 1352, 15, 1353, 17, 1354, 15, 1357, 17, 1358, 16, 1359, 16, 1360, 11, 1361, 10, 1362, 11, 1365, 10, 1366, 9, 1367, 9, 1392, 11, 1394, 11, 1489, 10, 1493, 10, 1520, 8, 1521, 8, 1878, 9, 1879, 9, 1906, 7, 1910, 7, 2005, 6, 2007, 6, 2032, 8, 2033, 8, 2034, 7, 2037, 6, 2038, 7, 2039, 6 }; + + var contributions3D = new Contribution3[p3D.Length / 9]; + for (var i = 0; i < p3D.Length; i += 9) + { + var baseSet = base3D[p3D[i]]; + Contribution3 previous = null, current = null; + for (var k = 0; k < baseSet.Length; k += 4) + { + current = new Contribution3(baseSet[k], baseSet[k + 1], baseSet[k + 2], baseSet[k + 3]); + if (previous == null) + { + contributions3D[i / 9] = current; + } + else + { + previous.Next = current; + } + previous = current; + } + current.Next = new Contribution3(p3D[i + 1], p3D[i + 2], p3D[i + 3], p3D[i + 4]); + current.Next.Next = new Contribution3(p3D[i + 5], p3D[i + 6], p3D[i + 7], p3D[i + 8]); + } + + lookup3D = new Contribution3[2048]; + for (var i = 0; i < lookupPairs3D.Length; i += 2) + { + lookup3D[lookupPairs3D[i]] = contributions3D[lookupPairs3D[i + 1]]; + } + + var base4D = new int[][] + { + new int[] { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1 }, + new int[] { 3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 4, 1, 1, 1, 1 }, + new int[] { 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1 }, + new int[] { 3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1 } + }; + var p4D = new int[] { 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, -1, 0, 1, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, -1, 1, 0, 2, 1, 1, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 0, 2, 1, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 0, 2, 0, 1, 1, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 0, 2, 1, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 0, 2, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 0, 2, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 1, 4, 2, 1, 1, 0, 4, 1, 2, 1, 0, 4, 1, 1, 2, 0, 1, 4, 2, 1, 0, 1, 4, 1, 2, 0, 1, 4, 1, 1, 0, 2, 1, 4, 2, 0, 1, 1, 4, 1, 0, 2, 1, 4, 1, 0, 1, 2, 1, 4, 0, 2, 1, 1, 4, 0, 1, 2, 1, 4, 0, 1, 1, 2, 1, 2, 1, 1, 0, 0, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 1, 2, 1, 0, 1, 0, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 1, 2, 0, 1, 1, 0, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 1, 2, 1, 0, 0, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 1, 2, 0, 1, 0, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 1, 2, 0, 0, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 2, 0, 0, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 2, 0, 0, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 0, 2, 0, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 2, 0, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 2, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 0, 0, 2, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 0, 2, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 0, 2, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 0, 0, 0, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 0, 0, 0, 0, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 0, 0, 0, 0, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 0, 0, 0, 0, 0, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 0, 0, 0, 0, 0, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 0, 0, 0, 0, 0, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 2, 0, 0, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 0, 2, 0, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 2, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 0, 0, 2, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 0, 2, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 3, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 3, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, 1, -1, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 3, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 3, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, -1, 1, 3, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 3, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 3, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 3, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 3, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 3, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 4, 1, 1, 1, 1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 4, 1, 1, 1, 1, 3, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 4, 1, 1, 1, 1, 3, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 4, 1, 1, 1, 1, 3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 4, 1, 1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 4, 1, 1, 1, 1, 3, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, 1, -1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, 1, 1, -1, 3, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, 1, 1, -1, 3, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, -1, 1, 3, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, 1, -1, 1, 3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, 1, -1, 1, 3, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, -1, 1, 1, 3, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, -1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, -1, 1, 1, 3, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1 }; + var lookupPairs4D = new int[] { 0, 3, 1, 2, 2, 3, 5, 2, 6, 1, 7, 1, 8, 3, 9, 2, 10, 3, 13, 2, 16, 3, 18, 3, 22, 1, 23, 1, 24, 3, 26, 3, 33, 2, 37, 2, 38, 1, 39, 1, 41, 2, 45, 2, 54, 1, 55, 1, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 256, 3, 258, 3, 264, 3, 266, 3, 272, 3, 274, 3, 280, 3, 282, 3, 2049, 2, 2053, 2, 2057, 2, 2061, 2, 2081, 2, 2085, 2, 2089, 2, 2093, 2, 2304, 9, 2305, 9, 2312, 9, 2313, 9, 16390, 1, 16391, 1, 16406, 1, 16407, 1, 16422, 1, 16423, 1, 16438, 1, 16439, 1, 16642, 8, 16646, 8, 16658, 8, 16662, 8, 18437, 6, 18439, 6, 18469, 6, 18471, 6, 18688, 9, 18689, 9, 18690, 8, 18693, 6, 18694, 8, 18695, 6, 18696, 9, 18697, 9, 18706, 8, 18710, 8, 18725, 6, 18727, 6, 131128, 0, 131129, 0, 131130, 0, 131131, 0, 131132, 0, 131133, 0, 131134, 0, 131135, 0, 131352, 7, 131354, 7, 131384, 7, 131386, 7, 133161, 5, 133165, 5, 133177, 5, 133181, 5, 133376, 9, 133377, 9, 133384, 9, 133385, 9, 133400, 7, 133402, 7, 133417, 5, 133421, 5, 133432, 7, 133433, 5, 133434, 7, 133437, 5, 147510, 4, 147511, 4, 147518, 4, 147519, 4, 147714, 8, 147718, 8, 147730, 8, 147734, 8, 147736, 7, 147738, 7, 147766, 4, 147767, 4, 147768, 7, 147770, 7, 147774, 4, 147775, 4, 149509, 6, 149511, 6, 149541, 6, 149543, 6, 149545, 5, 149549, 5, 149558, 4, 149559, 4, 149561, 5, 149565, 5, 149566, 4, 149567, 4, 149760, 9, 149761, 9, 149762, 8, 149765, 6, 149766, 8, 149767, 6, 149768, 9, 149769, 9, 149778, 8, 149782, 8, 149784, 7, 149786, 7, 149797, 6, 149799, 6, 149801, 5, 149805, 5, 149814, 4, 149815, 4, 149816, 7, 149817, 5, 149818, 7, 149821, 5, 149822, 4, 149823, 4, 149824, 37, 149825, 37, 149826, 36, 149829, 34, 149830, 36, 149831, 34, 149832, 37, 149833, 37, 149842, 36, 149846, 36, 149848, 35, 149850, 35, 149861, 34, 149863, 34, 149865, 33, 149869, 33, 149878, 32, 149879, 32, 149880, 35, 149881, 33, 149882, 35, 149885, 33, 149886, 32, 149887, 32, 150080, 49, 150082, 48, 150088, 49, 150098, 48, 150104, 47, 150106, 47, 151873, 46, 151877, 45, 151881, 46, 151909, 45, 151913, 44, 151917, 44, 152128, 49, 152129, 46, 152136, 49, 152137, 46, 166214, 43, 166215, 42, 166230, 43, 166247, 42, 166262, 41, 166263, 41, 166466, 48, 166470, 43, 166482, 48, 166486, 43, 168261, 45, 168263, 42, 168293, 45, 168295, 42, 168512, 31, 168513, 28, 168514, 31, 168517, 28, 168518, 25, 168519, 25, 280952, 40, 280953, 39, 280954, 40, 280957, 39, 280958, 38, 280959, 38, 281176, 47, 281178, 47, 281208, 40, 281210, 40, 282985, 44, 282989, 44, 283001, 39, 283005, 39, 283208, 30, 283209, 27, 283224, 30, 283241, 27, 283256, 22, 283257, 22, 297334, 41, 297335, 41, 297342, 38, 297343, 38, 297554, 29, 297558, 24, 297562, 29, 297590, 24, 297594, 21, 297598, 21, 299365, 26, 299367, 23, 299373, 26, 299383, 23, 299389, 20, 299391, 20, 299584, 31, 299585, 28, 299586, 31, 299589, 28, 299590, 25, 299591, 25, 299592, 30, 299593, 27, 299602, 29, 299606, 24, 299608, 30, 299610, 29, 299621, 26, 299623, 23, 299625, 27, 299629, 26, 299638, 24, 299639, 23, 299640, 22, 299641, 22, 299642, 21, 299645, 20, 299646, 21, 299647, 20, 299648, 61, 299649, 60, 299650, 61, 299653, 60, 299654, 59, 299655, 59, 299656, 58, 299657, 57, 299666, 55, 299670, 54, 299672, 58, 299674, 55, 299685, 52, 299687, 51, 299689, 57, 299693, 52, 299702, 54, 299703, 51, 299704, 56, 299705, 56, 299706, 53, 299709, 50, 299710, 53, 299711, 50, 299904, 61, 299906, 61, 299912, 58, 299922, 55, 299928, 58, 299930, 55, 301697, 60, 301701, 60, 301705, 57, 301733, 52, 301737, 57, 301741, 52, 301952, 79, 301953, 79, 301960, 76, 301961, 76, 316038, 59, 316039, 59, 316054, 54, 316071, 51, 316086, 54, 316087, 51, 316290, 78, 316294, 78, 316306, 73, 316310, 73, 318085, 77, 318087, 77, 318117, 70, 318119, 70, 318336, 79, 318337, 79, 318338, 78, 318341, 77, 318342, 78, 318343, 77, 430776, 56, 430777, 56, 430778, 53, 430781, 50, 430782, 53, 430783, 50, 431000, 75, 431002, 72, 431032, 75, 431034, 72, 432809, 74, 432813, 69, 432825, 74, 432829, 69, 433032, 76, 433033, 76, 433048, 75, 433065, 74, 433080, 75, 433081, 74, 447158, 71, 447159, 68, 447166, 71, 447167, 68, 447378, 73, 447382, 73, 447386, 72, 447414, 71, 447418, 72, 447422, 71, 449189, 70, 449191, 70, 449197, 69, 449207, 68, 449213, 69, 449215, 68, 449408, 67, 449409, 67, 449410, 66, 449413, 64, 449414, 66, 449415, 64, 449416, 67, 449417, 67, 449426, 66, 449430, 66, 449432, 65, 449434, 65, 449445, 64, 449447, 64, 449449, 63, 449453, 63, 449462, 62, 449463, 62, 449464, 65, 449465, 63, 449466, 65, 449469, 63, 449470, 62, 449471, 62, 449472, 19, 449473, 19, 449474, 18, 449477, 16, 449478, 18, 449479, 16, 449480, 19, 449481, 19, 449490, 18, 449494, 18, 449496, 17, 449498, 17, 449509, 16, 449511, 16, 449513, 15, 449517, 15, 449526, 14, 449527, 14, 449528, 17, 449529, 15, 449530, 17, 449533, 15, 449534, 14, 449535, 14, 449728, 19, 449729, 19, 449730, 18, 449734, 18, 449736, 19, 449737, 19, 449746, 18, 449750, 18, 449752, 17, 449754, 17, 449784, 17, 449786, 17, 451520, 19, 451521, 19, 451525, 16, 451527, 16, 451528, 19, 451529, 19, 451557, 16, 451559, 16, 451561, 15, 451565, 15, 451577, 15, 451581, 15, 451776, 19, 451777, 19, 451784, 19, 451785, 19, 465858, 18, 465861, 16, 465862, 18, 465863, 16, 465874, 18, 465878, 18, 465893, 16, 465895, 16, 465910, 14, 465911, 14, 465918, 14, 465919, 14, 466114, 18, 466118, 18, 466130, 18, 466134, 18, 467909, 16, 467911, 16, 467941, 16, 467943, 16, 468160, 13, 468161, 13, 468162, 13, 468163, 13, 468164, 13, 468165, 13, 468166, 13, 468167, 13, 580568, 17, 580570, 17, 580585, 15, 580589, 15, 580598, 14, 580599, 14, 580600, 17, 580601, 15, 580602, 17, 580605, 15, 580606, 14, 580607, 14, 580824, 17, 580826, 17, 580856, 17, 580858, 17, 582633, 15, 582637, 15, 582649, 15, 582653, 15, 582856, 12, 582857, 12, 582872, 12, 582873, 12, 582888, 12, 582889, 12, 582904, 12, 582905, 12, 596982, 14, 596983, 14, 596990, 14, 596991, 14, 597202, 11, 597206, 11, 597210, 11, 597214, 11, 597234, 11, 597238, 11, 597242, 11, 597246, 11, 599013, 10, 599015, 10, 599021, 10, 599023, 10, 599029, 10, 599031, 10, 599037, 10, 599039, 10, 599232, 13, 599233, 13, 599234, 13, 599235, 13, 599236, 13, 599237, 13, 599238, 13, 599239, 13, 599240, 12, 599241, 12, 599250, 11, 599254, 11, 599256, 12, 599257, 12, 599258, 11, 599262, 11, 599269, 10, 599271, 10, 599272, 12, 599273, 12, 599277, 10, 599279, 10, 599282, 11, 599285, 10, 599286, 11, 599287, 10, 599288, 12, 599289, 12, 599290, 11, 599293, 10, 599294, 11, 599295, 10 }; + var contributions4D = new Contribution4[p4D.Length / 16]; + for (var i = 0; i < p4D.Length; i += 16) + { + var baseSet = base4D[p4D[i]]; + Contribution4 previous = null, current = null; + for (var k = 0; k < baseSet.Length; k += 5) + { + current = new Contribution4(baseSet[k], baseSet[k + 1], baseSet[k + 2], baseSet[k + 3], baseSet[k + 4]); + if (previous == null) + { + contributions4D[i / 16] = current; + } + else + { + previous.Next = current; + } + previous = current; + } + current.Next = new Contribution4(p4D[i + 1], p4D[i + 2], p4D[i + 3], p4D[i + 4], p4D[i + 5]); + current.Next.Next = new Contribution4(p4D[i + 6], p4D[i + 7], p4D[i + 8], p4D[i + 9], p4D[i + 10]); + current.Next.Next.Next = new Contribution4(p4D[i + 11], p4D[i + 12], p4D[i + 13], p4D[i + 14], p4D[i + 15]); + } + + lookup4D = new Contribution4[1048576]; + for (var i = 0; i < lookupPairs4D.Length; i += 2) + { + lookup4D[lookupPairs4D[i]] = contributions4D[lookupPairs4D[i + 1]]; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static int FastFloor(double x) + { + var xi = (int)x; + return x < xi ? xi - 1 : xi; + } + + public OpenSimplexNoise() + : this(DateTime.Now.Ticks) + { + } + + public OpenSimplexNoise(long seed) + { + perm = new byte[256]; + perm2D = new byte[256]; + perm3D = new byte[256]; + perm4D = new byte[256]; + var source = new byte[256]; + for (var i = 0; i < 256; i++) + { + source[i] = (byte)i; + } + seed = seed * 6364136223846793005L + 1442695040888963407L; + seed = seed * 6364136223846793005L + 1442695040888963407L; + seed = seed * 6364136223846793005L + 1442695040888963407L; + for (var i = 255; i >= 0; i--) + { + seed = seed * 6364136223846793005L + 1442695040888963407L; + var r = (int)((seed + 31) % (i + 1)); + if (r < 0) + { + r += (i + 1); + } + perm[i] = source[r]; + perm2D[i] = (byte)(perm[i] & 0x0E); + perm3D[i] = (byte)((perm[i] % 24) * 3); + perm4D[i] = (byte)(perm[i] & 0xFC); + source[r] = source[i]; + } + } + + public double Evaluate(double x, double y) + { + var stretchOffset = (x + y) * STRETCH_2D; + var xs = x + stretchOffset; + var ys = y + stretchOffset; + + var xsb = FastFloor(xs); + var ysb = FastFloor(ys); + + var squishOffset = (xsb + ysb) * SQUISH_2D; + var dx0 = x - (xsb + squishOffset); + var dy0 = y - (ysb + squishOffset); + + var xins = xs - xsb; + var yins = ys - ysb; + + var inSum = xins + yins; + + var hash = + (int)(xins - yins + 1) | + (int)(inSum) << 1 | + (int)(inSum + yins) << 2 | + (int)(inSum + xins) << 4; + + var c = lookup2D[hash]; + + var value = 0.0; + while (c != null) + { + var dx = dx0 + c.dx; + var dy = dy0 + c.dy; + var attn = 2 - dx * dx - dy * dy; + if (attn > 0) + { + var px = xsb + c.xsb; + var py = ysb + c.ysb; + + var i = perm2D[(perm[px & 0xFF] + py) & 0xFF]; + var valuePart = gradients2D[i] * dx + gradients2D[i + 1] * dy; + + attn *= attn; + value += attn * attn * valuePart; + } + c = c.Next; + } + return value * NORM_2D; + } + + public double Evaluate(double x, double y, double z) + { + var stretchOffset = (x + y + z) * STRETCH_3D; + var xs = x + stretchOffset; + var ys = y + stretchOffset; + var zs = z + stretchOffset; + + var xsb = FastFloor(xs); + var ysb = FastFloor(ys); + var zsb = FastFloor(zs); + + var squishOffset = (xsb + ysb + zsb) * SQUISH_3D; + var dx0 = x - (xsb + squishOffset); + var dy0 = y - (ysb + squishOffset); + var dz0 = z - (zsb + squishOffset); + + var xins = xs - xsb; + var yins = ys - ysb; + var zins = zs - zsb; + + var inSum = xins + yins + zins; + + var hash = + (int)(yins - zins + 1) | + (int)(xins - yins + 1) << 1 | + (int)(xins - zins + 1) << 2 | + (int)inSum << 3 | + (int)(inSum + zins) << 5 | + (int)(inSum + yins) << 7 | + (int)(inSum + xins) << 9; + + var c = lookup3D[hash]; + + var value = 0.0; + while (c != null) + { + var dx = dx0 + c.dx; + var dy = dy0 + c.dy; + var dz = dz0 + c.dz; + var attn = 2 - dx * dx - dy * dy - dz * dz; + if (attn > 0) + { + var px = xsb + c.xsb; + var py = ysb + c.ysb; + var pz = zsb + c.zsb; + + var i = perm3D[(perm[(perm[px & 0xFF] + py) & 0xFF] + pz) & 0xFF]; + var valuePart = gradients3D[i] * dx + gradients3D[i + 1] * dy + gradients3D[i + 2] * dz; + + attn *= attn; + value += attn * attn * valuePart; + } + + c = c.Next; + } + return value * NORM_3D; + } + + public double Evaluate(double x, double y, double z, double w) + { + var stretchOffset = (x + y + z + w) * STRETCH_4D; + var xs = x + stretchOffset; + var ys = y + stretchOffset; + var zs = z + stretchOffset; + var ws = w + stretchOffset; + + var xsb = FastFloor(xs); + var ysb = FastFloor(ys); + var zsb = FastFloor(zs); + var wsb = FastFloor(ws); + + var squishOffset = (xsb + ysb + zsb + wsb) * SQUISH_4D; + var dx0 = x - (xsb + squishOffset); + var dy0 = y - (ysb + squishOffset); + var dz0 = z - (zsb + squishOffset); + var dw0 = w - (wsb + squishOffset); + + var xins = xs - xsb; + var yins = ys - ysb; + var zins = zs - zsb; + var wins = ws - wsb; + + var inSum = xins + yins + zins + wins; + + var hash = + (int)(zins - wins + 1) | + (int)(yins - zins + 1) << 1 | + (int)(yins - wins + 1) << 2 | + (int)(xins - yins + 1) << 3 | + (int)(xins - zins + 1) << 4 | + (int)(xins - wins + 1) << 5 | + (int)inSum << 6 | + (int)(inSum + wins) << 8 | + (int)(inSum + zins) << 11 | + (int)(inSum + yins) << 14 | + (int)(inSum + xins) << 17; + + var c = lookup4D[hash]; + + var value = 0.0; + while (c != null) + { + var dx = dx0 + c.dx; + var dy = dy0 + c.dy; + var dz = dz0 + c.dz; + var dw = dw0 + c.dw; + var attn = 2 - dx * dx - dy * dy - dz * dz - dw * dw; + if (attn > 0) + { + var px = xsb + c.xsb; + var py = ysb + c.ysb; + var pz = zsb + c.zsb; + var pw = wsb + c.wsb; + + var i = perm4D[(perm[(perm[(perm[px & 0xFF] + py) & 0xFF] + pz) & 0xFF] + pw) & 0xFF]; + var valuePart = gradients4D[i] * dx + gradients4D[i + 1] * dy + gradients4D[i + 2] * dz + gradients4D[i + 3] * dw; + + attn *= attn; + value += attn * attn * valuePart; + } + + c = c.Next; + } + return value * NORM_4D; + } + + private class Contribution2 + { + public double dx, dy; + public int xsb, ysb; + public Contribution2 Next; + + public Contribution2(double multiplier, int xsb, int ysb) + { + dx = -xsb - multiplier * SQUISH_2D; + dy = -ysb - multiplier * SQUISH_2D; + this.xsb = xsb; + this.ysb = ysb; + } + } + + private class Contribution3 + { + public double dx, dy, dz; + public int xsb, ysb, zsb; + public Contribution3 Next; + + public Contribution3(double multiplier, int xsb, int ysb, int zsb) + { + dx = -xsb - multiplier * SQUISH_3D; + dy = -ysb - multiplier * SQUISH_3D; + dz = -zsb - multiplier * SQUISH_3D; + this.xsb = xsb; + this.ysb = ysb; + this.zsb = zsb; + } + } + + private class Contribution4 + { + public double dx, dy, dz, dw; + public int xsb, ysb, zsb, wsb; + public Contribution4 Next; + + public Contribution4(double multiplier, int xsb, int ysb, int zsb, int wsb) + { + dx = -xsb - multiplier * SQUISH_4D; + dy = -ysb - multiplier * SQUISH_4D; + dz = -zsb - multiplier * SQUISH_4D; + dw = -wsb - multiplier * SQUISH_4D; + this.xsb = xsb; + this.ysb = ysb; + this.zsb = zsb; + this.wsb = wsb; + } + } + } +} diff --git a/Collector/src/UI/GUI.cs b/Collector/src/UI/GUI.cs new file mode 100644 index 0000000..1e5e330 --- /dev/null +++ b/Collector/src/UI/GUI.cs @@ -0,0 +1,7 @@ + + +using Collector; + +public class GUI: IRestrictions { + +}