Deleted junk

This commit is contained in:
Tiberiu Chibici 2015-06-17 12:06:48 +03:00
parent 6b304f3963
commit c40690eb85
85 changed files with 0 additions and 2442 deletions

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>10.0.20506</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace></RootNamespace>
<AssemblyName>Assembly-CSharp</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<BaseDirectory>Assets</BaseDirectory>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Temp\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;UNITY_4_6_1;UNITY_4_6;UNITY_STANDALONE_WIN;ENABLE_MICROPHONE;ENABLE_TEXTUREID_MAP;ENABLE_UNITYEVENTS;ENABLE_NEW_HIERARCHY ;ENABLE_AUDIO_FMOD;UNITY_STANDALONE;ENABLE_MONO;ENABLE_TERRAIN;ENABLE_SUBSTANCE;ENABLE_GENERICS;INCLUDE_WP8SUPPORT;ENABLE_MOVIES;ENABLE_WWW;ENABLE_IMAGEEFFECTS;ENABLE_4_6_FEATURES;INCLUDE_WP_BLUE_SUPPORT;ENABLE_WEBCAM;INCLUDE_METROSUPPORT;RENDER_SOFTWARE_CURSOR;ENABLE_NETWORK;ENABLE_PHYSICS;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_2D_PHYSICS;ENABLE_SHADOWS;ENABLE_AUDIO;ENABLE_NAVMESH_CARVING;ENABLE_DUCK_TYPING;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_PROFILER;UNITY_EDITOR;UNITY_EDITOR_WIN</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<NoWarn>0169</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Temp\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<NoWarn>0169</NoWarn>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.XML" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="UnityEngine">
<HintPath>E:/SDKs/Unity/Editor/Data/Managed/UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEditor">
<HintPath>E:/SDKs/Unity/Editor/Data/Managed/UnityEditor.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Assets\Scripts\HeightmapGenerator.cs" />
<Reference Include="UnityEngine.UI">
<HintPath>E:/SDKs/Unity/Editor/Data/UnityExtensions/Unity/GUISystem/4.6.1/UnityEngine.UI.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>10.0.20506</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace></RootNamespace>
<AssemblyName>Assembly-CSharp</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<BaseDirectory>Assets</BaseDirectory>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>Temp\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;UNITY_4_6_1;UNITY_4_6;UNITY_STANDALONE_WIN;ENABLE_MICROPHONE;ENABLE_TEXTUREID_MAP;ENABLE_UNITYEVENTS;ENABLE_NEW_HIERARCHY ;ENABLE_AUDIO_FMOD;UNITY_STANDALONE;ENABLE_MONO;ENABLE_TERRAIN;ENABLE_SUBSTANCE;ENABLE_GENERICS;INCLUDE_WP8SUPPORT;ENABLE_MOVIES;ENABLE_WWW;ENABLE_IMAGEEFFECTS;ENABLE_4_6_FEATURES;INCLUDE_WP_BLUE_SUPPORT;ENABLE_WEBCAM;INCLUDE_METROSUPPORT;RENDER_SOFTWARE_CURSOR;ENABLE_NETWORK;ENABLE_PHYSICS;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_2D_PHYSICS;ENABLE_SHADOWS;ENABLE_AUDIO;ENABLE_NAVMESH_CARVING;ENABLE_DUCK_TYPING;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_PROFILER;UNITY_EDITOR;UNITY_EDITOR_WIN</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<NoWarn>0169</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Temp\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<NoWarn>0169</NoWarn>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.XML" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="UnityEngine">
<HintPath>E:/SDKs/Unity/Editor/Data/Managed/UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEditor">
<HintPath>E:/SDKs/Unity/Editor/Data/Managed/UnityEditor.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Assets\Scripts\HeightmapGenerator.cs" />
<Reference Include="UnityEngine.UI">
<HintPath>E:/SDKs/Unity/Editor/Data/UnityExtensions/Unity/GUISystem/4.6.1/UnityEngine.UI.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -1,5 +0,0 @@
fileFormatVersion: 2
guid: 93097db3b30d5c948a1e1e02ef4bc6e9
folderAsset: yes
DefaultImporter:
userData:

View File

@ -1,27 +0,0 @@
using UnityEngine;
using System.Collections;
public class HeightmapGenerator : MonoBehaviour
{
public int Width = 100, Height = 100;
public float[,] Mesh;
// Use this for initialization
void Start ()
{
Mesh = new float[Width, Height];
// Initialize with perlin noise
for (int x = 0; x < Width; ++x)
for (int y = 0; y < Height; ++y)
Mesh [x, y] = Mathf.PerlinNoise (x, y);
// Generate mesh
}
// Update is called once per frame
void Update ()
{
}
}

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 8cbe14072ae596c4f84cea677f95f8d5
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -1 +0,0 @@
5;0;-1

Binary file not shown.

View File

@ -1,39 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2008
Project("{C212BE0A-BD2F-DD1E-2575-1152542237EB}") = "ProceduralTerrain", "Assembly-CSharp-vs.csproj", "{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = Assembly-CSharp.csproj
Policies = $0
$0.TextStylePolicy = $1
$1.inheritsSet = null
$1.scope = text/x-csharp
$0.CSharpFormattingPolicy = $2
$2.inheritsSet = Mono
$2.inheritsScope = text/x-csharp
$2.scope = text/x-csharp
$0.TextStylePolicy = $3
$3.FileWidth = 120
$3.TabWidth = 4
$3.EolMarker = Unix
$3.inheritsSet = Mono
$3.inheritsScope = text/plain
$3.scope = text/plain
EndGlobalSection
EndGlobal

View File

@ -1,39 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2008
Project("{C212BE0A-BD2F-DD1E-2575-1152542237EB}") = "ProceduralTerrain", "Assembly-CSharp.csproj", "{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C7E583A2-DC20-3E34-2B1C-B0E1D4550BDC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = Assembly-CSharp.csproj
Policies = $0
$0.TextStylePolicy = $1
$1.inheritsSet = null
$1.scope = text/x-csharp
$0.CSharpFormattingPolicy = $2
$2.inheritsSet = Mono
$2.inheritsScope = text/x-csharp
$2.scope = text/x-csharp
$0.TextStylePolicy = $3
$3.FileWidth = 120
$3.TabWidth = 4
$3.EolMarker = Unix
$3.inheritsSet = Mono
$3.inheritsScope = text/plain
$3.scope = text/plain
EndGlobalSection
EndGlobal

View File

@ -1,64 +0,0 @@
## Java
*.class
*.war
*.ear
hs_err_pid*
## GWT
war/
html/war/gwt_bree/
html/gwt-unitCache/
.apt_generated/
html/war/WEB-INF/deploy/
html/war/WEB-INF/classes/
.gwt/
gwt-unitCache/
www-test/
.gwt-tmp/
## Android Studio and Intellij and Android in general
android/libs/armeabi/
android/libs/armeabi-v7a/
android/libs/x86/
android/gen/
.idea/
*.ipr
*.iws
*.iml
out/
com_crashlytics_export_strings.xml
## Eclipse
.classpath
.project
.metadata
**/bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.externalToolBuilders/
*.launch
## NetBeans
**/nbproject/private/
build/
nbbuild/
dist/
nbdist/
nbactions.xml
nb-configuration.xml
## Gradle
.gradle
gradle-app.setting
build/
## OS Specific
.DS_Store

View File

