Пример #1
0
    void AimAtTarget()
    {
        if (lastCombatTarget != null)
        {
            // Torso
            Quaternion targetRot = Quaternion.LookRotation(lastCombatTarget.transform.position - transform.position);
            targetRot.x           = 0;
            targetRot.z           = 0;
            torsoRotAxis.rotation = Quaternion.Slerp(torsoRotAxis.rotation, targetRot, 5 * Time.deltaTime);

            // Arms
            Quaternion targetArmRot = Quaternion.LookRotation(lastCombatTarget.GetTargetCenter().position - armRotAxis.transform.position);
            targetArmRot.y           = 0;
            targetArmRot.z           = 0;
            armRotAxis.localRotation = Quaternion.Slerp(armRotAxis.localRotation, targetArmRot, 5 * Time.deltaTime);
        }
    }
Пример #2
0
    /* Camera from this mech */
    public MechManager FindTargetInView(float viewAngle = 50, float maxDist = 100)
    {
        var hostiles = LevelManager._instance.GetAllEntitiesInRange(gameObject, maxDist, mechManager.mechFaction);

        target       = null;
        targetCenter = null;

        /* If hostile in view, then get the closest out of remaining */
        float      smallestAngle  = 360;
        GameObject closestHostile = null;

        foreach (GameObject hostile in hostiles)
        {
            if (!hostile.activeInHierarchy || hostile.GetComponent <MechManager>().totallyDestroyed)
            {
                continue;
            }

            //var dist = Vector3.Distance(transform.position, hostile.transform.position);
            var angleBetween = Vector3.Angle(mechManager.sectionManager.torsoRotAxis.transform.forward, (hostile.transform.position - transform.position));

            if (angleBetween < viewAngle && angleBetween < smallestAngle)
            {
                closestHostile = hostile;
                smallestAngle  = angleBetween;
            }
        }

        if (closestHostile != null)
        {
            target       = closestHostile.GetComponent <MechManager>();
            targetCenter = target.GetTargetCenter();
        }

        return(target);
    }
Пример #3
0
    // Update is called once per frame
    void Update()
    {
        if (LevelManager._instance.playerMechManager.weaponSystem.target == null)
        {
            reticle.gameObject.SetActive(false);
        }
        else
        {
            //{
            MechManager mechTarget = LevelManager._instance.playerMechManager.weaponSystem.target;

            reticle.gameObject.SetActive(true);

            //    Vector2 space = Camera.main.WorldToScreenPoint(mechTarget.weaponSystem.targetCenter.position);

            //    reticle.transform.position = space;

            //    if (Vector3.Dot((mechTarget.transform.position - transform.position), transform.forward) < 0)
            //    {
            //        if (pos.x < Screen.width / 2)
            //        {
            //            pos.x = maxX;
            //        }
            //        else
            //            pos.x = minX;
            //    }
            //}
            //else
            //{
            //    reticle.enabled = false;
            //}

            var minX = reticle.GetPixelAdjustedRect().width / 2;
            var maxX = Screen.width - minX;

            var minY = reticle.GetPixelAdjustedRect().height / 2;
            var maxY = Screen.height - minY;

            Vector2 pos = Camera.main.WorldToScreenPoint(mechTarget.GetTargetCenter().position);

            if (Vector3.Dot((mechTarget.GetTargetCenter().position - reticle.transform.position), reticle.transform.forward) < 0)
            {
                reticle.gameObject.SetActive(false);

                if (pos.x < Screen.width / 2)
                {
                    pos.x = maxX;
                }
                else
                {
                    pos.x = minX;
                }
            }

            pos.x = Mathf.Clamp(pos.x, minX, maxX);
            pos.y = Mathf.Clamp(pos.y, minY, maxY);

            reticle.transform.position = pos;

            //distanceText.text = Mathf.Round(Vector3.Distance(transform.position, target.position)) + "m";
        }
    }