예제 #1
0
    public void CheckSurrounding()
    {
        Direction missedHole = Direction.None;

        foreach (Direction hole in _holeLocations)
        {
            Point      targetPoint = DirectionExtensions.GetDirectionPoint(hole);
            GameObject side        = GridLevelManager.Instance.GetCircleData(targetPoint.X + GetPoint().X, targetPoint.Y + GetPoint().Y);
            if (side != null)
            {
                CircleData sideData = side.GetComponent <CircleData>();
                if (sideData != null)
                {
                    if (sideData.MatchConnectingHole(hole))
                    {
                        if (sideData.LightOn())
                        {
                            sideData.SetNextCircleData(this);
                            TurnLightOn();
                            if (missedHole != Direction.None)
                            {
                                targetPoint = DirectionExtensions.GetDirectionPoint(missedHole);
                                side        = GridLevelManager.Instance.GetCircleData(targetPoint.X + GetPoint().X, targetPoint.Y + GetPoint().Y);
                                sideData    = side.GetComponent <CircleData>();
                                sideData.CheckSurrounding();
                            }
                        }
                        else if (LightOn())
                        {
                            sideData.CheckSurrounding();
                        }
                        else
                        {
                            missedHole = hole;
                        }
                    }
                }
            }
        }

        if (GridLevelManager.Instance.CheckWinTile(GetPoint()))
        {
            if (_lightUp)
            {
                foreach (Direction hole in _holeLocations)
                {
                    if (GridLevelManager.Instance.DirectionFacingGoal(hole, GetPoint().X, GetPoint().Y))
                    {
                        GridLevelManager.Instance.ExecuteWin();
                    }
                }
            }
        }
    }
예제 #2
0
    public bool DirectionFacingGoal(Direction d, int x, int y)
    {
        Point dirFace = DirectionExtensions.GetDirectionPoint(d);

        int xFace = dirFace.X + x;
        int yFace = dirFace.Y + y;

        if (xFace == _endNode.X && yFace == _endNode.Y)
        {
            return(true);
        }

        return(false);
    }
예제 #3
0
    public bool CheckWinTile(Point point)
    {
        Point dir = DirectionExtensions.GetDirectionPoint(DirectionExtensions.GetOppositeDirection(_endNode.Direction));

        int x = dir.X + _endNode.X;
        int y = dir.Y + _endNode.Y;

        if (point.X == x && point.Y == y)
        {
            return(true);
        }


        return(false);
    }
예제 #4
0
    //rewrite too lazy to check all given path now
    public override bool Valid()
    {
        foreach (Direction hole in _holeDict.Keys)
        {
            Point targetPoint = GetPoint().AddPoint(DirectionExtensions.GetDirectionPoint(hole));

            GameObject obj = LevelManager_v2.Instance.GetTubePositioning(targetPoint);

            if (obj != null)
            {
                if (obj.tag.ToLower().Contains("operator"))
                {
                    return(false);
                }
            }
        }

        return(true);
    }