Exemplo n.º 1
0
    private void InitializeMethodDict()
    {
        var assembly       = Assembly.GetAssembly(typeof(IPathFindingMethod));
        var allMethodTypes = assembly.GetTypes().Where(t => typeof(IPathFindingMethod).IsAssignableFrom(t) && t.IsInterface == false);

        foreach (var methodType in allMethodTypes)
        {
            IPathFindingMethod method = Activator.CreateInstance(methodType) as IPathFindingMethod;
            _methodDict.Add(method.MethodType, method);
        }
    }
Exemplo n.º 2
0
    private void FiniteStateMachine()
    {
        switch (_currentState)
        {
        case FindingState.WaitingForStartPoint:
            if (SetStartPoint())
            {
                _currentState = FindingState.WaitingForEndPoint;
            }
            break;

        case FindingState.WaitingForEndPoint:
            if (SetEndPoint())
            {
                _currentState = FindingState.StartPathFinding;
            }
            break;

        case FindingState.StartPathFinding:
            _currentMethod = _methodDict[_searchMethod];
            StartCoroutine(_currentMethod.StartFinding(this));
            _currentState = FindingState.CalculatingPath;
            break;

        case FindingState.CalculatingPath:
            if (_isFound)
            {
                _currentState = FindingState.ShowPath;
            }
            break;

        case FindingState.ShowPath:
            _currentMethod.ShowPath(this);
            _currentState = FindingState.Finish;
            break;

        case FindingState.Finish:
            if (Input.GetMouseButtonDown(1))
            {
                RestartFinding();
                _currentState = FindingState.WaitingForStartPoint;
            }
            break;

        default: break;
        }
    }