Beispiel #1
0
        private static void InitializeRailLibrary()
        {
            if (RailInitialized)
            {
                return;
            }
            RailInitialized = true;

            RailPieces   = FileUtils.LoadJsonListFromMultipleSources <RailPiece>(ContentPaths.rail_pieces, null, p => p.Name);
            RailPatterns = FileUtils.LoadJsonListFromMultipleSources <JunctionPattern>(ContentPaths.rail_patterns, null, p => p.Name);

            RailCombinationTable = new CombinationTable();
            RailCombinationTable.LoadConfiguration(ContentPaths.rail_combinations);

            foreach (var piece in RailPieces)
            {
                piece.ComputeConnections();
            }

            for (var i = 0; i < RailPatterns.Count; ++i)
            {
                RailPatterns[i].Icon = i;
            }

            RailChainPatterns = RailPatterns
                                // Only pieces with well defined entrance and exits can be used in chains.
                                .Where(p => p.Entrance != null && p.Exit != null)
                                // We need them in every orientation - not worried about redundancies.
                                .SelectMany(p =>
            {
                return(new JunctionPattern[]
                {
                    p.Rotate(PieceOrientation.North),
                    p.Rotate(PieceOrientation.East),
                    p.Rotate(PieceOrientation.South),
                    p.Rotate(PieceOrientation.West)
                });
            })
                                // We need them with the endpoints switched as well.
                                .SelectMany(p =>
            {
                return(new JunctionPattern[]
                {
                    p,
                    new JunctionPattern
                    {
                        Pieces = p.Pieces,
                        Entrance = p.Exit,
                        Exit = p.Entrance,
                    }
                });
            })
                                // And they must be positioned so the entrance is at 0,0
                                .Select(p =>
            {
                if (p.Entrance.Offset.X == 0 && p.Entrance.Offset.Y == 0)
                {
                    return(p);
                }
                else
                {
                    return new JunctionPattern
                    {
                        Entrance = new JunctionPortal
                        {
                            Direction = p.Entrance.Direction,
                            Offset    = Point.Zero
                        },
                        Exit = new JunctionPortal
                        {
                            Direction = p.Exit.Direction,
                            Offset    = new Point(p.Exit.Offset.X - p.Entrance.Offset.X, p.Exit.Offset.Y - p.Entrance.Offset.Y)
                        },
                        Pieces = p.Pieces.Select(piece =>
                                                 new JunctionPiece
                        {
                            RailPiece   = piece.RailPiece,
                            Orientation = piece.Orientation,
                            Offset      = new Point(piece.Offset.X - p.Entrance.Offset.X, piece.Offset.Y - p.Entrance.Offset.Y)
                        }).ToList(),
                    }
                };
            })
                                .ToList();

            Console.WriteLine("Loaded Rail Library.");
        }
Beispiel #2
0
	// Use this for initialization
	void Start () {
        table = this.GetComponentInParent<CombinationTable>();
	}