Remove init action from Spawn

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

@ -97,14 +97,16 @@ public class CreativeBuilding : Node2D
{ {
var player = server.GetPlayer(networkID); var player = server.GetPlayer(networkID);
// TODO: Test if starting block is valid. // 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. // FIXME: Test if there is a player in the way.
var validLocations = GetBlockPositions(start, direction, length)
.Where(pos => server.GetBlockAt(pos) == null)
.ToArray();
server.Spawn<Block>(block => { foreach (var pos in validLocations) {
var block = server.Spawn<Block>();
block.Position = pos; block.Position = pos;
block.Color = player.Color.Blend(Color.FromHsv(0.0F, 0.0F, GD.Randf(), 0.2F)); 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 where T : Node
{ {
if (!_infoByType.TryGetValue(typeof(T), out var info)) throw new ArgumentException( if (!_infoByType.TryGetValue(typeof(T), out var info)) throw new ArgumentException(
@ -37,7 +37,6 @@ public static class NetworkSync
_statusByObject.Add(status.Object, status); _statusByObject.Add(status.Object, status);
_dirtyObjects.Add(status); _dirtyObjects.Add(status);
server.GetNode(info.ContainerNodePath).AddChild(obj); server.GetNode(info.ContainerNodePath).AddChild(obj);
init?.Invoke(obj);
return obj; return obj;
} }

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

Loading…
Cancel
Save