コード例 #1
0
ファイル: HUD.cs プロジェクト: Game-Group/dog-fighter
    private void CreatePredictionMarker(GameObject npc)
    {
        ObjectTransformer transformer = npc.GetComponent <ObjectTransformer>();

        Shooter shooter = GunSwitcher.CurrentGuns[0].GetComponent <Shooter>();
        ProjectileController controller = shooter.Projectile.gameObject.GetComponent <ProjectileController>();

        Vector3 predictedPosition = PredictPosition.Predict(npc.transform.position,
                                                            transformer.WorldTranslationDirection * transformer.TranslationSpeed,
                                                            GunSwitcher.CurrentGuns[0].transform.position,
                                                            controller.FlyControl.DesiredSpeed);

        Vector3 predictedScreenPosition = Camera.WorldToScreenPoint(predictedPosition);

        predictedScreenPosition = ClampToScreen(predictedScreenPosition);

        //if (predictedScreenPosition.z < 0)
        //  Crosshair.ResetDistance();
        //else Crosshair.CurrentDistance = predictedScreenPosition.z;

        GUI.Label(new Rect(predictedScreenPosition.x - PredictedPositionTexture.width / 2f,
                           predictedScreenPosition.y - PredictedPositionTexture.height / 2f,
                           PredictedPositionTexture.width,
                           PredictedPositionTexture.height),
                  new GUIContent(PredictedPositionTexture));
    }
コード例 #2
0
    void Update()
    {
        Vector3 targetPos = PredictPosition.Predict(ShipPosition.position
                                                    , ShipControl.CurrentSpeed * ShipPosition.forward
                                                    , GunPosition.position
                                                    , Shooter.ProjectileSpeed);

        GunPosition.LookAt(targetPos);
        Shooter.Shoot();
    }
コード例 #3
0
    void OnTriggerStay(Collider Object)
    {
        // Checking for the player tag is only for no crashing
        if (isOpponent(Object))
        {
            float speed = 0;
            if (Object.gameObject.tag == "Npc")
            {
                ObjectTransformer d = Object.GetComponent <ObjectTransformer>();
                speed = d.TranslationSpeed;
            }
            else if (Object.gameObject.tag == "Player")
            {
                ShipControl s = Object.GetComponent <ShipControl>();
                speed = s.CurrentSpeed;
            }
            //Debug.Log(speed);
            // Check the predicted position given the current flying velocity
            Vector3 targetPosM = PredictPosition.Predict(Object.transform.position,
                                                         speed * Object.transform.forward,
                                                         top.position,
                                                         shootL.ProjectileSpeed);

            Vector3 targetPosL = PredictPosition.Predict(Object.transform.position,
                                                         speed * Object.transform.forward,
                                                         muzzleLeft.position,
                                                         shootL.ProjectileSpeed);

            Vector3 targetPosR = PredictPosition.Predict(Object.transform.position,
                                                         speed * Object.transform.forward,
                                                         muzzleRight.position,
                                                         shootR.ProjectileSpeed);

            // TODO: Only get random target sometimes
            targetPosM = GetRandomTarget(targetPosM, 1);
            //targetPosL = GetRandomTarget(targetPosL, 1);
            //targetPosR = GetRandomTarget(targetPosR, 1);

            Vector3 lookPos = targetPosM - top.position;
            lookPos.y = 0;
            Quaternion rotation = Quaternion.LookRotation(lookPos);
            //Quaternion b = Quaternion.Euler(0, this.transform.eulerAngles.y, 0);
            Vector3 eul = rotation.eulerAngles;
            eul.y -= this.transform.eulerAngles.y;
            Quaternion rotation2 = Quaternion.Euler(eul.x, eul.y, eul.z);

            top.localRotation = Quaternion.Slerp(top.transform.rotation, rotation2, Time.deltaTime * 100);

            Vector3 objPos = Object.transform.position;

            float angle = getXrotation(muzzleLeft.position, targetPosL);

            muzzleLeft.localEulerAngles = new Vector3(angle * Mathf.Rad2Deg, -90, 0);

            angle = getXrotation(muzzleRight.position, targetPosR);

            muzzleRight.localEulerAngles = new Vector3(angle * Mathf.Rad2Deg, -90, 0);

            float diff = (Object.transform.position - top.position).magnitude;
            // Only shoot in case of in shoot radius
            if (diff < shootDistance)
            {
                shootL.Shoot();
                shootR.Shoot();
            }
        }
    }