Esempio n. 1
0
    public void ReturnToPool(RoadTile tile)
    {
        tile.ApplyReturnProcess();

        if (tile.TileType != RoadTile.Type.Straight)
        {
            RotatorLink rotatorLink = tile.GetComponent <RotatorLink>();
            Rotator     rotator     = rotatorLink.DetachRotator();
            rotator.ApplyReturnProcess();
            rotatorPool.ReturnToPool(rotator);
        }

        roadTilePool.ReturnToPool(tile.TileType, tile);
        activeTileMap.Remove(tile.MapPosition);
    }
Esempio n. 2
0
    public void InstallTile(RoadTile.Type type, Vector3 position, Vector3 direction)
    {
        RoadTile installedTile = roadTilePool.GetFromPool(type);

        installedTile.transform.position = position;
        installedTile.transform.rotation = Quaternion.LookRotation(direction);

        Vector2 mapPosition = standingTilePosition + lastOutDirection;

        activeTileMap.Add(mapPosition, installedTile);

        lastWorldPoint = position;

        if (type != RoadTile.Type.Straight)
        {
            Rotator rotator;

            RotatorLink rotatorLink = installedTile.GetComponent <RotatorLink>();

            if (roadTilePool[roadTilePool.InstantiatedCount - 2].TileType != type)
            {
                rotator = rotatorPool.GetFromPool();

                float clockwiseValue;
                if (installedTile.TileType == RoadTile.Type.Left)
                {
                    clockwiseValue = -1;
                }
                else
                {
                    clockwiseValue = 1;
                }
                rotator.ApplyInstallProcess(clockwiseValue);
                rotatorLink.InstallRotator(rotator);
            }
            else
            {
                rotatorLink.Rotator = roadTilePool[roadTilePool.InstantiatedCount - 2].GetComponent <RotatorLink>().Rotator;
            }
        }

        installedTile.ApplyInstallProcess(direction, position, mapPosition);
    }
Esempio n. 3
0
    private void OnTriggerEnter(Collider other)
    {
        ComponentPointer <RoadTile> pointer = other.GetComponent <ComponentPointer <RoadTile> >();

        if (pointer != null)
        {
            if (pointer.PointedComponent.TileType != RoadTile.Type.Straight)
            {
                RotatorLink link = pointer.PointedComponent.GetComponent <RotatorLink>();
                if (link != null)
                {
                    if (!foundRotators.ContainsKey(link.Rotator))
                    {
                        availableRotators.Add(link.Rotator);
                    }
                    foundRotators.AddOrCreate(link.Rotator, link);
                }
            }

            currentTile = pointer.PointedComponent;
        }
    }
Esempio n. 4
0
    private void OnTriggerExit(Collider other)
    {
        ComponentPointer <RoadTile> pointer = other.GetComponent <ComponentPointer <RoadTile> >();

        if (pointer != null)
        {
            if (pointer.PointedComponent.TileType != RoadTile.Type.Straight)
            {
                RotatorLink link = pointer.PointedComponent.GetComponent <RotatorLink>();
                if (link != null)
                {
                    foundRotators.DecreaseOrRemove(link.Rotator, link);
                    if (!foundRotators.ContainsKey(link.Rotator))
                    {
                        availableRotators.Remove(link.Rotator);
                    }
                }
            }

            pointer.PointedComponent.Passed = true;
        }
    }