Пример #1
0
    IEnumerator WaitForController()
    {
        tankController = target.GetComponent <RTCTankController>();
        yield return(new WaitWhile(() => !tankController));

        tankGunController = tankController.GetComponentInChildren <RTCTankGunController>();
    }
Пример #2
0
    // Update is called once per frame
    void Update()
    {
        if (target)
        {
            if (!mapCanvasController)
            {
                mapCanvasController = miniMap.GetComponent <MapCanvasController>();
                return;
            }

            mapCanvasController.playerTransform = target.transform;
            if (!tankController)
            {
                tankController = target.GetComponent <RTCTankController>();
                return;
            }

            // Player health related
            lifeRatio                 = tankController.GetLifeRatio();
            healthSlider.value        = lifeRatio;
            HealthSliderText.text     = ((int)tankController.CurrentLife).ToString() + " / " + ((int)tankController.MaxLife).ToString();
            healthSliderFillBar.color = Color.green;
            if (lifeRatio < 0.45f) // yellow state for the health bar
            {
                healthSliderFillBar.color = Color.yellow;
            }
            if (lifeRatio < 0.2f) // red state for the health bar
            {
                healthSliderFillBar.color = Color.red;
            }

            speedText.text = "" + Mathf.RoundToInt(tankController.speed);

            // Player tank fuel related
            fuelSlider.value    = tankController.GetFuelRatio();
            fuelSliderText.text = ((int)tankController.CurrentFuel).ToString() + " / " + ((int)tankController.maxFuel).ToString();
        }

        // Checking if the player has joined the network and enable the UI elements accordingly
        if (PhotonNetwork.connectionStateDetailed == ClientState.Joined)
        {
            Compass.SetActive(false);
            ObjPanel.SetActive(false);
        }
        else
        {
            Compass.SetActive(true);
            ObjPanel.SetActive(true);
        }

        // Check which game mode is active (DM or TDM) and based on that activate the scoreCanvas
        if (playersListTDM.activeSelf || playersListDM.activeSelf)
        {
            scoresCanvas.enabled = true;
        }
        else if (!playersListTDM.activeSelf || !playersListDM.activeSelf)
        {
            scoresCanvas.enabled = false;
        }
    }
Пример #3
0
 public void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.tag == "playerTank" || other.gameObject.tag == "Player") // checking if player tank is in the out of bouns collider
     {
         timeLeft    = 0;
         outOfBounds = true;
         player      = other.GetComponentInParent <RTCTankController>(); // grabbing the RTCTankController script from the player Tank
         DEBUG.Log("Player is now out of bounds");
     }
 }
Пример #4
0
    // called by animation through the TankController and also calculates the damage that is being in the line of sight and if any enemies are in it.
    public void SonicBoomAnimTrigger()
    {
        float sonicboomRadiusfloat = sonicBoomRange.GetComponent <SphereCollider>().radius;

        Collider[]   colliders = Physics.OverlapSphere(sonicBoomRange.transform.position, sonicboomRadiusfloat);
        RaycastHit[] hits      = Physics.SphereCastAll(sonicBoomRange.transform.position, 3 * sonicboomRadiusfloat, sonicBoomRange.transform.forward, 100 * sonicboomRadiusfloat);

        foreach (RaycastHit hit in hits)
        {
            if (hit.collider.gameObject.transform.parent && hit.collider.gameObject.transform.parent.gameObject != controller.gameObject && !hitOnce)
            {
                // if we have a rigid body
                if (hit.collider && hit.collider.gameObject.GetComponent <Rigidbody>())
                {
                    Rigidbody hitBody = hit.collider.gameObject.GetComponent <Rigidbody>();
                    hitBody.mass       /= 5;
                    hitBody.isKinematic = false;
                    hitBody.AddExplosionForce(explosionForceSonicBoom, hit.collider.gameObject.transform.position, sonicboomRadiusfloat, upwardModifier);
                    Instantiate(sonicBoomDamageEffect, hit.collider.gameObject.transform.position, hit.collider.gameObject.transform.rotation);
                }

                // if we hit an enemy tank
                if (hit.collider && (hit.collider.gameObject.tag == "playerTank" || hit.collider.gameObject.tag == "Player"))
                {
                    RTCTankController hitTank = hit.collider.gameObject.transform.parent.gameObject.GetComponent <RTCTankController>();
                    Instantiate(sonicBoomDamageEffect, hit.collider.gameObject.transform.position, hit.collider.gameObject.transform.rotation);

                    if (hitTank)
                    {
                        hitTank.TakeDamage(sonicboomDamage, this.gameObject);
                        hitOnce = true;
                        if (ArcadeController.instance && ArcadeController.instance.hasTankDied)
                        {
                            if (levelManagerRef != null)
                            {
                                levelManagerRef.AddKill(levelManagerRef.xpCollected);
                            }
                        }
                    }
                }

                if (hit.collider.gameObject.transform.parent && hit.collider.gameObject.transform.parent.gameObject.GetComponent <TargetToDestroy>())
                {
                    hit.collider.gameObject.transform.parent.gameObject.GetComponent <TargetToDestroy>().TakeDamage(sonicboomDamage, this.gameObject);
                }
            }
        }
        hitOnce = false;

        if (hit.gameObject.transform.parent && hit.gameObject.transform.parent.gameObject.GetComponent <TargetToDestroy>())
        {
            hit.gameObject.transform.parent.gameObject.GetComponent <TargetToDestroy>().TakeDamage(sonicboomDamage, this.gameObject);
        }
    }
