示例#1
0
    private void Update()
    {
        if (starGameManagerRef.GamePaused)
        {
            return;
        }

        if (RotateObjectYaw != null)
        {
            Vector3 aim = target.transform.position;
            Vector3 dir = aim - RotateObjectYaw.transform.position;
            dir.Normalize();
            float yAngle = Mathf.Atan2(dir.x, dir.z) * Mathf.Rad2Deg + correctionAngle;
            //Debug.Log(yAngle);
            // Quaternion desiredRot = Quaternion.Euler(0, yAngle, 0);
            Quaternion desiredRot = Quaternion.Euler(0, yAngle, 0);
            //    RotateObjectYaw.transform.rotation = Quaternion.RotateTowards(RotateObjectYaw.transform.rotation, desiredRot, rotSpeed * Time.deltaTime);
            RotateObjectYaw.transform.rotation = Quaternion.RotateTowards(RotateObjectYaw.transform.rotation, desiredRot, workingSpeed * Time.deltaTime);

            workingSpeed = rotSpeed;
        }
        // -----------------------------------------------------

        if (RotateObjectPitch != null)
        {
            Vector3    relativePosPitch = target.position - RotateObjectPitch.transform.position;
            Quaternion rotationPitch    = Quaternion.LookRotation(relativePosPitch);

            Vector3 useRotation = rotationPitch.eulerAngles;

            float NewAngle = rotationPitch.eulerAngles.x;
            NewAngle = (NewAngle > 180) ? NewAngle - 360 : NewAngle;

            if (PitchClampMax != 0 && PitchClampMin != 0)
            {
                NewAngle = Mathf.Clamp(NewAngle, PitchClampMin, PitchClampMax);
            }

            if (InvertPitch)
            {
                NewAngle = -NewAngle;
            }

            // RotateObjectPitch.transform.localRotation = Quaternion.Euler(NewAngle, 0,0);
            // this snapped back after player death

            RotateObjectPitch.transform.localRotation = Quaternion.Slerp(RotateObjectPitch.transform.localRotation,
                                                                         Quaternion.Euler(NewAngle, 0, 0), Time.deltaTime * (rotSpeed / 8));
        }

        if (FireProjectile)
        {
            FireProjectile = false;
            if (StarEnemy != null)
            {
                StarEnemy.fireProjectile(starGameManagerRef.ActorsParent);
            }
        }
    }  // end update
示例#2
0
    IEnumerator RandomDoorController()
    {
        ShuffleDoorTimes();
        yield return(new WaitForSeconds(DelayBetweenDoorsOpenUse));

        while (starGameManagerRef.GamePaused)
        {
            yield return(null);
        }

        List <GameObject> doorTypeList = GreenSpawnDoors;
        int selectDoorType             = Random.Range(0, 3);

        if (selectDoorType == 0)
        {
            ArmDoorControl();
        }

        else
        {
            if (selectDoorType == 1)
            {
                doorTypeList = PurpleSpawnDoors;
            }

            GameObject randomDoor = (doorTypeList[Random.Range(0, doorTypeList.Count)]);
            StartCoroutine(DoorOpening(randomDoor, ""));

            // tell it to spawn as well, either here or in it's sub-controller
            starEnemy currentStarEnemy = randomDoor.GetComponentInChildren <starEnemy>();
            currentStarEnemy.ProjectileFiringEnabled = true;
            currentStarEnemy.fireProjectile(null);

            StartCoroutine(CloseDoorTimer(randomDoor));
        }

        StartCoroutine(RandomDoorController());
    }