public override void Init(KBPlayer _owner) { base.Init(_owner); lifetime = KBConstants.GameConstants.defaultAOElifetime; transform.localScale = initScale; renderer.material.color = originalMaterial.color; }
/// <summary> /// Call this after spawning an instance of an ability out of ObjectPool to reinitialize the instance. /// </summary> public virtual void Init(KBPlayer _owner) { spawnTime = Time.time; if (trailRenderer != null) { Invoke("ResetTrail", 0.01f); } team = _owner.team; owner = _owner; active = true; }
public override void Init(KBPlayer _owner) { base.Init(_owner); if (hitPlayer == null) { hitPlayer = new List<GameObject>(); } else { hitPlayer.Clear(); } }
public KBPlayer FindClosestPlayer(KBPlayer fromPlayer, float minimumDist, bool oppositeTeamOnly) { List<KBPlayer> players = GameManager.Instance.players; KBPlayer target = null; float closest = 0; for (int i = 0; i < players.Count; i++) { if (players[i].GetHashCode() != fromPlayer.GetHashCode()) { float distance = 0; if (oppositeTeamOnly && players[i].team != fromPlayer.team) { distance = Vector3.Distance(fromPlayer.transform.position, players[i].transform.position); } else if (!oppositeTeamOnly) { distance = Vector3.Distance(fromPlayer.transform.position, players[i].transform.position); } if (distance > minimumDist) { if (closest == 0) { closest = distance; target = players[i]; } else if (closest != 0 && distance < closest) { closest = distance; target = players[i]; } } } } return target; }
private void Start() { player = transform.parent.GetComponent<KBPlayer>(); }
private void DoExplosionAnimation(KBPlayer player) { PlayerGibModel gib = null; switch (player.type) { case PlayerType.mech: gib = mechGibBody; break; case PlayerType.drone: gib = droneGibBody; break; case PlayerType.tank: gib = tankGibBody; break; case PlayerType.core: break; default: break; } PlayerGibModel g = ObjectPool.Spawn(gib, player.gameObject.transform.position + Vector3.up * 3, player.gameObject.transform.rotation); g.Init(); player.gameObject.GetComponent<BoxCollider>().enabled = false; player.upperBody.SetActive(false); player.lowerBody.SetActive(false); player.ammoHud.SetActive(false); player.particleSystem.Emit(GameConstants.explosionParticleAmount); int n = GameConstants.explosionChaffAmount; Chaff c = null; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int h = 0; h < n; h++) { c = ObjectPool.Spawn(chaff, new Vector3( player.gameObject.transform.position.x - (n / 2.0f * chaff.transform.localScale.x) + (n * chaff.transform.localScale.x * i), player.gameObject.transform.position.y - (n / 2.0f * chaff.transform.localScale.x) + (n * chaff.transform.localScale.x * i), player.gameObject.transform.position.z - (n / 2.0f * chaff.transform.localScale.x) + (n * chaff.transform.localScale.x * i) ), Quaternion.identity ); c.Init(); } } } //c.gameObject.rigidbody.AddExplosionForce(1.0f, transform.position, 1.0f); }
public void ConfirmHit(KBPlayer victimObject, int damage) { photonView.RPC("ConfirmHitToOthers", PhotonTargets.All, victimObject.networkPlayer, damage); }
private IEnumerator DoFiringCoroutine(Vector3 direction, KBPlayer firedBy, float _inheritSpeed = 0.0f) { if (sound.Length > 0) { audio.PlayOneShot(sound[Random.Range(0, sound.Length)]); } if (particleSystem != null) { StartCoroutine(ParticleBurstStaged()); } for (int i = 0; i < burstSize; i++) { if (owner.networkPlayer.isLocal) { switch (level) { case 0: Camera.main.GetComponent<ScreenShake>().StartShake(0.1000f, 1.0000f); break; case 1: Camera.main.GetComponent<ScreenShake>().StartShake(0.1000f, 1.5000f); break; case 2: Camera.main.GetComponent<ScreenShake>().StartShake(0.1000f, 2.3000f); break; default: Camera.main.GetComponent<ScreenShake>().StartShake(0.0500f, 0.500f); break; } } if (casing != null) { if (burstDelay > 0.0f) { SpawnShellCasing(100.0f); } else { if (i == 0) { SpawnShellCasing(130.0f); } } } ProjectileBaseScript projectile = null; Vector3 modifiedDirection = direction; if (burstFireWeapon) { modifiedDirection.y = (direction.y - maximumSpreadAngle) + (i * 2.0f * maximumSpreadAngle / burstSize); } // Spawn projectile projectile = ObjectPool.Spawn(projectileType[level], transform.position, Quaternion.Euler(modifiedDirection)); projectile.inheritSpeed = _inheritSpeed; projectile.Team = firedBy.Team; projectile.Init(firedBy); projectile.lifetime = 100.0f; projectile.setLifetimeForMaxRange(maxRange); projectile.damage = projectile.damageLevel[level]; Collider[] collider = owner.GetComponentsInChildren<Collider>(); foreach (Collider c in collider) { if (c.enabled && projectile.collider.enabled) { Physics.IgnoreCollision(c, projectile.collider, true); } } // Alter behavior if special projectile type if (projectile.homingProjectile) { projectile.targetPlayer = GameManager.Instance.FindClosestPlayer(owner, 10, true); } if (projectile.aimedProjectile) { projectile.targetPosition = new Vector3(-owner.mousePlayerDiff.x, owner.transform.position.y, -owner.mousePlayerDiff.y); } // Play effects lastProjectile = projectile; if (i < burstSize) { if (burstDelay > 0.0f) { yield return new WaitForSeconds(burstDelay); } } else if (burstDelay == 0) { yield return new WaitForEndOfFrame(); } StartCoroutine(owner.GamepadVibrateTriggers(0.1250f)); } }
/// <summary> /// Fires and sets max range of projectile at runtime /// </summary> /// <param name="maxRange"></param> /// <param name="firedBy"></param> /// <param name="_inheritSpeed"></param> /// <returns></returns> protected ProjectileBaseScript Fire(int maxRange, KBPlayer firedBy, float _inheritSpeed = 0) { ProjectileBaseScript p = Fire(firedBy, _inheritSpeed); if (p != null) { p.setLifetimeForMaxRange(maxRange); } return p; }
/// <summary> /// Fires projectile (does not alter lifetime) /// </summary> /// <param name="firedBy"></param> /// <param name="_inheritSpeed"></param> /// <returns></returns> protected ProjectileBaseScript Fire(KBPlayer firedBy, float _inheritSpeed = 0) { return Fire(transform.rotation.eulerAngles, firedBy, _inheritSpeed); }
protected ProjectileBaseScript Fire(Vector3 direction, KBPlayer firedBy, float _inheritSpeed = 0.0f) { ProjectileBaseScript projectile = null; if (available) { available = false; cooldown = cooldownStart; ammo--; StartCoroutine(DoFiringCoroutine(direction, firedBy, _inheritSpeed)); } projectile = lastProjectile; return projectile; }