/* * Deals damage to both objects on collision, by definition * Handles death when needed */ private void DealDamage(GameObject other) { //Get reference to collider ObjectCollisionHandler otherCollider = other.GetComponent <ObjectCollisionHandler>(); //if no collider exists, then attempt to take from parent if (otherCollider == null && other.transform.parent == null) { return; } while (otherCollider == null) { other = other.transform.parent.gameObject; otherCollider = other.GetComponentInParent <ObjectCollisionHandler>(); } //Different behavior if hitting or is the player if (tag.CompareTo("Player") == 0) { currentHealth -= gameObject.GetComponent <PlayerWeapons>().Hit(otherCollider.damageAmount); } else { currentHealth -= otherCollider.damageAmount; } //set tags for possible scoring lastColliderTag = other.transform.root.tag; }
void OnEnable() { if (!isServer) { return; } handler = GetComponent <ObjectCollisionHandler>(); StartCoroutine(KillObject()); }
public void CmdActivate(GameObject player) { ObjectCollisionHandler playerCollisionHandler = player.GetComponent <ObjectCollisionHandler>(); PlayerWeapons playerWeapons = player.GetComponent <PlayerWeapons>(); if (healthDef.activated) { if (healthDef.increaseMax) { playerCollisionHandler.maxHealth += healthDef.amount; } playerCollisionHandler.AddHealth(healthDef.amount); } if (energyDef.activated) { if (energyDef.increaseMax) { playerWeapons.maxEnergy += energyDef.amount; } playerWeapons.AddEnergy(energyDef.amount); } if (changeWeaponDef.activated) { playerWeapons.ChangeWeapon(changeWeaponDef.weaponType, true); } if (changeMissileDef.activated) { playerWeapons.ChangeMissile(changeMissileDef.missileType, changeMissileDef.amount, true); } if (spawnObjectDef.activated) { Pools.Initialize(spawnObjectDef.objectToSpawn, transform.position, Quaternion.identity); } if (spawnTurretDef.activated) { playerWeapons.AddTurret(1); } if (spawnGunDef.activated) { playerWeapons.AddGuns(1); } }
void OnTriggerEnter(Collider other) { //On collision, damage the next object and continue from there if (collideDefinitions.collidesWith(other)) { //initial damage is handled by the collision handler //find information between the two locations Vector3 direction = rootTransform.position - other.transform.position; Vector3 middle = (rootTransform.position + other.transform.position) / 2.0f; float factor = 1.5f; //Create the rod Transform rodTransform = rod.GetComponent <Transform>(); rodTransform.position = middle; rodTransform.rotation = Quaternion.FromToRotation(Vector3.right, direction); rodTransform.Rotate(new Vector3(90, 0, 0)); GameObject newRod = Pools.Initialize(rod, rodTransform.position, rodTransform.rotation); newRod.transform.localScale = new Vector3(direction.magnitude * factor, 0.5f, 0.5f); //move this handler onto the other's location and reset it rootTransform.position = other.transform.position; detector.radius = 0; //damage the other element ObjectCollisionHandler handler = other.GetComponent <ObjectCollisionHandler>(); //if no collider exists, then attempt to take from parent GameObject otherObject = other.gameObject; while (handler == null) { otherObject = otherObject.transform.parent.gameObject; handler = otherObject.GetComponentInParent <ObjectCollisionHandler>(); } handler.Damage(damageAmount, tag); Pools.Initialize(explosion, rootTransform.position, rootTransform.rotation); //increase hits performed hitsPerformed++; } }
void Start() { //Set player variables AddGuns(numStartingGuns); playerCollision = GetComponent <ObjectCollisionHandler>(); }