@ -1,55 +0,0 @@
buildscript {
repositories {
mavenCentral()
}
dependencies {
}
}
allprojects {
apply plugin: "eclipse"
apply plugin: "idea"
version = '1.0'
ext {
appName = 'ProceduralTerrain'
gdxVersion = '1.5.0'
roboVMVersion = '1.0.0-beta-01'
box2DLightsVersion = '1.3'
ashleyVersion = '1.3.1'
aiVersion = '1.4.0'
}
repositories {
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url "https://oss.sonatype.org/content/repositories/releases/" }
}
}
project(":desktop") {
apply plugin: "java"
dependencies {
compile project(":core")
compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
compile "com.badlogicgames.gdx:gdx-tools:$gdxVersion"
}
}
project(":core") {
apply plugin: "java"
dependencies {
compile "com.badlogicgames.gdx:gdx:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
}
}
tasks.eclipse.doLast {
delete ".project"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

View File

@ -1,11 +0,0 @@
apply plugin: "java"
sourceCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
sourceSets.main.java.srcDirs = [ "src/" ]
eclipse.project {
name = appName + "-core"
}

View File

@ -1,197 +0,0 @@
package tibi.ProceduralTerrain.Business;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import tibi.ProceduralTerrain.Model.*;
import tibi.ProceduralTerrain.Model.Map;
import tibi.ProceduralTerrain.Noise.NoiseGenerator;
import tibi.ProceduralTerrain.Noise.SimplexNoiseGenerator;
import java.util.*;
/**
* Created by tibi on 1/20/15.
*/
public class MapGenerator
{
final float elevationNoiseScale = 0.004f;
final float waterNoiseScale = 0.009f;
NoiseGenerator noiseGenerator = new SimplexNoiseGenerator();
int w, h;
private class WaterQueueItem
{
Corner c;
int x, y;
WaterQueueItem(int x, int y, Corner c)
{
this.c = c;
this.x = x;
this.y = y;
}
}
private static Biome generateBiome()
{
int a = 4;//MathUtils.random(4);
switch (a)
{
case 0:
System.out.println("Generated biome: Mountain");
return Biome.MOUNTAIN;
case 1:
System.out.println("Generated biome: Snow");
return Biome.SNOW;
case 2:
System.out.println("Generated biome: Grassland");
return Biome.GRASSLAND;
default:
System.out.println("Generated biome: All");
return Biome.ALL;
}
}
private static void displaceCorners(Map map)
{
int w = map.width();
int h = map.height();
for (int x = 1; x < w; ++x)
for (int y = 1; y < h; ++y)
{
// Restrict corner movement to the 4 centers
Vector2 min = map.get(x - 1, y - 1).center;
Vector2 max = map.get(x, y).center;
// Move corner
map.corner(x, y).pos = new Vector2(
MathUtils.random(min.x, max.x),
MathUtils.random(min.y, max.y));
}
}
public Map generate(int w, int h)
{
this.w = w;
this.h = h;
// Create map
Map map = new Map(w, h);
map.biome = generateBiome();
//map.drawToFile("/home/tibi/Pictures/tmp/0_InitialMap");
// Displace corners
displaceCorners(map);
//map.drawToFile("/home/tibi/Pictures/tmp/1_DistortedMap");
// Generate water
generateWater(map);
//map.drawToFile("/home/tibi/Pictures/tmp/2_WithWater");
// Elevation
generateElevation(map);
//map.drawToFile("/home/tibi/Pictures/tmp/3_Elevation");
map.drawToFile("/home/tibi/Pictures/tmp/3_ElevationFancy", Map.DRAW_ELEVATION);
return map;
}
private void generateWater(Map map)
{
Queue<WaterQueueItem> waterCorners = new LinkedList<WaterQueueItem>();
float waterAmount = MathUtils.random(map.biome.minMoisture, map.biome.maxMoisture);
for (int x = 0; x < w; ++x)
for (int y = 0; y < h; ++y)
{
if (noiseGenerator.generate(x, y, 0, 1, waterNoiseScale, 4, .5f) <= waterAmount)
{
map.get(x, y).isWater = true;
// Set distance to water to corners
map.corner(x, y).distanceToWater = 0;
map.corner(x + 1, y).distanceToWater = 0;
map.corner(x, y + 1).distanceToWater = 0;
map.corner(x + 1, y + 1).distanceToWater = 0;
waterCorners.add(new WaterQueueItem(x, y, map.corner(x, y)));
waterCorners.add(new WaterQueueItem(x + 1, y, map.corner(x + 1, y)));
waterCorners.add(new WaterQueueItem(x, y + 1, map.corner(x, y + 1)));
waterCorners.add(new WaterQueueItem(x + 1, y + 1, map.corner(x + 1, y + 1)));
}
}
// Calculate distances to water
calculateDistanceToWater(map, waterCorners);
}
private void calculateDistanceToWater(Map map, Queue<WaterQueueItem> queue)
{
// Directions: N E S W
final int[] dx = {0, 1, 0, -1};
final int[] dy = {-1, 0, 1, 0};
while (!queue.isEmpty())
{
WaterQueueItem current = queue.remove();
for (int k = 0; k < 4; k++)
{
int newX = current.x + dx[k];
int newY = current.y + dy[k];
// Ignore if out of bounds
if (newX < 0 || newY < 0 || newX >= w + 1 || newY >= h + 1)
continue;
// Get corner to visit
Corner newC = map.corner(newX, newY);
// Visit if not visited, or if distance is smaller
if (newC.distanceToWater == Corner.INF_DIST || newC.distanceToWater > current.c.distanceToWater + 1)
{
newC.distanceToWater = current.c.distanceToWater + 1;
queue.add(new WaterQueueItem(newX, newY, newC));
}
}
}
}
private void generateElevation(Map map)
{
noiseGenerator.setOctaves(9);
noiseGenerator.setNonLinearPower(3f);
noiseGenerator.setScale(elevationNoiseScale);
final float waterImpact = 1f;
final float noiseImpact = 3f;
for (int x = 0; x < w + 1; ++x)
for (int y = 0; y < h + 1; ++y)
{
// No water body on map
if (map.corner(x, y).distanceToWater == Corner.INF_DIST)
{
map.corner(x, y).elevation = noiseGenerator.generate(x, y, map.biome.minHeight, map.biome.maxHeight);
}
else
{
float noiseVal = noiseGenerator.generate(x, y, 0, 1);
float distFromWater = (float)map.corner(x, y).distanceToWater / (float)Math.max(w, h);
distFromWater = (float)Math.pow(distFromWater, .3); // non-linear scale
float elevation = (noiseVal * noiseImpact + distFromWater * waterImpact) / (waterImpact + noiseImpact);
// Rescale value
map.corner(x, y).elevation = elevation * (map.biome.maxHeight - map.biome.minHeight) + map.biome.minHeight;
}
}
}
}

View File

@ -1,153 +0,0 @@
package tibi.ProceduralTerrain.Business;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.VertexAttributes;
import com.badlogic.gdx.graphics.g3d.Material;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.math.Vector3;
import tibi.ProceduralTerrain.Model.Cell;
import tibi.ProceduralTerrain.Model.Corner;
import tibi.ProceduralTerrain.Model.Map;
import tibi.ProceduralTerrain.Noise.NoiseGenerator;
import tibi.ProceduralTerrain.Noise.SimplexNoiseGenerator;
/**
* Created by tibi on 1/27/15.
*/
public class MapMeshGenerator
{
final int chunkSize = 20;
final int detailLevels = 1;
final float strength = 1;
final Material material = new Material();
NoiseGenerator noiseGenerator = new SimplexNoiseGenerator();
Map map;
Model[][][] chunks;
ModelInstance[][][] chunksInstances;
int chunksW;
int chunksH;
public MapMeshGenerator(Map map)
{
this.map = map;
chunksW = map.width() / chunkSize;
chunksH = map.height() / chunkSize;
chunks = new Model[detailLevels][chunksW][chunksH];
chunksInstances = new ModelInstance[detailLevels][chunksW][chunksH];
}
public ModelInstance get(int x, int y, int detailLevel)
{
if (chunksInstances[detailLevel][x][y] == null)
createInstance(x, y, detailLevel);
return chunksInstances[detailLevel][x][y];
}
private void createInstance(int x, int y, int detailLevel)
{
if (chunks[detailLevel][x][y] == null)
generateChunk(x, y, detailLevel);
chunksInstances[detailLevel][x][y] = new ModelInstance(chunks[detailLevel][x][y]);
}
private void generateChunk(int chunkX, int chunkY, int detailLevel)
{
ModelBuilder modelBuilder = new ModelBuilder();
modelBuilder.begin();
MeshPartBuilder builder = modelBuilder.part(
"chunk",
GL20.GL_TRIANGLES,
VertexAttributes.Usage.Position | VertexAttributes.Usage.ColorPacked, //| VertexAttributes.Usage.Normal | VertexAttributes.Usage.ColorPacked,
material);
for (int x = chunkX * chunkSize; x < (chunkX + 1) * chunkSize; x++)
for (int y = chunkY * chunkSize; y < (chunkY + 1) * chunkSize; y++)
{
Cell cell = map.get(x, y);
Vector3 pos00 = new Vector3(
cell.corner00.pos.x,
strength * cell.corner00.elevation,
cell.corner00.pos.y);
Vector3 pos01 = new Vector3(
cell.corner01.pos.x,
strength * cell.corner01.elevation,
cell.corner01.pos.y);
Vector3 pos10 = new Vector3(
cell.corner10.pos.x,
strength * cell.corner10.elevation,
cell.corner10.pos.y);
Vector3 pos11 = new Vector3(
cell.corner11.pos.x,
strength * cell.corner11.elevation,
cell.corner11.pos.y);
Color col00 = new Color();
Color col01 = new Color();
Color col10 = new Color();
Color col11 = new Color();
Color.argb8888ToColor(col00, Map.getColorOfTerrain(cell.corner00.elevation).getRGB());
Color.argb8888ToColor(col01, Map.getColorOfTerrain(cell.corner01.elevation).getRGB());
Color.argb8888ToColor(col10, Map.getColorOfTerrain(cell.corner10.elevation).getRGB());
Color.argb8888ToColor(col11, Map.getColorOfTerrain(cell.corner11.elevation).getRGB());
if (cell.isWater)
col00 = col01 = col10 = col11 = Color.BLUE;
// Calculate normals
Vector3 normal1 = getNormal(pos10, pos01, pos00);
Vector3 normal2 = getNormal(pos11, pos01, pos10);
// Create vertices
MeshPartBuilder.VertexInfo v1 = new MeshPartBuilder.VertexInfo().setPos(pos10).setNor(normal1).setCol(col10);
MeshPartBuilder.VertexInfo v2 = new MeshPartBuilder.VertexInfo().setPos(pos01).setNor(normal1).setCol(col01);
MeshPartBuilder.VertexInfo v3 = new MeshPartBuilder.VertexInfo().setPos(pos00).setNor(normal1).setCol(col00);
MeshPartBuilder.VertexInfo v4 = new MeshPartBuilder.VertexInfo().setPos(pos11).setNor(normal2).setCol(col11);
MeshPartBuilder.VertexInfo v5 = new MeshPartBuilder.VertexInfo().setPos(pos01).setNor(normal2).setCol(col01);
MeshPartBuilder.VertexInfo v6 = new MeshPartBuilder.VertexInfo().setPos(pos10).setNor(normal2).setCol(col10);
// Create triangles
// builder.triangle(v1, v2, v3);
// builder.triangle(v4, v5, v6);
builder.triangle(v6, v5, v4);
builder.triangle(v3, v2, v1);
}
chunks[detailLevel][chunkX][chunkY] = modelBuilder.end();
}
private Vector3 getNormal(Vector3 a, Vector3 b, Vector3 c)
{
Vector3 u = new Vector3(b).sub(a);
Vector3 v = new Vector3(c).sub(b);
return u.crs(v).nor();
}
public int getChunksW()
{
return chunksW;
}
public int getChunksH()
{
return chunksH;
}
}

View File

@ -1,21 +0,0 @@
package tibi.ProceduralTerrain.Business;
import tibi.ProceduralTerrain.Model.Terrain;
import tibi.ProceduralTerrain.Noise.NoiseGenerator;
/**
* Created by tibi on 1/19/15.
*/
public class TerrainGenerator
{
public Terrain generate(int w, int h, NoiseGenerator noiseGenerator)
{
Terrain terrain = new Terrain(w, h);
for (int x = 0; x < w; ++x)
for (int y = 0; y < h; ++y)
terrain.set(x, y, noiseGenerator.generate(x, y, 0, 1));
return terrain;
}
}

View File

@ -1,186 +0,0 @@
package tibi.ProceduralTerrain.Business;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.VertexAttributes;
import com.badlogic.gdx.graphics.g3d.Material;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector3;
import tibi.ProceduralTerrain.Model.Terrain;
/**
* Created by tibi on 1/19/15.
*/
public class TerrainMeshGenerator
{
float strength = 6f;
float gridDensity = .1f;
int chunkSize = 32;
public float getStrength()
{
return strength;
}
public void setStrength(float strength)
{
this.strength = strength;
}
public float getGridDensity()
{
return gridDensity;
}
public void setGridDensity(float gridDensity)
{
this.gridDensity = gridDensity;
}
public int getChunkSize()
{
return chunkSize;
}
public void setChunkSize(int chunkSize)
{
this.chunkSize = chunkSize;
}
public Model generate(Terrain terrain)
{
// Make terrain centered
float offsetX = -terrain.width() * gridDensity * .5f;
float offsetY = -terrain.height() * gridDensity * .5f;
ModelBuilder modelBuilder = new ModelBuilder();
modelBuilder.begin();
int chunksX = terrain.width() / chunkSize + ((terrain.width() % chunkSize > 0) ? 1 : 0);
int chunksY = terrain.height() / chunkSize + ((terrain.height() % chunkSize > 0) ? 1 : 0);
for (int chunkX = 0; chunkX < chunksX; chunkX++)
for (int chunkY = 0; chunkY < chunksY; chunkY++)
{
MeshPartBuilder builder = modelBuilder.part(
String.format("chunk_%d_%d", chunkX, chunkY),
GL20.GL_TRIANGLES, VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.ColorPacked,
new Material());
for(int x = chunkX * chunkSize; x < (chunkX + 1) * chunkSize && x < terrain.width() - 1; x++)
for (int y = chunkY * chunkSize; y < (chunkY + 1) * chunkSize && y < terrain.height() - 1; y++)
{
// Calculate corners
Vector3 pos00 = new Vector3(offsetX + x * gridDensity,
strength * terrain.get(x, y),
offsetY + y * gridDensity);
Vector3 pos01 = new Vector3(
offsetX + (x + 1) * gridDensity,
strength * terrain.get(x + 1, y),
offsetY + y * gridDensity);
Vector3 pos10 = new Vector3(
offsetX + x * gridDensity,
strength * terrain.get(x, y + 1),
offsetY + (y + 1) * gridDensity);
Vector3 pos11 = new Vector3(
offsetX + (x + 1) * gridDensity,
strength * terrain.get(x + 1, y + 1),
offsetY + (y + 1) * gridDensity);
// Calculate colors
Color col00 = getColor(terrain.get(x, y));
Color col01 = getColor(terrain.get(x + 1, y));
Color col10 = getColor(terrain.get(x, y + 1));
Color col11 = getColor(terrain.get(x + 1, y + 1));
// Calculate normals
Vector3 normal1 = getNormal(pos10, pos01, pos00);
Vector3 normal2 = getNormal(pos11, pos01, pos10);
// Create vertices
MeshPartBuilder.VertexInfo v1 = new MeshPartBuilder.VertexInfo().setPos(pos10).setNor(normal1).setCol(col10);
MeshPartBuilder.VertexInfo v2 = new MeshPartBuilder.VertexInfo().setPos(pos01).setNor(normal1).setCol(col01);
MeshPartBuilder.VertexInfo v3 = new MeshPartBuilder.VertexInfo().setPos(pos00).setNor(normal1).setCol(col00);
MeshPartBuilder.VertexInfo v4 = new MeshPartBuilder.VertexInfo().setPos(pos11).setNor(normal2).setCol(col11);
MeshPartBuilder.VertexInfo v5 = new MeshPartBuilder.VertexInfo().setPos(pos01).setNor(normal2).setCol(col01);
MeshPartBuilder.VertexInfo v6 = new MeshPartBuilder.VertexInfo().setPos(pos10).setNor(normal2).setCol(col10);
// Create triangles
builder.triangle(v1, v2, v3);
builder.triangle(v4, v5, v6);
}
}
// Finish mesh
return modelBuilder.end();
}
private Color lerp(Color a, Color b, float alpha)
{
return new Color(
MathUtils.lerp(a.r, b.r, alpha),
MathUtils.lerp(a.g, b.g, alpha),
MathUtils.lerp(a.b, b.b, alpha),
MathUtils.lerp(a.a, b.a, alpha));
}
private Color lerp2(Color a, Color b, float alpha)
{
return lerp(a, b, alpha * alpha);
}
private Color getColor(float height)
{
// OUT OF RANGE
if (height < 0 || height > 1)
return Color.RED;
final Color water = new Color(.3f, .5f, .8f, 0);
final Color beach = new Color(.75f, .78f, .05f, 0);
final Color grass = new Color(.1f, .6f, .3f, 0);
final Color dirt = new Color(.46f, .46f, 0, 0);
final Color stone = Color.GRAY;
final Color snow = Color.WHITE;
// Water
if (height < .3f)
return water;
// Blend between beach and grass
if (height < .4f)
return lerp2(beach, grass, (height - .3f) / .1f); // [0.3,0.4] to [0,1]
// Blend between grass and dirt
if (height < .6f)
return lerp2(grass, dirt, (height - .4f) / .2f); // [0.4,0.6] to [0,1]
// Blend between dirt and stone
if (height < .65f)
return lerp2(dirt, stone, (height - .6f) / .05f); // [0.6,0.65] to [0,1]
// Blend between stone and snow
if (height < .85f)
return lerp2(stone, snow, (height - .75f) / .2f); // [0.75,0.85] to [0,1]
// Snow
return Color.WHITE;
//return new Color(height, height, height, 1.0f);
}
private Vector3 getNormal(Vector3 a, Vector3 b, Vector3 c)
{
Vector3 u = new Vector3(b).sub(a);
Vector3 v = new Vector3(c).sub(b);
return u.crs(v).nor();
}
}

View File

@ -1,60 +0,0 @@
package tibi.ProceduralTerrain.Model;
import com.badlogic.gdx.math.MathUtils;
/**
* Created by tibi on 1/21/15.
*/
public class Biome
{
public float minMoisture; // Probability of rivers,
public float maxMoisture; // water bodies
public float minHeight; // Height range to generate
public float maxHeight; // in hundreds of meters
public float slope; // Maximum steepness of hills - in degrees
public float mountains; // Probability to generate steep mountains
public static Biome MOUNTAIN;
public static Biome SNOW;
public static Biome GRASSLAND;
public static Biome ALL;
static
{
MOUNTAIN = new Biome();
MOUNTAIN.minMoisture = .1f;
MOUNTAIN.maxMoisture = .3f;
MOUNTAIN.minHeight = 15f;
MOUNTAIN.maxHeight = 50f;
MOUNTAIN.slope = 45;
MOUNTAIN.mountains = 1f;
SNOW = new Biome();
SNOW.minMoisture = 0f;
SNOW.maxMoisture = .1f;
SNOW.minHeight = 0f;
SNOW.maxHeight = 10f;
SNOW.slope = 15;
SNOW.mountains = .1f;
GRASSLAND = new Biome();
GRASSLAND.minMoisture = .2f;
GRASSLAND.maxMoisture = .5f;
GRASSLAND.minHeight = .01f;
GRASSLAND.maxHeight = 7f;
GRASSLAND.slope = 12;
GRASSLAND.mountains = .05f;
ALL = new Biome();
ALL.minMoisture = .1f;
ALL.maxMoisture = .5f;
ALL.minHeight = 0f;
ALL.maxHeight = 50f;
ALL.slope = 45;
ALL.mountains = 1f;
}
}

View File

@ -1,31 +0,0 @@
package tibi.ProceduralTerrain.Model;
import com.badlogic.gdx.math.Vector2;
/**
* Created by tibi on 1/20/15.
*/
public class Cell
{
public Vector2 center;
public Corner corner00, corner01, corner10, corner11;
public boolean isWater;
public Cell()
{
center = new Vector2();
corner00 = new Corner();
corner01 = new Corner();
corner10 = new Corner();
corner11 = new Corner();
isWater = false;
}
public float elevation()
{
return .25f * corner00.elevation
+ .25f * corner01.elevation
+ .25f * corner10.elevation
+ .25f * corner11.elevation;
}
}

View File

@ -1,36 +0,0 @@
package tibi.ProceduralTerrain.Model;
import com.badlogic.gdx.math.Vector2;
/**
* Created by tibi on 1/20/15.
*/
public class Corner
{
public final static int INF_DIST = -1;
public Vector2 pos;
public float elevation;
public int distanceToWater;
public Corner()
{
this.pos = new Vector2();
this.elevation = 0;
this.distanceToWater = INF_DIST;
}
public Corner(Vector2 pos)
{
this.pos = pos;
this.elevation = 0;
this.distanceToWater = INF_DIST;
}
public Corner(float x, float y)
{
this.pos = new Vector2(x, y);
this.elevation = 0;
this.distanceToWater = INF_DIST;
}
}

View File

@ -1,204 +0,0 @@
package tibi.ProceduralTerrain.Model;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Vector;
/**
* Created by tibi on 1/20/15.
*/
public class Map
{
private Cell[][] grid;
private Corner[][] corners;
public Biome biome;
public Map(int w, int h)
{
// Generate grid
grid = new Cell[w][h];
corners = new Corner[w+1][h+1];
for (int x = 0; x < w + 1; ++x)
for (int y = 0; y < h + 1; ++y)
corners[x][y] = new Corner(x, y);
// Generate cells
for (int x = 0; x < w; ++x)
for (int y = 0; y < h; ++y)
{
grid[x][y] = new Cell();
grid[x][y].center = new Vector2(x + .5f, y + .5f);
grid[x][y].corner00 = corner(x, y);
grid[x][y].corner01 = corner(x, y + 1);
grid[x][y].corner10 = corner(x + 1, y);
grid[x][y].corner11 = corner(x + 1, y + 1);
}
}
public Cell get(int x, int y)
{
return grid[x][y];
}
public Corner corner(int x, int y)
{
return corners[x][y];
}
public int width()
{
return grid.length;
}
public int height()
{
return grid[0].length;
}
public final static int DRAW_ELEVATION = 0;
public final static int DRAW_GRID = 1;
public final static int DRAW_CENTERS = 2;
public void drawToFile(String filename)
{
drawToFile(filename, DRAW_ELEVATION | DRAW_GRID | DRAW_CENTERS);
}
public void drawToFile(String filename, int draw_options)
{
final int scale = 10;
// Draw map
BufferedImage img = new BufferedImage(scale * width(), scale * height(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = img.createGraphics();
// Draw cells
for (int x = 0; x < width(); ++x)
{
for (int y = 0; y < height(); ++y)
{
Cell c = get(x, y);
Vector2 c00 = new Vector2(c.corner00.pos).scl(scale);
Vector2 c01 = new Vector2(c.corner01.pos).scl(scale);
Vector2 c10 = new Vector2(c.corner10.pos).scl(scale);
Vector2 c11 = new Vector2(c.corner11.pos).scl(scale);
// Fill cell
Polygon p = new Polygon();
p.addPoint((int)c00.x, (int)c00.y);
p.addPoint((int)c01.x, (int)c01.y);
p.addPoint((int)c11.x, (int)c11.y);
p.addPoint((int) c10.x, (int)c10.y);
if (c.isWater)
{
g.setColor(Color.BLUE);
}
else
{
g.setColor(getColorOfTerrain(c.elevation()));
}
g.fillPolygon(p);
if ((draw_options & DRAW_CENTERS) > 0)
{
// Draw center
Vector2 center = new Vector2(c.center).scl(scale);
g.setColor(Color.RED);
g.fillOval((int)center.x - 2, (int)center.y - 2, 5, 5);
}
}
}
if ((draw_options & DRAW_GRID) > 0)
{
// Draw corners
for (int x = 0; x < width() + 1; ++x)
for (int y = 0; y < height() + 1; ++y)
{
Corner c = corner(x, y);
Vector2 cp = new Vector2(c.pos).scl(scale);
// Draw edges
g.setColor(Color.LIGHT_GRAY);
if (x > 0)
{
Vector2 cp1 = new Vector2(corner(x - 1, y).pos).scl(scale);
g.drawLine((int) cp.x, (int) cp.y, (int) cp1.x, (int) cp1.y);
}
if (y > 0)
{
Vector2 cp1 = new Vector2(corner(x, y - 1).pos).scl(scale);
g.drawLine((int) cp.x, (int) cp.y, (int) cp1.x, (int) cp1.y);
}
// Draw corner
g.setColor(Color.WHITE);
g.fillOval((int) cp.x - 2, (int) cp.y - 2, 5, 5);
// For debugging - draw text
// g.setColor(Color.YELLOW);
// g.drawString(String.format("%d", c.distanceToWater), cp.x, cp.y);
}
}
try
{
File outputFile = new File(filename + ".png");
ImageIO.write(img, "png", outputFile);
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static Color getColorOfTerrain(float height)
{
Color color1, color2;
float alpha;
if (height < 10f)
{
color1 = new Color(0x00ffa2);
color2 = new Color(0xFCD628);
alpha = height / 10f;
}
else if (height < 25f)
{
color1 = new Color(0xFCD628);
color2 = new Color(0x9C6713);
alpha = (height - 10f) / 15f;
}
else if (height < 50f)
{
color1 = new Color(0xaaaaaa);
color2 = new Color(0xffffff);
alpha = (height - 25f) / 25f;
}
else
{
color1 = color2 = Color.WHITE;
alpha = 1;
}
return new Color(
(int)MathUtils.lerp(color1.getRed(), color2.getRed(), alpha),
(int)MathUtils.lerp(color1.getGreen(), color2.getGreen(), alpha),
(int)MathUtils.lerp(color1.getBlue(), color2.getBlue(), alpha));
}
}

View File

@ -1,37 +0,0 @@
package tibi.ProceduralTerrain.Model;
/**
* Created by tibi on 1/19/15.
*/
public class Terrain
{
float[][] heightMap;
public Terrain(int w, int h)
{
heightMap = new float[w][h];
}
public float get(int x, int y)
{
if (heightMap[x][y] < .29f)
return .29f;
return heightMap[x][y];
}
public void set(int x, int y, float value)
{
heightMap[x][y] = value;
}
public int height()
{
return heightMap[0].length;
}
public int width()
{
return heightMap.length;
}
}

View File

@ -1,35 +0,0 @@
package tibi.ProceduralTerrain.Noise;
/**
* Created by tibi on 1/20/15.
*/
public class NeighbourNoiseGenerator extends NoiseGenerator
{
NoiseGenerator whiteNoiseGenerator;
public NeighbourNoiseGenerator()
{
whiteNoiseGenerator = new WhiteNoiseGenerator();
}
/**
* Generates noise in [-1,1] interval
*
* @param x X coordinate
* @param y Y coordinate
* @return Floating point value in [-1,1] interval
*/
@Override
protected float generateNoise(float x, float y)
{
final int neighbourCount = 5;
float total = 0;
for (float i = x - neighbourCount; i <= x + neighbourCount; ++i)
for (float j = y - neighbourCount; j <= y + neighbourCount; ++j)
total += whiteNoiseGenerator.generate(i, j);
return total / (float)Math.pow(neighbourCount * 2 + 1, 2);
}
}

View File

@ -1,193 +0,0 @@
package tibi.ProceduralTerrain.Noise;
import com.badlogic.gdx.math.MathUtils;
/**
* Created by tibi on 1/19/15.
*/
public abstract class NoiseGenerator
{
float scale = 1f;
float low = -1f, high = 1f;
float nonLinearPower = 1f;
int octaves = 1;
float persistence = .5f;
private float seedX, seedY;
public NoiseGenerator()
{
seedX = MathUtils.random(-1024f, 1024f);
seedY = MathUtils.random(-1024f, 1024f);
}
/**
* Generates noise in [-1,1] interval
* @param x X coordinate
* @param y Y coordinate
* @return Floating point value in [-1,1] interval
*/
protected abstract float generateNoise(float x, float y);
/**
* Generates noise
* @param x X coordinate
* @param y Y coordinate
* @param low Minimum value
* @param high Maximum value
* @param scale Scale
* @param octaves Number of octaves (layers)
* @param persistence Persistence (impact of each layer)
* @param nonLinearPower Non-linearity
* @return Noise value
*/
public float generate(float x, float y, float low, float high, float scale, int octaves, float persistence, float nonLinearPower)
{
float value = 0;
int freq = 1;
float amp = 1;
float maxAmp = 0;
for (int i = 0; i < octaves; ++i)
{
value += generateNoise(seedX + freq * scale * x, seedY + freq * scale * y) * amp;
maxAmp += amp;
amp *= persistence;
freq *= 2;
}
// Bring to [0,1]
value = (value / maxAmp) / 2f + .5f;
// Raise to non-linear power
value = (float)Math.pow(value, nonLinearPower);
// Bring to required interval
value = value * (high - low) + low;
// Done
return value;
}
/**
* Generates noise
* @param x X coordinate
* @param y Y coordinate
* @param low Minimum value
* @param high Maximum value
* @param scale Scale
* @param octaves Number of octaves (layers)
* @param persistence Persistence (impact of each layer)
* @return Noise value
*/
public float generate(float x, float y, float low, float high, float scale, int octaves, float persistence)
{
return generate(x, y, low, high, scale, octaves, persistence, nonLinearPower);
}
/**
* Generates noise
* @param x X coordinate
* @param y Y coordinate
* @param low Minimum value
* @param high Maximum value
* @param scale Scale
* @return Noise value
*/
public float generate(float x, float y, float low, float high, float scale)
{
return generate(x, y, low, high, scale, octaves, persistence, nonLinearPower);
}
/**
* Generates noise
* @param x X coordinate
* @param y Y coordinate
* @param low Minimum value
* @param high Maximum value
* @return Noise value
*/
public float generate(float x, float y, float low, float high)
{
return generate(x, y, low, high, scale, octaves, persistence, nonLinearPower);
}
/**
* Generates noise
* @param x X coordinate
* @param y Y coordinate
* @return Noise value
*/
public float generate(float x, float y)
{
return generate(x, y, low, high, scale, octaves, persistence, nonLinearPower);
}
/**
* Gets scale
* @return scale
*/
public float getScale()
{
return scale;
}
/**
* Sets scale
* @param scale Scale value
*/
public void setScale(float scale)
{
this.scale = scale;
}
public float getLow()
{
return low;
}
public void setLow(float low)
{
this.low = low;
}
public float getHigh()
{
return high;
}
public void setHigh(float high)
{
this.high = high;
}
public float getNonLinearPower()
{
return nonLinearPower;
}
public void setNonLinearPower(float nonLinearPower)
{
this.nonLinearPower = nonLinearPower;
}
public int getOctaves()
{
return octaves;
}
public void setOctaves(int octaves)
{
this.octaves = octaves;
}
public float getPersistence()
{
return persistence;
}
public void setPersistence(float persistence)
{
this.persistence = persistence;
}
}

View File

@ -1,461 +0,0 @@
/*
* A speed-improved simplex noise algorithm for 2D, 3D and 4D in Java.
*
* Based on example code by Stefan Gustavson (stegu@itn.liu.se).
* Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).
* Better rank ordering method by Stefan Gustavson in 2012.
*
* This could be speeded up even further, but it's useful as it is.
*
* Version 2012-03-09
*
* This code was placed in the public domain by its original author,
* Stefan Gustavson. You may use it as you see fit, but
* attribution is appreciated.
*
*/
package tibi.ProceduralTerrain.Noise;
public class SimplexNoiseGenerator extends NoiseGenerator
{
// Simplex noise in 2D, 3D and 4D
private static Grad grad3[] = {new Grad(1, 1, 0), new Grad(-1, 1, 0), new Grad(1, -1, 0), new Grad(-1, -1, 0),
new Grad(1, 0, 1), new Grad(-1, 0, 1), new Grad(1, 0, -1), new Grad(-1, 0, -1),
new Grad(0, 1, 1), new Grad(0, -1, 1), new Grad(0, 1, -1), new Grad(0, -1, -1)};
private static Grad grad4[] = {new Grad(0, 1, 1, 1), new Grad(0, 1, 1, -1), new Grad(0, 1, -1, 1), new Grad(0, 1,
-1, -1),
new Grad(0, -1, 1, 1), new Grad(0, -1, 1, -1), new Grad(0, -1, -1, 1), new Grad(0, -1, -1, -1),
new Grad(1, 0, 1, 1), new Grad(1, 0, 1, -1), new Grad(1, 0, -1, 1), new Grad(1, 0, -1, -1),
new Grad(-1, 0, 1, 1), new Grad(-1, 0, 1, -1), new Grad(-1, 0, -1, 1), new Grad(-1, 0, -1, -1),
new Grad(1, 1, 0, 1), new Grad(1, 1, 0, -1), new Grad(1, -1, 0, 1), new Grad(1, -1, 0, -1),
new Grad(-1, 1, 0, 1), new Grad(-1, 1, 0, -1), new Grad(-1, -1, 0, 1), new Grad(-1, -1, 0, -1),
new Grad(1, 1, 1, 0), new Grad(1, 1, -1, 0), new Grad(1, -1, 1, 0), new Grad(1, -1, -1, 0),
new Grad(-1, 1, 1, 0), new Grad(-1, 1, -1, 0), new Grad(-1, -1, 1, 0), new Grad(-1, -1, -1, 0)};
private static short p[] = {151, 160, 137, 91, 90, 15,
131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23,
190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33,
88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166,
77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244,
102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196,
135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123,
5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42,
223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9,
129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228,
251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107,
49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254,
138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180};
// To remove the need for index wrapping, double the permutation table length
private static short perm[] = new short[512];
private static short permMod12[] = new short[512];
static
{
for (int i = 0; i < 512; i++)
{
perm[i] = p[i & 255];
permMod12[i] = (short) (perm[i] % 12);
}
}
// Skewing and unskewing factors for 2, 3, and 4 dimensions
private static final double F2 = 0.5 * (Math.sqrt(3.0) - 1.0);
private static final double G2 = (3.0 - Math.sqrt(3.0)) / 6.0;
private static final double F3 = 1.0 / 3.0;
private static final double G3 = 1.0 / 6.0;
private static final double F4 = (Math.sqrt(5.0) - 1.0) / 4.0;
private static final double G4 = (5.0 - Math.sqrt(5.0)) / 20.0;
// This method is a *lot* faster than using (int)Math.floor(x)
private static int fastfloor(double x)
{
int xi = (int) x;
return x < xi ? xi - 1 : xi;
}
private static double dot(Grad g, double x, double y)
{
return g.x * x + g.y * y;
}
private static double dot(Grad g, double x, double y, double z)
{
return g.x * x + g.y * y + g.z * z;
}
private static double dot(Grad g, double x, double y, double z, double w)
{
return g.x * x + g.y * y + g.z * z + g.w * w;
}
// 2D simplex noise
public static double noise(double xin, double yin)
{
double n0, n1, n2; // Noise contributions from the three corners
// Skew the input space to determine which simplex cell we're in
double s = (xin + yin) * F2; // Hairy factor for 2D
int i = fastfloor(xin + s);
int j = fastfloor(yin + s);
double t = (i + j) * G2;
double X0 = i - t; // Unskew the cell origin back to (x,y) space
double Y0 = j - t;
double x0 = xin - X0; // The x,y distances from the cell origin
double y0 = yin - Y0;
// For the 2D case, the simplex shape is an equilateral triangle.
// Determine which simplex we are in.
int i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords
if (x0 > y0)
{
i1 = 1;
j1 = 0;
} // lower triangle, XY order: (0,0)->(1,0)->(1,1)
else
{
i1 = 0;
j1 = 1;
} // upper triangle, YX order: (0,0)->(0,1)->(1,1)
// A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and
// a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where
// c = (3-sqrt(3))/6
double x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords
double y1 = y0 - j1 + G2;
double x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords
double y2 = y0 - 1.0 + 2.0 * G2;
// Work out the hashed gradient indices of the three simplex corners
int ii = i & 255;
int jj = j & 255;
int gi0 = permMod12[ii + perm[jj]];
int gi1 = permMod12[ii + i1 + perm[jj + j1]];
int gi2 = permMod12[ii + 1 + perm[jj + 1]];
// Calculate the contribution from the three corners
double t0 = 0.5 - x0 * x0 - y0 * y0;
if (t0 < 0) n0 = 0.0;
else
{
t0 *= t0;
n0 = t0 * t0 * dot(grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient
}
double t1 = 0.5 - x1 * x1 - y1 * y1;
if (t1 < 0) n1 = 0.0;
else
{
t1 *= t1;
n1 = t1 * t1 * dot(grad3[gi1], x1, y1);
}
double t2 = 0.5 - x2 * x2 - y2 * y2;
if (t2 < 0) n2 = 0.0;
else
{
t2 *= t2;
n2 = t2 * t2 * dot(grad3[gi2], x2, y2);
}
// Add contributions from each corner to get the final noise value.
// The result is scaled to return values in the interval [-1,1].
return 70.0 * (n0 + n1 + n2);
}
// 3D simplex noise
public static double noise(double xin, double yin, double zin)
{
double n0, n1, n2, n3; // Noise contributions from the four corners
// Skew the input space to determine which simplex cell we're in
double s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D
int i = fastfloor(xin + s);
int j = fastfloor(yin + s);
int k = fastfloor(zin + s);
double t = (i + j + k) * G3;
double X0 = i - t; // Unskew the cell origin back to (x,y,z) space
double Y0 = j - t;
double Z0 = k - t;
double x0 = xin - X0; // The x,y,z distances from the cell origin
double y0 = yin - Y0;
double z0 = zin - Z0;
// For the 3D case, the simplex shape is a slightly irregular tetrahedron.
// Determine which simplex we are in.
int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords
int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords
if (x0 >= y0)
{
if (y0 >= z0)
{
i1 = 1;
j1 = 0;
k1 = 0;
i2 = 1;
j2 = 1;
k2 = 0;
} // X Y Z order
else if (x0 >= z0)
{
i1 = 1;
j1 = 0;
k1 = 0;
i2 = 1;
j2 = 0;
k2 = 1;
} // X Z Y order
else
{
i1 = 0;
j1 = 0;
k1 = 1;
i2 = 1;
j2 = 0;
k2 = 1;
} // Z X Y order
}
else
{ // x0<y0
if (y0 < z0)
{
i1 = 0;
j1 = 0;
k1 = 1;
i2 = 0;
j2 = 1;
k2 = 1;
} // Z Y X order
else if (x0 < z0)
{
i1 = 0;
j1 = 1;
k1 = 0;
i2 = 0;
j2 = 1;
k2 = 1;
} // Y Z X order
else
{
i1 = 0;
j1 = 1;
k1 = 0;
i2 = 1;
j2 = 1;
k2 = 0;
} // Y X Z order
}
// A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),
// a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and
// a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where
// c = 1/6.
double x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords
double y1 = y0 - j1 + G3;
double z1 = z0 - k1 + G3;
double x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords
double y2 = y0 - j2 + 2.0 * G3;
double z2 = z0 - k2 + 2.0 * G3;
double x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords
double y3 = y0 - 1.0 + 3.0 * G3;
double z3 = z0 - 1.0 + 3.0 * G3;
// Work out the hashed gradient indices of the four simplex corners
int ii = i & 255;
int jj = j & 255;
int kk = k & 255;
int gi0 = permMod12[ii + perm[jj + perm[kk]]];
int gi1 = permMod12[ii + i1 + perm[jj + j1 + perm[kk + k1]]];
int gi2 = permMod12[ii + i2 + perm[jj + j2 + perm[kk + k2]]];
int gi3 = permMod12[ii + 1 + perm[jj + 1 + perm[kk + 1]]];
// Calculate the contribution from the four corners
double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;
if (t0 < 0) n0 = 0.0;
else
{
t0 *= t0;
n0 = t0 * t0 * dot(grad3[gi0], x0, y0, z0);
}
double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;
if (t1 < 0) n1 = 0.0;
else
{
t1 *= t1;
n1 = t1 * t1 * dot(grad3[gi1], x1, y1, z1);
}
double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;
if (t2 < 0) n2 = 0.0;
else
{
t2 *= t2;
n2 = t2 * t2 * dot(grad3[gi2], x2, y2, z2);
}
double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;
if (t3 < 0) n3 = 0.0;
else
{
t3 *= t3;
n3 = t3 * t3 * dot(grad3[gi3], x3, y3, z3);
}
// Add contributions from each corner to get the final noise value.
// The result is scaled to stay just inside [-1,1]
return 32.0 * (n0 + n1 + n2 + n3);
}
// 4D simplex noise, better simplex rank ordering method 2012-03-09
public static double noise(double x, double y, double z, double w)
{
double n0, n1, n2, n3, n4; // Noise contributions from the five corners
// Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in
double s = (x + y + z + w) * F4; // Factor for 4D skewing
int i = fastfloor(x + s);
int j = fastfloor(y + s);
int k = fastfloor(z + s);
int l = fastfloor(w + s);
double t = (i + j + k + l) * G4; // Factor for 4D unskewing
double X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space
double Y0 = j - t;
double Z0 = k - t;
double W0 = l - t;
double x0 = x - X0; // The x,y,z,w distances from the cell origin
double y0 = y - Y0;
double z0 = z - Z0;
double w0 = w - W0;
// For the 4D case, the simplex is a 4D shape I won't even try to describe.
// To find out which of the 24 possible simplices we're in, we need to
// determine the magnitude ordering of x0, y0, z0 and w0.
// Six pair-wise comparisons are performed between each possible pair
// of the four coordinates, and the results are used to rank the numbers.
int rankx = 0;
int ranky = 0;
int rankz = 0;
int rankw = 0;
if (x0 > y0) rankx++;
else ranky++;
if (x0 > z0) rankx++;
else rankz++;
if (x0 > w0) rankx++;
else rankw++;
if (y0 > z0) ranky++;
else rankz++;
if (y0 > w0) ranky++;
else rankw++;
if (z0 > w0) rankz++;
else rankw++;
int i1, j1, k1, l1; // The integer offsets for the second simplex corner
int i2, j2, k2, l2; // The integer offsets for the third simplex corner
int i3, j3, k3, l3; // The integer offsets for the fourth simplex corner
// simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.
// Many values of c will never occur, since e.g. x>y>z>w makes x<z, y<w and x<w
// impossible. Only the 24 indices which have non-zero entries make any sense.
// We use a thresholding to set the coordinates in turn from the largest magnitude.
// Rank 3 denotes the largest coordinate.
i1 = rankx >= 3 ? 1 : 0;
j1 = ranky >= 3 ? 1 : 0;
k1 = rankz >= 3 ? 1 : 0;
l1 = rankw >= 3 ? 1 : 0;
// Rank 2 denotes the second largest coordinate.
i2 = rankx >= 2 ? 1 : 0;
j2 = ranky >= 2 ? 1 : 0;
k2 = rankz >= 2 ? 1 : 0;
l2 = rankw >= 2 ? 1 : 0;
// Rank 1 denotes the second smallest coordinate.
i3 = rankx >= 1 ? 1 : 0;
j3 = ranky >= 1 ? 1 : 0;
k3 = rankz >= 1 ? 1 : 0;
l3 = rankw >= 1 ? 1 : 0;
// The fifth corner has all coordinate offsets = 1, so no need to compute that.
double x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords
double y1 = y0 - j1 + G4;
double z1 = z0 - k1 + G4;
double w1 = w0 - l1 + G4;
double x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords
double y2 = y0 - j2 + 2.0 * G4;
double z2 = z0 - k2 + 2.0 * G4;
double w2 = w0 - l2 + 2.0 * G4;
double x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords
double y3 = y0 - j3 + 3.0 * G4;
double z3 = z0 - k3 + 3.0 * G4;
double w3 = w0 - l3 + 3.0 * G4;
double x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords
double y4 = y0 - 1.0 + 4.0 * G4;
double z4 = z0 - 1.0 + 4.0 * G4;
double w4 = w0 - 1.0 + 4.0 * G4;
// Work out the hashed gradient indices of the five simplex corners
int ii = i & 255;
int jj = j & 255;
int kk = k & 255;
int ll = l & 255;
int gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32;
int gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32;
int gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32;
int gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32;
int gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32;
// Calculate the contribution from the five corners
double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
if (t0 < 0) n0 = 0.0;
else
{
t0 *= t0;
n0 = t0 * t0 * dot(grad4[gi0], x0, y0, z0, w0);
}
double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
if (t1 < 0) n1 = 0.0;
else
{
t1 *= t1;
n1 = t1 * t1 * dot(grad4[gi1], x1, y1, z1, w1);
}
double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
if (t2 < 0) n2 = 0.0;
else
{
t2 *= t2;
n2 = t2 * t2 * dot(grad4[gi2], x2, y2, z2, w2);
}
double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
if (t3 < 0) n3 = 0.0;
else
{
t3 *= t3;
n3 = t3 * t3 * dot(grad4[gi3], x3, y3, z3, w3);
}
double t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
if (t4 < 0) n4 = 0.0;
else
{
t4 *= t4;
n4 = t4 * t4 * dot(grad4[gi4], x4, y4, z4, w4);
}
// Sum up and scale the result to cover the range [-1,1]
return 27.0 * (n0 + n1 + n2 + n3 + n4);
}
/**
* Generates noise in [-1,1] interval
*
* @param x X coordinate
* @param y Y coordinate
* @return Floating point value in [-1,1] interval
*/
@Override
protected float generateNoise(float x, float y)
{
return (float)noise(x, y);
}
// Inner class to speed upp gradient computations
// (array access is a lot slower than member access)
private static class Grad
{
double x, y, z, w;
Grad(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}
Grad(double x, double y, double z, double w)
{
this.x = x;
this.y = y;
this.z = z;
this.w = w;
}
}
}

View File

@ -1,44 +0,0 @@
package tibi.ProceduralTerrain.Noise;
import java.util.Random;
/**
* Created by tibi on 1/19/15.
*/
public class WhiteNoiseGenerator extends NoiseGenerator
{
Random random;
long seed;
public WhiteNoiseGenerator()
{
random = new Random();
seed = random.nextLong();
}
/**
* Generates noise in [-1,1] interval
*
* @param x X coordinate
* @param y Y coordinate
* @return Floating point value in [-1,1] interval
*/
@Override
protected float generateNoise(float x, float y)
{
// Generate seed
long seed = this.seed;
random.setSeed(this.seed);
seed += random.nextLong() * Float.floatToRawIntBits(x);
seed += random.nextLong() * Float.floatToRawIntBits(y);
random.setSeed(seed);
// Scale to [-1,1]
float value = (random.nextFloat() * 2f) - 1f;
// Done
return value;
}
}

View File

@ -1,86 +0,0 @@
package tibi.ProceduralTerrain;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.g3d.Environment;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
import tibi.ProceduralTerrain.Business.*;
import tibi.ProceduralTerrain.Model.Map;
import tibi.ProceduralTerrain.Model.Terrain;
import tibi.ProceduralTerrain.Noise.*;
public class ProceduralTerrainGenerator extends ApplicationAdapter
{
AssetManager assetManager;
ModelBatch modelBatch;
Environment environment;
PerspectiveCamera camera;
CameraInputController cameraInputController;
MapMeshGenerator mapMesh;
@Override
public void create()
{
assetManager = new AssetManager();
modelBatch = new ModelBatch();
environment = new Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 1f, 1f, 1f, 0f));
environment.add(new DirectionalLight().set(.4f, .8f, .8f, -1f, -.8f, -.2f));
camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.position.set(0f, 10f, 0f);
camera.lookAt(5f, 1f, 5f);
camera.near = .4f;
camera.far = 10000;
camera.update();
cameraInputController = new CameraInputController(camera);
Gdx.input.setInputProcessor(cameraInputController);
System.out.println("Generating map...");
// Generate map
MapGenerator mapGenerator = new MapGenerator();
Map map = mapGenerator.generate(256, 256);
System.out.println("Generating mesh...");
mapMesh = new MapMeshGenerator(map);
// Get once, to generate the mesh
for (int i = 0; i < mapMesh.getChunksW(); ++i)
for (int j = 0; j < mapMesh.getChunksH(); ++j)
mapMesh.get(i, j, 0);
System.out.println("Finished.");
}
@Override
public void render()
{
cameraInputController.update();
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
modelBatch.begin(camera);
for (int i = 0; i < mapMesh.getChunksW(); ++i)
for (int j = 0; j < mapMesh.getChunksH(); ++j)
modelBatch.render(mapMesh.get(i, j, 0), environment);
modelBatch.end();
}
}

View File

@ -1,46 +0,0 @@
apply plugin: "java"
sourceCompatibility = 1.6
sourceSets.main.java.srcDirs = [ "src/" ]
project.ext.mainClassName = "tibi.ProceduralTerrain.desktop.DesktopLauncher"
project.ext.assetsDir = new File("../core/assets");
task run(dependsOn: classes, type: JavaExec) {
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
standardInput = System.in
workingDir = project.assetsDir
ignoreExitValue = true
}
task dist(type: Jar) {
from files(sourceSets.main.output.classesDir)
from files(sourceSets.main.output.resourcesDir)
from {configurations.compile.collect {zipTree(it)}}
from files(project.assetsDir);
manifest {
attributes 'Main-Class': project.mainClassName
}
}
dist.dependsOn classes
eclipse {
project {
name = appName + "-desktop"
linkedResource name: 'assets', type: '2', location: 'PARENT-1-PROJECT_LOC/core/assets'
}
}
task afterEclipseImport(description: "Post processing after project generation", group: "IDE") {
doLast {
def classpath = new XmlParser().parse(file(".classpath"))
new Node(classpath, "classpathentry", [ kind: 'src', path: 'assets' ]);
def writer = new FileWriter(file(".classpath"))
def printer = new XmlNodePrinter(new PrintWriter(writer))
printer.setPreserveWhitespace(true)
printer.print(classpath)
}
}

View File

@ -1,12 +0,0 @@
package tibi.ProceduralTerrain.desktop;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import tibi.ProceduralTerrain.ProceduralTerrainGenerator;
public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
new LwjglApplication(new ProceduralTerrainGenerator(), config);
}
}

View File

@ -1,3 +0,0 @@
org.gradle.daemon=true
org.gradle.jvmargs=-Xms128m -Xmx512m
org.gradle.configureondemand=true

View File

@ -1,6 +0,0 @@
#Sat Sep 21 13:08:26 CEST 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-2.1-all.zip

View File

@ -1,164 +0,0 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

View File

@ -1,90 +0,0 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -1 +0,0 @@
include 'desktop', 'core'