// Update is called once per frame
 void Update()
 {
     if (Waypoint.Count > 0)
     {
         Vector3            destination = (Vector3)Waypoint[0];
         UnitRotationStatus rotation    = (UnitRotationStatus)WaypointD[0];
         float border = UnitSpeed / 50;
         if (Vector3.Distance(destination, transform.position) > border)
         {
             transform.position += (destination - transform.position).normalized * UnitSpeed * Time.deltaTime;
             if (confirmRotation != rotation || rotationConfirmed)
             {
                 SetRotation(rotation);
                 confirmRotation   = rotation;
                 rotationConfirmed = false;
             }
             if (Vector3.Distance(destination, transform.position) <= border)
             {
                 transform.position = destination;
                 Waypoint.RemoveAt(0);
                 WaypointD.RemoveAt(0);
             }
         }
     }
 }
 public void SetRotation()
 {
     UnitBodySpec.RotateBody(getAngle(UnitRotation));
     if (!UnitBodySpec.RotateTurret((360 - getAngle(UnitRotation)) + getAngle(TurretRotation)))
     {
         TurretRotation = UnitRotation;
     }
 }
 public int getArmorIndex(UnitRotationStatus flank, UnitRotationStatus rotation)
 {
     if (flank == rotation)
     {
         return(0);
     }
     else if (flank == OppositeRotationStatus(rotation))
     {
         return(2);
     }
     return(1);
 }
    public float getArmor(UnitRotationStatus flank)
    {
        int   chassisArmorIndex = getArmorIndex(flank, UnitRotation);
        float totalDefense      = 0;

        float[] armor;

        armor = UnitBodySpec.getArmor();
        if (armor != null)
        {
            totalDefense += armor [chassisArmorIndex];
        }

        return(totalDefense);
    }
    private float getAngle(UnitRotationStatus rotation)
    {
        switch (rotation)
        {
        case UnitRotationStatus.N:
            return(270);

        case UnitRotationStatus.S:
            return(90);

        case UnitRotationStatus.E:
            return(0);

        case UnitRotationStatus.W:
            return(180);
        }
        return(0);
    }
    public float getArmor(UnitRotationStatus flank, bool frontOnly)
    {
        if (frontOnly)
        {
            int     chassisArmorIndex = 0;
            int     turretArmorIndex  = 0;
            float   totalDefense      = 0;
            float[] armor;

            armor = UnitBodySpec.getArmor();
            if (armor != null)
            {
                totalDefense += armor [chassisArmorIndex];
            }

            return(totalDefense);
        }
        return(getArmor(flank));
    }
    public static UnitRotationStatus OppositeRotationStatus(UnitRotationStatus rotation)
    {
        switch (rotation)
        {
        case UnitRotationStatus.E:
            return(UnitRotationStatus.W);

        case UnitRotationStatus.W:
            return(UnitRotationStatus.E);

        case UnitRotationStatus.S:
            return(UnitRotationStatus.N);

        case UnitRotationStatus.N:
            return(UnitRotationStatus.S);
        }


        return(rotation);
    }
 public void ConfirmMovement()
 {
     UnitRotation      = TurretRotation = confirmRotation;
     rotationConfirmed = true;
     EndMovement();
 }
 void SetRotation(UnitRotationStatus rotation)
 {
     UnitBodySpec.RotateBody(getAngle(rotation));
     UnitBodySpec.RotateTurret((360 - getAngle(rotation)) + getAngle(rotation));
 }