Пример #5
0
    void Start()
    {
        hitOnce = false;
        //Setting references
        levelManagerRef = FindObjectOfType <LevelManager>();
        controller      = GetComponentInParent <RTCTankController>();
        body            = controller.gameObject.GetComponent <Rigidbody>();
        animator        = GetComponentInParent <Animator>();
        specialHasFired = false;
        reloadComplete  = false;


        // Checking if the UI compnents are present
        if (!loadoutPanel || !reloadImage)                    // nothing to update
        {
            loadoutPanel = FindObjectOfType <Loadoutpanel>(); // Find the loadout panel and if not null, refill image
            if (loadoutPanel)
            {
                reloadImage = loadoutPanel.fillBarImage;
            }
        }
        if (loadoutPanel && !loadoutPanel.specialButton)
        {
            loadoutPanel.specialButton = loadoutPanel.transform.parent.Find("SpecialAttackBTN").GetComponent <Button>();
        }

        // Define variables
        massBackup        = body.mass;
        dragBckup         = body.drag;
        angularDragBackup = body.angularDrag;
        timerStomp        = coolDownStomp;
        timerLunge        = coolDownLunge;
        timerSwipe        = coolDownSwipe;
        timerBite         = coolDownBite;
        timerSonicBoom    = coolDownSonicBoom;


        // if animator exists, turn it off. Will enable in code when needed.
        if (animator)
        {
            animator.enabled = false;
        }

        if (BiteObj)
        {
            BiteObj.SetActive(false);
            BiteAnim.enabled = false;
        }

        if (StegoSwipe)
        {
            StegoSwipe.SetActive(false);
        }
    }
Пример #6
0
 // Settig all the effects that are present in the game
 public void ApplyEffects(RTCTankController _controller)
 {
     _controller.ResetToBackUpValuesForUpgrades();
     _controller.GetComponent <Rigidbody>().mass += delataMass;
     _controller.SetMaxLife(_controller.MaxLife + delataMaxLife);
     _controller.SetLife(_controller.MaxLife + delataMaxLife);
     _controller.EngineTorque += delataEngineTorque;
     _controller.engineRPM    += delataMaxRPM;
     _controller.SetMaxSpeed(_controller.MaxSpeed + (delataMaxSpeed * _controller.MaxSpeed));
     _controller.maximumAngularVelocity += delataAngularVelovity;
     _controller.fireRate   += deltaFireRate;
     _controller.damageMult += deltaDamage;
 }
