asd
This commit is contained in:
100
Nodule.cs
100
Nodule.cs
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Godot;
|
||||
using GodotUtilities;
|
||||
using NodeWar.scripts;
|
||||
|
||||
namespace NodeWar;
|
||||
@@ -12,7 +11,7 @@ public enum NoduleType
|
||||
Connector,
|
||||
}
|
||||
|
||||
[Scene]
|
||||
[SceneTree]
|
||||
public partial class Nodule : Area2D
|
||||
{
|
||||
private const float GrowthFactor = 0.01f;
|
||||
@@ -20,6 +19,8 @@ public partial class Nodule : Area2D
|
||||
[Export]
|
||||
private NoduleType _noduleType;
|
||||
|
||||
private bool _growAreaInside;
|
||||
|
||||
[Export]
|
||||
public float MaxRadius { get; set; } = 360;
|
||||
|
||||
@@ -32,7 +33,7 @@ public partial class Nodule : Area2D
|
||||
[Export]
|
||||
public PackedScene RootScene { get; set; }
|
||||
|
||||
public List<Nodule> ConnectedNodules { get; set; } = [];
|
||||
public List<Nodule> ConnectedNodules { get; } = [];
|
||||
|
||||
[Signal]
|
||||
public delegate void NoduleBuiltEventHandler();
|
||||
@@ -40,23 +41,20 @@ public partial class Nodule : Area2D
|
||||
[Signal]
|
||||
public delegate void BuildingCanceledEventHandler();
|
||||
|
||||
[Node]
|
||||
private Node2D _gfx;
|
||||
|
||||
[Node]
|
||||
private CollisionShape2D _baseCollision;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
AreaEntered += OnAreaEntered;
|
||||
AreaExited += OnAreaExited;
|
||||
_.ConnectionArea.NoduleEntered += HandleNoduleEntered;
|
||||
_.ConnectionArea.NoduleExited += HandleNoduleExited;
|
||||
|
||||
switch (_noduleType)
|
||||
{
|
||||
case NoduleType.Base:
|
||||
_gfx.Scale = new Vector2(2, 2);
|
||||
Modulate = Colors.Red;
|
||||
_baseCollision.Disabled = false;
|
||||
|
||||
_.Gfx.Get().Scale = new Vector2(2, 2);
|
||||
_.BaseCollision.Disabled = false;
|
||||
|
||||
BuildNode();
|
||||
break;
|
||||
case NoduleType.Connector:
|
||||
break;
|
||||
@@ -67,44 +65,15 @@ public partial class Nodule : Area2D
|
||||
QueueRedraw();
|
||||
}
|
||||
|
||||
private void OnAreaEntered(Area2D area)
|
||||
{
|
||||
if (area is Nodule nodule)
|
||||
{
|
||||
if (nodule.BuildMode)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ConnectedNodules.Add(nodule);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnAreaExited(Area2D area)
|
||||
{
|
||||
if (area is Nodule nodule)
|
||||
{
|
||||
if (nodule.BuildMode)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ConnectedNodules.Remove(nodule);
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (BuildMode)
|
||||
{
|
||||
GlobalPosition = GetGlobalMousePosition();
|
||||
|
||||
if (Input.IsMouseButtonPressed(MouseButton.Left))
|
||||
if (Input.IsActionJustPressed(MyInput.MouseLeft))
|
||||
{
|
||||
EmitSignalNoduleBuilt();
|
||||
BuildMode = false;
|
||||
|
||||
MouseEntered += OnMouseEntered;
|
||||
BuildNode();
|
||||
}
|
||||
|
||||
if (Input.IsMouseButtonPressed(MouseButton.Right))
|
||||
@@ -116,6 +85,14 @@ public partial class Nodule : Area2D
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Input.IsActionJustPressed(MyInput.MouseLeft) && _growAreaInside && !BuildMode)
|
||||
{
|
||||
var newNodule = Instantiator.Instantiate<Nodule>();
|
||||
newNodule.BuildMode = true;
|
||||
GetParent().AddChild(newNodule);
|
||||
newNodule.GlobalPosition = GlobalPosition;
|
||||
}
|
||||
|
||||
Age += GrowthFactor * delta.ToFloat();
|
||||
Age = MathF.Min(Age, 1);
|
||||
|
||||
@@ -126,11 +103,6 @@ public partial class Nodule : Area2D
|
||||
QueueRedraw();
|
||||
}
|
||||
|
||||
private void OnMouseEntered()
|
||||
{
|
||||
GD.Print("Mouse entered");
|
||||
}
|
||||
|
||||
public override void _Draw()
|
||||
{
|
||||
foreach (var nodule in ConnectedNodules)
|
||||
@@ -159,11 +131,35 @@ public partial class Nodule : Area2D
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Notification(int what)
|
||||
private void HandleNoduleEntered(Nodule nodule)
|
||||
{
|
||||
if (what == NotificationSceneInstantiated)
|
||||
ConnectedNodules.Add(nodule);
|
||||
}
|
||||
|
||||
private void HandleNoduleExited(Nodule nodule)
|
||||
{
|
||||
ConnectedNodules.Remove(nodule);
|
||||
}
|
||||
|
||||
private void BuildNode()
|
||||
{
|
||||
EmitSignalNoduleBuilt();
|
||||
BuildMode = false;
|
||||
|
||||
// try connecting built nodule to connected ones
|
||||
foreach (var connectedNodule in ConnectedNodules)
|
||||
{
|
||||
WireNodes();
|
||||
BuildManager.Instance.RegisterConnection(this, connectedNodule);
|
||||
}
|
||||
|
||||
_.GrowArea.Get().MouseEntered += () =>
|
||||
{
|
||||
_growAreaInside = true;
|
||||
};
|
||||
|
||||
_.GrowArea.Get().MouseExited += () =>
|
||||
{
|
||||
_growAreaInside = false;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user