public virtual void Hit(GameObject _target, Vector3 _hit_point) { if (Owner == null || Enabled == false) { return; } if (_target != null && ImpactBehaviour.RefusedByLayer(_target.layer)) { return; } ICEWorldEntity.SendDamage(Owner, _target, ImpactType, DamageMethodValue, DamageMethodName, _hit_point, ForceType, UnityEngine.Random.Range(ForceMin, ForceMax), ExplosionRadius); ImpactSound.Play(); ImpactEffect.Start(OwnerComponent); }
public override void Hit(GameObject _target, Vector3 _hit_point) { if (Owner == null || Enabled == false) { return; } if ((_target != null && ImpactBehaviour.RefusedByLayer(_target.layer)) || ImpactBehaviour.RefusedByHitCounter) { return; } ICEWorldEntity.SendDamage(Owner, _target, ImpactType, DamageMethodValue, DamageMethodName, _hit_point, ForceType, UnityEngine.Random.Range(ForceMin, ForceMax), ExplosionRadius); ImpactSound.Play(); ImpactEffect.Start(OwnerComponent); if (ImpactBehaviour.Enabled) { // Handle Projectile Rigidbody Rigidbody _rb = Owner.GetComponent <Rigidbody>(); if (_rb != null) { _rb.useGravity = false; _rb.isKinematic = true; _rb.constraints = RigidbodyConstraints.FreezeAll; } if (ImpactBehaviour.UseAttachOnHit) { WorldManager.AttachToTransform(Owner, _target.transform, false); } if (ImpactBehaviour.UseHideOnHit) { SystemTools.EnableRenderer(Owner.transform, false); } if (ImpactBehaviour.UseDestroyOnHit) { WorldManager.Destroy(Owner, ImpactBehaviour.DestroyDelay); } } }
public void Fire(Transform _target) { if (_target != null && DebugLogIsEnabled) { PrintDebugLog(this, "Fire - " + _target.name + " (" + _target.position + ")"); } if (Type == RangedWeaponAmmunitionType.Simulated && _target != null) { ICEWorldEntity.SendDamage(Owner, _target.gameObject, ImpactType, MethodDamage, MethodName, ForceType, UnityEngine.Random.Range(ForceMin, ForceMax), ExplosionRadius); } else if (Type == RangedWeaponAmmunitionType.Projectile || Type == RangedWeaponAmmunitionType.BallisticProjectile) { Vector3 _position = Vector3.zero; Quaternion _rotation = Quaternion.identity; if (Type == RangedWeaponAmmunitionType.Projectile) { if (_target != null) { _position = _target.position; } if (ProjectileSpawnPoint != null) { Debug.DrawRay(ProjectileSpawnPoint.transform.position, ProjectileSpawnPoint.transform.forward * 100); RaycastHit _hit; if (Physics.Raycast(ProjectileSpawnPoint.transform.position, ProjectileSpawnPoint.transform.forward, out _hit, Mathf.Infinity, -1, WorldManager.TriggerInteraction)) { _position = _hit.point; } } GameObject _projectile = WorldManager.Instantiate(Projectile, _position, _rotation); if (_projectile != null) { _projectile.name = Projectile.name; _projectile.transform.localScale = new Vector3(ProjectileScale, ProjectileScale, ProjectileScale); SystemTools.EnableColliders(_projectile.transform, false); Rigidbody _rb = _projectile.GetComponent <Rigidbody>(); if (_rb != null) { _rb.useGravity = false; _rb.isKinematic = true; _rb.constraints = RigidbodyConstraints.FreezeAll; } _projectile.transform.SetParent(_target, true); ICECreatureProjectile _p = _projectile.GetComponent <ICECreatureProjectile>(); if (_p != null) { _p.Hit(_target.gameObject, _position); } } } else if (Type == RangedWeaponAmmunitionType.BallisticProjectile) { if (ProjectileSpawnPoint != null) { _position = ProjectileSpawnPoint.transform.position; _rotation = ProjectileSpawnPoint.transform.rotation; } else { _position = Owner.transform.position; _rotation = Owner.transform.rotation; } GameObject _projectile = WorldManager.Instantiate(Projectile, _position, _rotation); if (_projectile != null) { _projectile.name = Projectile.name; _projectile.transform.localScale = new Vector3(ProjectileScale, ProjectileScale, ProjectileScale); Rigidbody _rb = _projectile.GetComponent <Rigidbody>(); if (_rb != null) { _rb.AddForce(ProjectileSpawnPoint.transform.TransformDirection(new Vector3(0, 0, ProjectileMuzzleVelocity))); } } } } }