Remove init action from Spawn

main
copygirl 5 years ago
parent 4678938f9d
commit 550765796a
  1. 16
      src/CreativeBuilding.cs
  2. 3
      src/Network/NetworkSync.cs
  3. 20
      src/Scenes/Server.cs

@ -97,14 +97,16 @@ public class CreativeBuilding : Node2D
{
var player = server.GetPlayer(networkID);
// TODO: Test if starting block is valid.
foreach (var pos in GetBlockPositions(start, direction, length)) {
if (server.GetBlockAt(pos) != null) continue;
// FIXME: Test if there is a player in the way.
server.Spawn<Block>(block => {
block.Position = pos;
block.Color = player.Color.Blend(Color.FromHsv(0.0F, 0.0F, GD.Randf(), 0.2F));
});
// FIXME: Test if there is a player in the way.
var validLocations = GetBlockPositions(start, direction, length)
.Where(pos => server.GetBlockAt(pos) == null)
.ToArray();
foreach (var pos in validLocations) {
var block = server.Spawn<Block>();
block.Position = pos;
block.Color = player.Color.Blend(Color.FromHsv(0.0F, 0.0F, GD.Randf(), 0.2F));
}
}

@ -25,7 +25,7 @@ public static class NetworkSync
}
public static T Spawn<T>(this Server server, Action<T> init = null)
public static T Spawn<T>(this Server server)
where T : Node
{
if (!_infoByType.TryGetValue(typeof(T), out var info)) throw new ArgumentException(
@ -37,7 +37,6 @@ public static class NetworkSync
_statusByObject.Add(status.Object, status);
_dirtyObjects.Add(status);
server.GetNode(info.ContainerNodePath).AddChild(obj);
init?.Invoke(obj);
return obj;
}

@ -34,12 +34,12 @@ public class Server : Game
CustomMultiplayer.NetworkPeer = peer;
// Spawn default blocks.
for (var x = -6; x <= 6; x++)
this.Spawn<Block>(block => {
block.Position = new BlockPos(x, 3);
block.Color = Color.FromHsv(GD.Randf(), 0.1F, 1.0F);
block.Unbreakable = true;
});
for (var x = -6; x <= 6; x++) {
var block = this.Spawn<Block>();
block.Position = new BlockPos(x, 3);
block.Color = Color.FromHsv(GD.Randf(), 0.1F, 1.0F);
block.Unbreakable = true;
}
}
public void Stop()
@ -62,10 +62,10 @@ public class Server : Game
var networkID = new NetworkID(id);
NetworkSync.SendAllObjects(this, networkID);
var player = this.Spawn<Player>(p => {
p.Position = Vector2.Zero;
p.Color = Colors.Red;
});
var player = this.Spawn<Player>();
player.Position = Vector2.Zero;
player.Color = Colors.Red;
_playersByNetworkID.Add(networkID, player);
_networkIDByPlayer.Add(player, networkID);

Loading…
Cancel
Save