WIP: still fixing heighmap and colormap mismatch.
parent
e84fddf102
commit
55da2346d3
|
@ -15,6 +15,7 @@ public class Game : Spatial
|
||||||
private Label _numCoordsAddedLabel;
|
private Label _numCoordsAddedLabel;
|
||||||
private Label _numCoordsRemovedLabel;
|
private Label _numCoordsRemovedLabel;
|
||||||
private TextureRect _worldTextureRect;
|
private TextureRect _worldTextureRect;
|
||||||
|
private TextureRect _heightTextureRect;
|
||||||
private Button _generateWorldButton;
|
private Button _generateWorldButton;
|
||||||
|
|
||||||
// scene nodes
|
// scene nodes
|
||||||
|
@ -52,6 +53,7 @@ public class Game : Spatial
|
||||||
_numCoordsAddedLabel = GetNode<Label>("Control/HBoxContainer/GridContainer/num_coords_added_label");
|
_numCoordsAddedLabel = GetNode<Label>("Control/HBoxContainer/GridContainer/num_coords_added_label");
|
||||||
_numCoordsRemovedLabel = GetNode<Label>("Control/HBoxContainer/GridContainer/num_coords_removed_label");
|
_numCoordsRemovedLabel = GetNode<Label>("Control/HBoxContainer/GridContainer/num_coords_removed_label");
|
||||||
_worldTextureRect = (TextureRect)FindNode("WorldTextureRect");
|
_worldTextureRect = (TextureRect)FindNode("WorldTextureRect");
|
||||||
|
_heightTextureRect = (TextureRect)FindNode("HeightTextureRect");
|
||||||
_generateWorldButton = (Button)FindNode("WorldGenerateButton");
|
_generateWorldButton = (Button)FindNode("WorldGenerateButton");
|
||||||
|
|
||||||
// scene nodes
|
// scene nodes
|
||||||
|
@ -85,6 +87,7 @@ public class Game : Spatial
|
||||||
|
|
||||||
// update data
|
// update data
|
||||||
_worldTextureRect.RectSize = Vector2.One * _tileWorld.Size;
|
_worldTextureRect.RectSize = Vector2.One * _tileWorld.Size;
|
||||||
|
_heightTextureRect.RectSize = Vector2.One * _tileWorld.Size;
|
||||||
|
|
||||||
// connect signals
|
// connect signals
|
||||||
_streamContainerArea.Connect("input_event", this, nameof(OnAreaInputEvent));
|
_streamContainerArea.Connect("input_event", this, nameof(OnAreaInputEvent));
|
||||||
|
@ -244,13 +247,17 @@ public class Game : Spatial
|
||||||
public void OnWorldGenerated()
|
public void OnWorldGenerated()
|
||||||
{
|
{
|
||||||
GD.Print("Using new map");
|
GD.Print("Using new map");
|
||||||
ImageTexture new_world_texture = new ImageTexture();
|
ImageTexture newWorldTexture = new ImageTexture();
|
||||||
new_world_texture.CreateFromImage(_tileWorld.Colormap, (uint) (Texture.FlagsEnum.Mipmaps | Texture.FlagsEnum.Repeat));
|
newWorldTexture.CreateFromImage(_tileWorld.Colormap, (uint) (Texture.FlagsEnum.Mipmaps | Texture.FlagsEnum.Repeat));
|
||||||
|
ImageTexture newHeightTexture = new ImageTexture();
|
||||||
|
newHeightTexture.CreateFromImage(_tileWorld.Heightmap, (uint) (Texture.FlagsEnum.Mipmaps | Texture.FlagsEnum.Repeat));
|
||||||
|
|
||||||
_worldTextureRect.Texture = new_world_texture;
|
_worldTextureRect.Texture = newWorldTexture;
|
||||||
_tileMaterial.SetShaderParam("MapAlbedoTexture", new_world_texture);
|
_tileMaterial.SetShaderParam("MapAlbedoTexture", newWorldTexture);
|
||||||
_tileMaterial.SetShaderParam("TextureSize", (int)_tileWorld.Colormap.GetSize().x);
|
_tileMaterial.SetShaderParam("TextureSize", (int)_tileWorld.Colormap.GetSize().x);
|
||||||
|
|
||||||
|
_heightTextureRect.Texture = newHeightTexture;
|
||||||
|
|
||||||
_streamContainer.OnWorldGenerated();
|
_streamContainer.OnWorldGenerated();
|
||||||
|
|
||||||
// Reset player transform to offset 0,0 and at current height
|
// Reset player transform to offset 0,0 and at current height
|
||||||
|
|
|
@ -70,27 +70,34 @@ alignment = 2
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="Control/HBoxContainer"]
|
[node name="VBoxContainer" type="VBoxContainer" parent="Control/HBoxContainer"]
|
||||||
margin_right = 100.0
|
margin_right = 100.0
|
||||||
margin_bottom = 158.0
|
margin_bottom = 228.0
|
||||||
alignment = 2
|
alignment = 2
|
||||||
|
|
||||||
[node name="WorldTextureRect" type="TextureRect" parent="Control/HBoxContainer/VBoxContainer"]
|
[node name="WorldTextureRect" type="TextureRect" parent="Control/HBoxContainer/VBoxContainer"]
|
||||||
margin_top = 34.0
|
|
||||||
margin_right = 100.0
|
margin_right = 100.0
|
||||||
margin_bottom = 134.0
|
margin_bottom = 100.0
|
||||||
|
rect_min_size = Vector2( 100, 100 )
|
||||||
|
stretch_mode = 1
|
||||||
|
flip_v = true
|
||||||
|
|
||||||
|
[node name="HeightTextureRect" type="TextureRect" parent="Control/HBoxContainer/VBoxContainer"]
|
||||||
|
margin_top = 104.0
|
||||||
|
margin_right = 100.0
|
||||||
|
margin_bottom = 204.0
|
||||||
rect_min_size = Vector2( 100, 100 )
|
rect_min_size = Vector2( 100, 100 )
|
||||||
stretch_mode = 1
|
stretch_mode = 1
|
||||||
flip_v = true
|
flip_v = true
|
||||||
|
|
||||||
[node name="WorldGenerateButton" type="Button" parent="Control/HBoxContainer/VBoxContainer"]
|
[node name="WorldGenerateButton" type="Button" parent="Control/HBoxContainer/VBoxContainer"]
|
||||||
margin_top = 138.0
|
margin_top = 208.0
|
||||||
margin_right = 100.0
|
margin_right = 100.0
|
||||||
margin_bottom = 158.0
|
margin_bottom = 228.0
|
||||||
text = "Generate"
|
text = "Generate"
|
||||||
|
|
||||||
[node name="GridContainer" type="GridContainer" parent="Control/HBoxContainer"]
|
[node name="GridContainer" type="GridContainer" parent="Control/HBoxContainer"]
|
||||||
margin_left = 104.0
|
margin_left = 104.0
|
||||||
margin_right = 231.0
|
margin_right = 231.0
|
||||||
margin_bottom = 158.0
|
margin_bottom = 228.0
|
||||||
mouse_filter = 2
|
mouse_filter = 2
|
||||||
columns = 2
|
columns = 2
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ public class TileWorld : Spatial
|
||||||
delegate void WorldGenerated();
|
delegate void WorldGenerated();
|
||||||
|
|
||||||
// public members
|
// public members
|
||||||
public float Size = 125;
|
public float Size = 5;
|
||||||
public float HeightScale = 10;
|
public float HeightScale = 10.0f;
|
||||||
public Image Heightmap;
|
public Image Heightmap;
|
||||||
public Image Colormap;
|
public Image Colormap;
|
||||||
public int Seed = 0;
|
public int Seed = 0;
|
||||||
|
@ -70,12 +70,11 @@ public class TileWorld : Spatial
|
||||||
{
|
{
|
||||||
foreach (int coord_y in Enumerable.Range(0, (int)Size))
|
foreach (int coord_y in Enumerable.Range(0, (int)Size))
|
||||||
{
|
{
|
||||||
Colormap.SetPixel(coord_x, coord_y, new Color((float) coord_x, (float) coord_y, 0, 1));
|
// Colormap.SetPixel(coord_x, coord_y, new Color((float) coord_x, (float) coord_y, 0, 1));
|
||||||
float coord_to_height =
|
float coord_to_height =
|
||||||
(float)coord_y / Size * 0f;
|
(float)coord_y / Size * 0f;
|
||||||
// Heightmap.SetPixel(coord_x, coord_y, new Color(coord_to_height, 0, 0, 1));
|
|
||||||
|
|
||||||
if (coord_x == 3 && coord_y == 3)
|
if (coord_x == 1 && coord_y == 4)
|
||||||
{
|
{
|
||||||
coord_to_height = 1;
|
coord_to_height = 1;
|
||||||
}
|
}
|
||||||
|
@ -84,6 +83,12 @@ public class TileWorld : Spatial
|
||||||
}
|
}
|
||||||
|
|
||||||
Colormap.Unlock();
|
Colormap.Unlock();
|
||||||
|
|
||||||
|
ImageTexture imageTexture = new ImageTexture();
|
||||||
|
imageTexture.CreateFromImage(Heightmap);
|
||||||
|
imageTexture.Flags = 0;
|
||||||
|
_offscreenTextureRect.Texture = imageTexture;
|
||||||
|
Colormap.CopyFrom(imageTexture.GetData());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GenerateSimpleMap()
|
private void GenerateSimpleMap()
|
||||||
|
@ -135,7 +140,6 @@ public class TileWorld : Spatial
|
||||||
noiseGenerator.Lacunarity = 4;
|
noiseGenerator.Lacunarity = 4;
|
||||||
|
|
||||||
ImageTexture imageTexture = new ImageTexture();
|
ImageTexture imageTexture = new ImageTexture();
|
||||||
//Heightmap.Unlock();
|
|
||||||
Heightmap = noiseGenerator.GetSeamlessImage((int)Size);
|
Heightmap = noiseGenerator.GetSeamlessImage((int)Size);
|
||||||
imageTexture.CreateFromImage(Heightmap);
|
imageTexture.CreateFromImage(Heightmap);
|
||||||
imageTexture.Flags = 0;
|
imageTexture.Flags = 0;
|
||||||
|
@ -179,7 +183,7 @@ public class TileWorld : Spatial
|
||||||
|
|
||||||
public Vector2 OffsetToTextureCoord(Vector2 offsetCoord)
|
public Vector2 OffsetToTextureCoord(Vector2 offsetCoord)
|
||||||
{
|
{
|
||||||
Vector2 textureCoord = (offsetCoord - Vector2.One * Mathf.Floor(Size / 2)) % (Vector2.One * Size);
|
Vector2 textureCoord = (offsetCoord - Vector2.One * (Mathf.Floor(Size / 2) + 1)) % (Vector2.One * Size);
|
||||||
if (textureCoord[0] < 0)
|
if (textureCoord[0] < 0)
|
||||||
{
|
{
|
||||||
textureCoord[0] += Size;
|
textureCoord[0] += Size;
|
||||||
|
|
Loading…
Reference in New Issue