Example #1
0
    private void ManageFireInput()
    {
        bool aimStatus = false;

        if (axisYType == AxisType.Stop || axisYType == AxisType.TowardsPosition)
        {
            float aimAngle = aiController.CalculateAimAngle(playerTarget, launchVelocity, true, transform);
            aimStatus = aiAiming.AimBarrel(new Vector3(aimAngle, barrelWheel.localEulerAngles.y, barrelWheel.localEulerAngles.z));

            if (aimStatus == true)
            {
                bool clear = aiAiming.CheckBarrelClearance(sensorLength);
                if (clear)
                {
                    flightTime = aiAiming.GetTrajectoryTime(launchVelocity);
                    Shell projectile = aiAiming.Fire(launchVelocity, shell);
                    projectile.SetAITankSource(this);
                }
                else
                {
                    flightStatus = TrajectoryStatus.Fail;
                }
            }
        }
    }
Example #2
0
 private void DelayAutoMovement()
 {
     repositionTime += Time.deltaTime;
     if (repositionTime >= 1.5f)
     {
         repositionTime = 0;
         flightStatus   = TrajectoryStatus.Standby;
     }
 }
Example #3
0
 public void SetProjectileTime(float time)
 {
     if (time / flightTime >= 0.95f)
     {
         flightStatus = TrajectoryStatus.Success;
     }
     else
     {
         flightStatus = TrajectoryStatus.Fail;
     }
 }
Example #4
0
    IEnumerator StopAxesAfterDuration(AxisType axisType, float duration)
    {
        yield return(new WaitForSeconds(duration));

        StopAxis(axisType, Axis.X);
        StopAxis(axisType, Axis.Y);

        if (axisType == AxisType.TowardsPlayer)
        {
            flightStatus = TrajectoryStatus.Success;
        }
    }
Example #5
0
    private void ManageMovement()
    {
        if ((playerTarget - transform.position).magnitude > maxDistance)
        {
            repositionOn = false;
            SetAxis(1, AxisType.TowardsPlayer, Axis.Y);

            // Calculate direction of target for rotation
            float frontAngle = Vector3.Angle(transform.forward, playerTarget - transform.position);
            float rightAngle = Vector3.Angle(transform.right, playerTarget - transform.position);

            if (frontAngle > 10f && rightAngle > 90f)
            {
                SetAxis(-1, AxisType.TowardsPlayer, Axis.X);
            }
            else if (frontAngle > 10f && rightAngle < 90f)
            {
                SetAxis(1, AxisType.TowardsPlayer, Axis.X);
            }
            else
            {
                SetAxis(0, AxisType.TowardsPlayer, Axis.X);
            }
        }
        else if (flightStatus == TrajectoryStatus.Fail)
        {
            bool xCheck = SetAxis(0, AxisType.TowardsPlayer, Axis.X);
            bool yCheck = SetAxis(1, AxisType.TowardsPlayer, Axis.Y);
            if (xCheck && yCheck)
            {
                if (lastCoroutine != null)
                {
                    StopCoroutine(lastCoroutine);
                }
                lastCoroutine = StartCoroutine(StopAxesAfterDuration(AxisType.TowardsPlayer, 1.5f));
                flightStatus  = TrajectoryStatus.Standby;
            }
        }
        else if (flightStatus == TrajectoryStatus.Success)
        {
            StopAxis(AxisType.TowardsPlayer, Axis.X);
            StopAxis(AxisType.TowardsPlayer, Axis.Y);
        }
    }
Example #6
0
    public void Publish(bool status, int id)
    {
        var msg = new TrajectoryStatus(status, id);

        ros.Send(topicName, msg);
    }