Rozsvěcení a zhasínání světel, sprity pro místnosti, indikátory rozsvícených světel, po konci hry je hráč vrácen do hlavního menu
This commit is contained in:
parent
25a62af483
commit
55fd052072
27 changed files with 338 additions and 113 deletions
|
|
@ -51,6 +51,19 @@ public class CommandProcessor {
|
|||
Console.WriteLine($"C: Player {pid} {(door.Blocked ? "closed" : "opened")} door {(playerCommand.Args[0], playerCommand.Args[1])}");
|
||||
Server.SendUpdateToAll([GameEvent.TOGGLE_DOOR_REMOTE(pid, (playerCommand.Args[0], playerCommand.Args[1]), door.Blocked)]);
|
||||
break;
|
||||
case 4:
|
||||
bool lit = playerCommand.Args[1] == 1;
|
||||
MapTile lightTile = MapManager.Get(playerCommand.Args[0]);
|
||||
lightTile.Lit = lit;
|
||||
if (lit){
|
||||
GameLogic.PowerConsumers[lightTile] = (GameLogic.LightUsage, pid);
|
||||
}
|
||||
else{
|
||||
GameLogic.PowerConsumers.Remove(lightTile);
|
||||
}
|
||||
|
||||
Server.SendUpdateToAll([GameEvent.TOGGLE_LIGHT(pid, playerCommand.Args[0], lit)]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@ public abstract class RoamingPathfinder : Pathfinder{
|
|||
c => (!c.Blocked || c.Type == ConnectorType.DOOR_OFFICE) && tile != Enemy.Location,
|
||||
t =>
|
||||
(!distances.ContainsKey(t) || distances[t] > distances[tile]) &&
|
||||
(!Enemy.BlocksTile || EnemyManager.GetByLocation(t).All(e => !e.BlocksTile || e == Enemy)));
|
||||
(!Enemy.BlocksTile || EnemyManager.GetByLocation(t).All(e => !e.BlocksTile || e == Enemy)) &&
|
||||
Server.Players.All(p => p.Value.state.officeTileId != t.Id));
|
||||
|
||||
neighbours.ForEach(t => distances[t] = distances[tile] + tile.GetConnector(t)!.Value);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ public class GameLogic {
|
|||
|
||||
public static int OfficeDoorUsage{ get; set; } = 10;
|
||||
public static int RemoteDoorUsage{ get; set; } = 3;
|
||||
public static int LightUsage{ get; set; } = 2;
|
||||
|
||||
// public const int POWER_MAX = 1000;
|
||||
// public static int P1Power{ get; set; } = Power.MAX_POWER_VALUE;
|
||||
|
|
@ -46,12 +47,22 @@ public class GameLogic {
|
|||
connectorsConverted[i * 4 + 2] = (int)connectors[i].Type;
|
||||
connectorsConverted[i * 4 + 3] = connectors[i].Owner == null ? -1 : connectors[i].Owner.state.pid;
|
||||
}
|
||||
Server.SendPacket(new MapInitPacket{Connectors = connectorsConverted, UpsideDown = false}, Server.P1.peer);
|
||||
Server.SendPacket(new MapInitPacket{Connectors = connectorsConverted, UpsideDown = true}, Server.P2.peer);
|
||||
|
||||
List<int> p1Tiles = new();
|
||||
List<int> p2Tiles = new();
|
||||
List<int> neutralTiles = new();
|
||||
foreach (var tile in MapManager.GetAllTiles()){
|
||||
if(tile.Owner == null) neutralTiles.Add(tile.Id);
|
||||
else if(tile.Owner == Server.P1) p1Tiles.Add(tile.Id);
|
||||
else if(tile.Owner == Server.P2) p2Tiles.Add(tile.Id);
|
||||
}
|
||||
|
||||
Server.SendPacket(new MapInitPacket{Connectors = connectorsConverted, UpsideDown = false, YourTiles = p1Tiles.ToArray(), OpponentTiles = p2Tiles.ToArray(), LitTiles = neutralTiles.ToArray()}, Server.P1.peer);
|
||||
Server.SendPacket(new MapInitPacket{Connectors = connectorsConverted, UpsideDown = true, YourTiles = p2Tiles.ToArray(), OpponentTiles = p1Tiles.ToArray(), LitTiles = neutralTiles.ToArray()}, Server.P2.peer);
|
||||
|
||||
EnemyManager.AddEnemy(new LurkEnemy(0)).Spawn(MapManager.Get(12));
|
||||
EnemyManager.AddEnemy(new NekoEnemy(0)).Spawn(MapManager.Get(2));
|
||||
EnemyManager.AddEnemy(new SpotEnemy(0)).Spawn(MapManager.Get(12));
|
||||
EnemyManager.AddEnemy(new LurkEnemy(0)).Spawn(MapManager.Get(12));
|
||||
EnemyManager.AddEnemy(new NekoEnemy(10)).Spawn(MapManager.Get(2));
|
||||
|
||||
Thread.Sleep(3000);
|
||||
secondCycleTimer.Start();
|
||||
|
|
@ -109,6 +120,9 @@ public class GameLogic {
|
|||
foreach (var door in MapManager.GetDoors(player)){
|
||||
door.Blocked = false;
|
||||
}
|
||||
foreach (var tile in MapManager.GetAllTiles().Where(t => t.Owner == player)){
|
||||
tile.Lit = false;
|
||||
}
|
||||
PowerConsumers.Where(c => c.Value.pid == player.state.pid).ToList().ForEach(c => PowerConsumers.Remove(c.Key));
|
||||
Server.SendUpdateToAll([GameEvent.POWER_OUT(player.state.pid)]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,7 +73,16 @@ public static class MapManager {
|
|||
|
||||
return connectors.ToArray();
|
||||
}
|
||||
|
||||
|
||||
public static MapTile[] GetAllTiles() {
|
||||
List<MapTile> tiles = new();
|
||||
|
||||
foreach (var tile in map){
|
||||
tiles.Add(tile);
|
||||
}
|
||||
|
||||
return tiles.ToArray();
|
||||
}
|
||||
|
||||
public const int ID_X_OFFSET = 5; // map grid height
|
||||
public static int CoordsToId(int x, int y) => x * ID_X_OFFSET + y;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue