public static bool MoveTrainForward(World model) { Logger.Log("Current: " + model.train.color + ", " + "Next: " + model.train.nextColor); Point trainPoint = PointService.GetPointInGrid(model, model.train.toGridPos); List <Connection> cons = ConnectionService.GetConnectionsForPointId(model, trainPoint.id); Connection matchingConnection = cons.Find(x => x.color == model.train.nextColor); if (matchingConnection == null) { matchingConnection = cons.Find(x => x.color == model.train.color); } else { model.train.color = model.train.nextColor; } if (matchingConnection == null) { Logger.Log("Game Over!"); return(false); } else { Point forwardPoint = PointService.GetPointWithId(model, matchingConnection.toPointId); model.train.fromGridPos = model.train.toGridPos; model.train.toGridPos = forwardPoint.gridPos; return(true); } }
public void Tick(World model) { IMDraw.Axis3D(Vector3.zero, Quaternion.identity, 1000f, 0.2f); IMDraw.Grid3D(Vector3.zero, Quaternion.identity, 5f, 5f, 10, 10, new Color(1f, 1f, 1f, 0.5f)); foreach (var p in model.points.Values) { if (model.debugSettings.isShowingNodes) { GraphicsService.DrawCube(p.pos.Vector3(), Vector3.one * 0.25f, Config.Colors.Blue); GraphicsService.DrawLabel(p.pos.Vector3(), Config.Colors.White, p.id.ToString() + "\n" + p.pos.ToString()); } float y = 0f; foreach (var c in p.colors) { y += 0.2f; GraphicsService.DrawCube( p.pos.Vector3() + new Vector3(0.2f, 0f, y - 0.2f), Vector3.one * 0.1f, ColorService.GetUnityColor(c) ); } } foreach (var c in model.connections.Values) { Point fromPoint = PointService.GetPointWithId(model, c.fromPointId); Point toPoint = PointService.GetPointWithId(model, c.toPointId); var color = ColorService.GetUnityColor(c.color); color.a = 0.75f; GraphicsService.DrawLine3D(fromPoint.pos.Vector3(), toPoint.pos.Vector3(), 0.1f, color); if (model.debugSettings.isShowingConnectionInfo) { GraphicsService.DrawLabel( Vector.Lerp(fromPoint.pos, toPoint.pos, 0.5f).Vector3(), Config.Colors.White, c.id.ToString() ); } } Color trainColor = ColorService.GetUnityColor(model.train.nextColor); GraphicsService.DrawCube(model.train.pos.Vector3(), Vector3.one * 0.5f, trainColor); GraphicsService.DrawLabel(model.train.pos.Vector3(), trainColor, "TRAIN" + "\n" + model.train.toGridPos); }
public static Connection CreateConnection(World model, int fromPointId, int toPointId, ColorType color) { Point fromPoint = PointService.GetPointWithId(model, fromPointId); Point toPoint = PointService.GetPointWithId(model, toPointId); Connection c = new Connection(); c.id = model.nextConnectionId; c.fromPointId = fromPointId; c.toPointId = toPointId; c.color = color; model.nextConnectionId++; model.connections.Add(c.id, c); return(c); }