Example #1
0
    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);
    }
Example #3
0
    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);
    }