// Update is called once per frame void Update() { if (!canShoot) { return; } ellapsedTime += Time.deltaTime; if (Input.GetButtonDown("Fire1") && ellapsedTime > shotCooldown) { ellapsedTime = 0f; RaycastHit hit; //Ask server to shoot. /// CmdFireShot(firePosition.position, firePosition.forward); Ray ray = new Ray(firePosition.position, firePosition.forward); Debug.DrawRay(ray.origin, ray.direction * 3f, Color.red, 1f); bool result = Physics.Raycast(ray, out hit, 50f); if (result) { hit_pos = hit.transform.position; NewPlayerHealth enemy = hit.transform.GetComponent <NewPlayerHealth>(); if (enemy != null) { CmdFireShot(firePosition.position, firePosition.forward, hit_pos, hit.transform.gameObject.GetComponent <NetworkIdentity>().netId); return; } } CmdFireMissedShot(firePosition.position, firePosition.forward); } }
[Command] //This is run on the server. void CmdFireShot(Vector3 origin, Vector3 direction, Vector3 hit_pos, NetworkInstanceId netid) { Debug.Log("Player Count is... " + playerList.players.Count); //Debug.Log("origin: "+ origin+", direction: "+ direction+ ", hit_pos: "+ hit_pos); //Debug.Log("Size of player list " + manager.GetComponent<PlayerList>().players.Count); ////Debug.Log("Size of player list " + PlayerList.singleton.GetComponent<PlayerList>().players.Count +", NETID: "+netid+", "); //GameObject closestObject = null; GameObject player = playerList.GetPlayer(netid); Debug.Log("Distance of " + Vector3.Distance(hit_pos, player.transform.position) + "."); if (Vector3.Distance(hit_pos, player.transform.position) < 3) { //health stuff NewPlayerHealth enemy = playerList.GetPlayer(netid).transform.GetComponent <NewPlayerHealth>(); if (enemy != null) { bool wasKillShot = enemy.TakeDamage(); if (wasKillShot) { score++; } } } RaycastHit hit; Ray ray = new Ray(origin, direction); Debug.DrawRay(ray.origin, ray.direction * 3f, Color.red, 1f); ////50f How far the gun shoots. ////Save guns in ScriptableObjects. bool result = Physics.Raycast(ray, out hit, 50f); RpcProcessShotEffects(result, hit.point, hit.normal); }
void Explode() { hasExploded = true; Debug.Log("BOOM"); //Show Effect Destroy(Instantiate(explosionEffect, transform.position, transform.rotation), 1f); // Get nearby Objects Collider[] collidersToDestroy = Physics.OverlapSphere(transform.position, blastRadius); foreach (Collider nearbyObject in collidersToDestroy) { // Add force NewPlayerHealth enemy = nearbyObject.GetComponent <NewPlayerHealth>(); if (enemy != null) { bool wasKillShot = enemy.TakeDamage(); //if (wasKillShot) //score++; } } // Add force Collider[] collidersToAddForce = Physics.OverlapSphere(transform.position, blastRadius); foreach (Collider nearbyObject in collidersToAddForce) { // Add force Rigidbody rb = nearbyObject.GetComponent <Rigidbody>(); if (rb != null) { rb.AddExplosionForce(explosionForce, transform.position, blastRadius); } } // Damage // Remove Granade Destroy(gameObject); }