Minor cleanup path smoothing and entities scenes.
parent
42d7658d03
commit
efb934c441
|
@ -5,11 +5,11 @@ namespace GodotComponentTest.components;
|
||||||
public class InteractionComponent: Component
|
public class InteractionComponent: Component
|
||||||
{
|
{
|
||||||
[Signal]
|
[Signal]
|
||||||
delegate void InteractionStart(Entity owningEntity, Entity targetEntity);
|
delegate void InteractionStart(Spatial owningEntity, Spatial targetEntity);
|
||||||
|
|
||||||
[Signal]
|
[Signal]
|
||||||
delegate void InteractionEnd(Entity owningEntity, Entity targetEntity);
|
delegate void InteractionEnd(Spatial owningEntity, Spatial targetEntity);
|
||||||
|
|
||||||
public Entity OwningEntity;
|
public Spatial OwningEntity;
|
||||||
public Entity TargetEntity;
|
public Spatial TargetEntity;
|
||||||
}
|
}
|
|
@ -206,36 +206,43 @@ public class NavigationComponent : Spatial
|
||||||
public List<NavigationPoint> SmoothPath(KinematicBody body, List<NavigationPoint> navigationPoints)
|
public List<NavigationPoint> SmoothPath(KinematicBody body, List<NavigationPoint> navigationPoints)
|
||||||
{
|
{
|
||||||
Debug.Assert(navigationPoints.Count > 2);
|
Debug.Assert(navigationPoints.Count > 2);
|
||||||
|
|
||||||
|
Vector3 bodyGlobalTranslation = body.GlobalTranslation;
|
||||||
List<NavigationPoint> smoothedPath = new List<NavigationPoint>();
|
List<NavigationPoint> smoothedPath = new List<NavigationPoint>();
|
||||||
|
|
||||||
int startIndex = 0;
|
int startIndex = 0;
|
||||||
int endIndex = navigationPoints.Count > 1 ? 1 : 0;
|
int endIndex = navigationPoints.Count > 1 ? 1 : 0;
|
||||||
smoothedPath.Add(navigationPoints[startIndex]);
|
smoothedPath.Add(navigationPoints[startIndex]);
|
||||||
|
Vector3 startPoint = navigationPoints[startIndex].WorldPosition;
|
||||||
|
|
||||||
while (endIndex != navigationPoints.Count - 1)
|
while (endIndex != navigationPoints.Count - 1)
|
||||||
{
|
{
|
||||||
Vector3 startPoint = navigationPoints[startIndex].WorldPosition;
|
|
||||||
Vector3 endPoint = navigationPoints[endIndex].WorldPosition;
|
Vector3 endPoint = navigationPoints[endIndex].WorldPosition;
|
||||||
|
|
||||||
if (HasPathCollision(body, startPoint, endPoint))
|
if (HasPathCollision(body, startPoint, endPoint))
|
||||||
{
|
{
|
||||||
if (endIndex - startIndex == 1)
|
if (endIndex - startIndex == 1)
|
||||||
{
|
{
|
||||||
smoothedPath.Add(navigationPoints[endIndex]);
|
GD.Print("Aborting SmoothPath: input path passes through collision geometry.");
|
||||||
startIndex = endIndex;
|
body.GlobalTranslation = bodyGlobalTranslation;
|
||||||
|
return smoothedPath;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
smoothedPath.Add(navigationPoints[endIndex - 1]);
|
smoothedPath.Add(navigationPoints[endIndex - 1]);
|
||||||
startIndex = endIndex - 1;
|
startIndex = endIndex - 1;
|
||||||
|
startPoint = navigationPoints[startIndex].WorldPosition;
|
||||||
|
body.GlobalTranslation = startPoint;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
endIndex += 1;
|
endIndex += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
smoothedPath.Add(navigationPoints[endIndex]);
|
smoothedPath.Add(navigationPoints[endIndex]);
|
||||||
|
body.GlobalTranslation = bodyGlobalTranslation;
|
||||||
|
|
||||||
return smoothedPath;
|
return smoothedPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,11 +342,13 @@ public class NavigationComponent : Spatial
|
||||||
|
|
||||||
debugGeometry.GlobalTransform = Transform.Identity;
|
debugGeometry.GlobalTransform = Transform.Identity;
|
||||||
debugGeometry.Begin(Mesh.PrimitiveType.Lines);
|
debugGeometry.Begin(Mesh.PrimitiveType.Lines);
|
||||||
debugGeometry.SetColor(Colors.Pink);
|
Color pinkColor = Colors.Pink;
|
||||||
|
pinkColor.a = 1;
|
||||||
|
debugGeometry.SetColor(pinkColor);
|
||||||
debugGeometry.AddVertex(parentNode.GlobalTranslation + yOffset);
|
debugGeometry.AddVertex(parentNode.GlobalTranslation + yOffset);
|
||||||
debugGeometry.SetColor(Colors.Pink);
|
debugGeometry.SetColor(pinkColor);
|
||||||
debugGeometry.AddVertex(CurrentGoalPositionWorld + yOffset);
|
debugGeometry.AddVertex(CurrentGoalPositionWorld + yOffset);
|
||||||
debugGeometry.SetColor(Colors.Pink);
|
debugGeometry.SetColor(pinkColor);
|
||||||
|
|
||||||
debugGeometry.PushTranslated(CurrentGoalPositionWorld);
|
debugGeometry.PushTranslated(CurrentGoalPositionWorld);
|
||||||
debugGeometry.AddBox(Vector3.One * 1);
|
debugGeometry.AddBox(Vector3.One * 1);
|
||||||
|
@ -357,7 +366,7 @@ public class NavigationComponent : Spatial
|
||||||
previousPoint = parentNode.GlobalTranslation;
|
previousPoint = parentNode.GlobalTranslation;
|
||||||
foreach (NavigationPoint point in _smoothedPathWorldNavigationPoints)
|
foreach (NavigationPoint point in _smoothedPathWorldNavigationPoints)
|
||||||
{
|
{
|
||||||
debugGeometry.SetColor(Colors.Green);
|
debugGeometry.SetColor(new Color(0, 0, 1, 1));
|
||||||
debugGeometry.AddVertex(previousPoint + yOffset);
|
debugGeometry.AddVertex(previousPoint + yOffset);
|
||||||
debugGeometry.AddVertex(point.WorldPosition + yOffset);
|
debugGeometry.AddVertex(point.WorldPosition + yOffset);
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ using System.Diagnostics;
|
||||||
using GodotComponentTest.components;
|
using GodotComponentTest.components;
|
||||||
using GodotComponentTest.entities;
|
using GodotComponentTest.entities;
|
||||||
|
|
||||||
public class Tree : Entity, IInteractionInterface
|
public class Tree : StaticBody, IInteractionInterface
|
||||||
{
|
{
|
||||||
[Export] public float ChopDuration = 2;
|
[Export] public float ChopDuration = 2;
|
||||||
public bool IsMouseOver;
|
public bool IsMouseOver;
|
||||||
|
|
|
@ -106,11 +106,11 @@ tracks/1/keys = {
|
||||||
"times": PoolRealArray( 0, 0.05, 0.15, 0.3, 0.4, 0.5, 0.6 )
|
"times": PoolRealArray( 0, 0.05, 0.15, 0.3, 0.4, 0.5, 0.6 )
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Tree" type="KinematicBody"]
|
[node name="Tree" type="StaticBody"]
|
||||||
script = ExtResource( 3 )
|
script = ExtResource( 3 )
|
||||||
|
|
||||||
[node name="Geometry" type="MeshInstance" parent="."]
|
[node name="Geometry" type="MeshInstance" parent="."]
|
||||||
transform = Transform( 1.5, 0, 0, 0, 0.984722, 0.266325, 0, -0.177712, 1.47574, 0, 0, 0 )
|
transform = Transform( 1.5, 0, 0, 0, 0.984723, 0.266325, 0, -0.177712, 1.47574, 0, 0, 0 )
|
||||||
mesh = SubResource( 1 )
|
mesh = SubResource( 1 )
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||||
|
|
|
@ -12,6 +12,7 @@ radius = 0.4
|
||||||
transform = Transform( 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0 )
|
transform = Transform( 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0 )
|
||||||
|
|
||||||
[node name="StaticBody" type="StaticBody" parent="." index="1"]
|
[node name="StaticBody" type="StaticBody" parent="." index="1"]
|
||||||
|
collision_mask = 0
|
||||||
input_ray_pickable = false
|
input_ray_pickable = false
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape" parent="StaticBody" index="0"]
|
[node name="CollisionShape" type="CollisionShape" parent="StaticBody" index="0"]
|
|
@ -274,6 +274,7 @@ stretch_mode = 1
|
||||||
flip_v = true
|
flip_v = true
|
||||||
|
|
||||||
[node name="StreamContainer" parent="." instance=ExtResource( 1 )]
|
[node name="StreamContainer" parent="." instance=ExtResource( 1 )]
|
||||||
|
ShowHexTiles = true
|
||||||
|
|
||||||
[node name="Camera" parent="." instance=ExtResource( 3 )]
|
[node name="Camera" parent="." instance=ExtResource( 3 )]
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
[ext_resource path="res://icon.png" type="Texture" id=2]
|
[ext_resource path="res://icon.png" type="Texture" id=2]
|
||||||
[ext_resource path="res://materials/IslandColorRampShader.tres" type="Material" id=3]
|
[ext_resource path="res://materials/IslandColorRampShader.tres" type="Material" id=3]
|
||||||
[ext_resource path="res://materials/IslandHeightmapFalloffShader.tres" type="Material" id=4]
|
[ext_resource path="res://materials/IslandHeightmapFalloffShader.tres" type="Material" id=4]
|
||||||
[ext_resource path="res://assets/Environment/rockB.tscn" type="PackedScene" id=5]
|
[ext_resource path="res://entities/rockB.tscn" type="PackedScene" id=5]
|
||||||
[ext_resource path="res://assets/Environment/rockC.tscn" type="PackedScene" id=6]
|
[ext_resource path="res://entities/rockC.tscn" type="PackedScene" id=6]
|
||||||
[ext_resource path="res://assets/Environment/rockA.tscn" type="PackedScene" id=7]
|
[ext_resource path="res://entities/rockA.tscn" type="PackedScene" id=7]
|
||||||
[ext_resource path="res://assets/Environment/grassLarge.tscn" type="PackedScene" id=8]
|
[ext_resource path="res://assets/Environment/grassLarge.tscn" type="PackedScene" id=8]
|
||||||
[ext_resource path="res://entities/Tree.tscn" type="PackedScene" id=9]
|
[ext_resource path="res://entities/Tree.tscn" type="PackedScene" id=9]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue