public override void SetSprite(TypeRailWay type)
 {
     for (int i = 0; i < spriteStorage.railSprites.Length; i++)
     {
         if (type == spriteStorage.railSprites[i].type)
         {
             spriteRend.sprite = spriteStorage.railSprites[i].sprite;
             return;
         }
     }
     Debug.Log("Error. Dont found sprite type - " + type.ToString());
 }
        public override RailWay CreateRailWay(Tile tile)
        {
            RailWay rail;

            if (tile.isStation)
            {
                rail = stationPool.RealeseObject().GetComponent <RailWay>();
                rail.SetSprite(TypeRailWay.Station);
            }
            else
            {
                rail = railPool.RealeseObject().GetComponent <RailWay>();
                TypeRailWay railType   = ChooseSpriteByLinks(tile.links);
                int         railDegree = GetRotateDegreeByLinks(tile.links, railType);
                rail.SetRotate(railDegree);
                rail.SetSprite(railType);
            }
            rail.Position = tile.position;
            rail.SetLinks(tile.links);
            return(rail);
        }
        int GetRotateDegreeByLinks(List <SidesLink> links, TypeRailWay type)
        {
            int       degree       = 0;
            int       offsetDegree = 90;
            TileSides generalSide;

            switch (type)
            {
            case TypeRailWay.Horizontal:
            case TypeRailWay.Vertical:
            case TypeRailWay.Cross:
                break;

            case TypeRailWay.Curve:                                             // init state = left
                TileSides righterSide = GetRighterSide(links[0]);
                degree = ChooseDegreeByInitSide(TileSides.Left, righterSide);
                break;

            case TypeRailWay.TwoCurve:                                          // init state = bottom
                generalSide = GetGeneralSide(links[0], links[1]);
                degree      = ChooseDegreeByInitSide(TileSides.Bottom, generalSide);
                break;

            case TypeRailWay.Endup:                                             // init state = bottom
                degree = ChooseDegreeByInitSide(TileSides.Bottom, links[0].begin);
                break;

            case TypeRailWay.OneInOneRight:                                     // init state = top
            case TypeRailWay.OneInOneLeft:
                generalSide = GetGeneralSide(links[0], links[1]);
                degree      = ChooseDegreeByInitSide(TileSides.Top, generalSide);
                break;

            case TypeRailWay.ThreeCurve:                                        // init state = left
                TileSides emptySides = GetEmptySide(links);
                degree = ChooseDegreeByInitSide(TileSides.Left, emptySides);
                break;
            }
            return(degree * offsetDegree);
        }
 public abstract void SetSprite(TypeRailWay type);