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); } }
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; } }