Пример #7
0
    // called by animation through the TankController and also calculates the damage being done to the tanks in range of the user.
    public void SwipeAnimTrigger()
    {
        float swipeRadiusfloat = swipeRadiusCollider.GetComponent <SphereCollider>().radius;

        Collider[] colliders = Physics.OverlapSphere(swipeRadiusCollider.transform.position, swipeRadiusfloat);

        foreach (Collider hit in colliders) //For every collider that my overlapshere hit, do this..
        {
            // if we are not the player
            if (hit.gameObject.transform.parent && hit.gameObject.transform.parent.gameObject != controller.gameObject && !hitOnce)
            {
                // if we have a rigid body
                if (hit && hit.GetComponent <Rigidbody>())
                {
                    Rigidbody hitBody = hit.GetComponent <Rigidbody>();
                    hitBody.mass       /= 5;
                    hitBody.isKinematic = false;
                    hitBody.AddExplosionForce(explosionForceSwipe, swipeRadiusCollider.transform.position, swipeRadiusfloat, upwardModifier);
                }

                // if we hit an enemy tank
                if (hit && (hit.gameObject.tag == "playerTank" || hit.gameObject.tag == "Player"))
                {
                    RTCTankController hitTank = hit.gameObject.transform.parent.gameObject.GetComponent <RTCTankController>();

                    if (hitTank)
                    {
                        hitTank.TakeDamage(swipeDamage, this.gameObject);
                        hitOnce = true;
                        if (ArcadeController.instance && ArcadeController.instance.hasTankDied)
                        {
                            if (levelManagerRef != null)
                            {
                                levelManagerRef.AddKill(levelManagerRef.xpCollected);
                            }
                        }
                    }
                }

                if (hit.gameObject.transform.parent && hit.gameObject.transform.parent.gameObject.GetComponent <TargetToDestroy>())
                {
                    hit.gameObject.transform.parent.gameObject.GetComponent <TargetToDestroy>().TakeDamage(swipeDamage, this.gameObject);
                }
            }
        }
        hitOnce = false;
    }
Пример #8
0
    void Start()
    {
        nc           = GameObject.FindObjectOfType <NetworkController>();
        errorlevel   = GetComponent <Text>();
        CurrentScene = SceneManager.GetActiveScene();

        if (EmptyFuelArrow)
        {
            EmptyFuelArrow.SetActive(false);
        }

        if (APP.PlayerTankManager == null || APP.PlayerTankManager.player == null) // if the player doesn't have a player tank manager, then wait and spawn one
        {
            StartCoroutine(WaitForPTMToSpawn());
            return;
        }


        // Setting UI elements inactive or active
        HideScopeFade();
        win.GetComponent <Canvas>().enabled  = false;
        lose.GetComponent <Canvas>().enabled = false;
        scoresCanvas.enabled = false;
        skipButton.SetActive(false);
        edgeFade.SetActive(false);
        damageFade.SetActive(true);
        blackFade.SetActive(false);
        viewSlit.SetActive(false);

        // Assigning/Finding data from objects present in the scene
        levelManagerRef     = FindObjectOfType <LevelManager>();
        mapCanvasController = miniMap.GetComponent <MapCanvasController>();
        tankController      = APP.PlayerTankManager.player.GetComponent <RTCTankController>();
        tankGunController   = tankController.GetComponentInChildren <RTCTankGunController>();

        if (!tankController)
        {
            StartCoroutine("WaitForController");
        }

        // Cursor Related
        Cursor.visible   = false;
        Cursor.lockState = CursorLockMode.Locked;

        if (levelManagerRef.errorInStack)
        {
            errors.SetActive(true);
            errorlevel.text = levelManagerRef.checkpointsCount +
                              levelManagerRef.destroyTargetCount +
                              levelManagerRef.collectCount +
                              levelManagerRef.waveCount +
                              levelManagerRef.destinationsCount +
                              levelManagerRef.deliverCount +
                              levelManagerRef.captureCount +
                              levelManagerRef.cutSceneCount + "Error in Level Manager";
            DEBUG.Log("Errors in LevelManager detected, behaviour may be broken", Warning_Types.Error);
        }
        else
        {
            errors.SetActive(false);
        }

        LoadoutPanel.Initialize();

        // Fuel Arrow only for the grasslands level
        if (CurrentScene.name.Contains("Campaign_Grasslands"))
        {
            EmptyFuelArrow.SetActive(tankController.CurrentFuel <= 0 ? true : false);
        }
        else
        {
            EmptyFuelArrow.SetActive(false);
        }
    }
Пример #9
0
 // Adding a new _target GameObject
 public void SetTarget(GameObject _target)
 {
     target            = _target; // Giving the same information as the target GameObject
     tankController    = _target.GetComponent <RTCTankController>();
     tankGunController = _target.GetComponentInChildren <RTCTankGunController>();
 }
Пример #10
0
 void Awake()
 {
     tankScript = (RTCTankController)target;
 }