protected override IEnumerator SurveyRoutine(Context context, List <GameAction.ParameterData> result, System.Action complete, System.Action cancel)
    {
        //Setup
        _trajectoryDisplay = TrajectoryDisplaySystem.Instance.CreateTrajectory();

        _weaponPreview.SetActive(false);

        _shootAimingState = ShootAimingState.SelectingDirection;

        _vectorDesc = context.GetQueryParam <GameActionParameterVector.Description>();
        if (_vectorDesc.UsePreviousParameterOriginLocation && context.CurrentData.Count > 0)
        {
            // could fetch all previous to find a valid one
            if (context.CurrentData[context.CurrentData.Count - 1] is GameActionParameterPosition.Data posData)
            {
                transform.position = posData.Position.ToUnityVec();
            }
            else if (context.CurrentData[context.CurrentData.Count - 1] is GameActionParameterEntity.Data entityData)
            {
                _originEntity = entityData.Entity;
                if (SimWorld.TryGetComponent(_originEntity, out FixTranslation fixTranslation))
                {
                    transform.position = fixTranslation.Value.ToUnityVec();
                }
            }
        }

        while (_shootAimingState != ShootAimingState.Aiming)
        {
            UpdateDirection();

            if (Input.GetKeyDown(KeyCode.Mouse0))
            {
                _shootAimingState = ShootAimingState.Aiming;
            }

            yield return(null);
        }

        _weaponPreview.SetActive(true);
        SetupAimingRotationAnimation();

        while (_shootAimingState != ShootAimingState.Shoot)
        {
            if (Input.GetKeyDown(KeyCode.Mouse0))
            {
                _rotatingAnimation.Kill();
                _shootAimingState = ShootAimingState.Shoot;
            }

            yield return(null);
        }

        Vector2 _finalVector = ViewToSimVector((_line.position - transform.position) * 2);

        result.Add(new GameActionParameterVector.Data((fix2)_finalVector));

        complete();
    }
Ejemplo n.º 2
0
    protected override IEnumerator SurveyRoutine(Context context, List <GameAction.ParameterData> result, System.Action complete, System.Action cancel)
    {
        _trajectoryDisplay = TrajectoryDisplaySystem.Instance.CreateTrajectory();
        _vectorDesc        = context.GetQueryParam <GameActionParameterVector.Description>();

        if (_vectorDesc.UsePreviousParameterOriginLocation && context.CurrentData.Count > 0)
        {
            // could fetch all previous to find a valid one
            if (context.CurrentData[context.CurrentData.Count - 1] is GameActionParameterPosition.Data posData)
            {
                transform.position = posData.Position.ToUnityVec();
            }
            else if (context.CurrentData[context.CurrentData.Count - 1] is GameActionParameterEntity.Data entityData)
            {
                _originEntity = entityData.Entity;
                if (SimWorld.TryGetComponent(_originEntity, out FixTranslation fixTranslation))
                {
                    transform.position = fixTranslation.Value.ToUnityVec();
                }
            }
        }

        Update(); // force first update to avoid visual issue on first frame. We should find a more general fix

        // wait for drag to start
        while (_dragState != DragState.Releasing)
        {
            yield return(null);
        }

        // wait for release anim to be complete
        while (!Mathf.Approximately(_dragTarget.position.x, _center.position.x) || !Mathf.Approximately(_dragTarget.position.y, _center.position.y))
        {
            yield return(null);
        }

        // submit drag vector
        result.Add(new GameActionParameterVector.Data((fix2)_releaseVector));

        complete();
    }