void Update() { changeDirCooldown -= Time.deltaTime; if ((chasing == false) || (target == null)) { processIdleState(); } else { processChaseInRangeState(); } //hit boxes if any RaycastHit2D[] hits = Physics2D.RaycastAll(this.transform.position + new Vector3(0, 1, 0), new Vector3(direction, 0, 0), 1f, movement.layersToSense); foreach (RaycastHit2D hit in hits) { DamageAcceptor da = hit.collider.gameObject.GetComponent <DamageAcceptor>(); if (da != null) { if (Time.time - prevAttackTime > 0.5f) { prevAttackTime = Time.time; DoDamage(da, 5, Vector2.up * 20000); } } } }
public void ReportKill(DamageAcceptor killed) { //AcceptorAndCooldown anc = acceptorsInZone.Find(x => x.da == killed); //if (anc != null) { //acceptorsInZone.Remove(anc); } }
public void ReportKill(DamageAcceptor killed) { //slevel.IncreaseLevel(UnityEngine.Random.Range(1,5)); GameObject popup = Instantiate(Resources.Load("KillPopup", typeof(GameObject)), ((Component)killed).gameObject.transform.position + Vector3.up * 2, Quaternion.identity, gpParent.transform) as GameObject; }
protected virtual void DoDamage(DamageAcceptor acceptor, float damage, Vector2 knockback) { Registry.instance.damageAcceptors.doTargetDamage( acceptor, GetComponentInParent <Tag>().gameObject, damage, "normal", knockback); }
/*void OnTriggerExit2Dbcp(Collider2D other) * { * DamageAcceptor otherDA = other.gameObject.GetComponent<DamageAcceptor>(); * if (otherDA != null) * { * AcceptorAndCooldown anc = acceptorsInZone.Find(x => x.da == otherDA); * if (anc != null) * { * acceptorsInZone.Remove(anc); * } * } * }*/ void DoDamage(DamageAcceptor acceptor, float damage, Vector2 knockback) { Registry.instance.damageAcceptors.doTargetDamage( acceptor, gameObject, damage, "normal", knockback); }
/* * void Update() * { * //UpdateCooldowns(); * } * void UpdateCooldowns() * { * foreach(AcceptorAndCooldown anc in acceptorsInZone) * { * if(anc.da == null) * { * acceptorsInZone.Remove(anc); * break; * } * anc.cooldown -= Time.deltaTime; * if(anc.cooldown <= 0) * { * anc.cooldown = 1f; * DoDamage(anc.da, damage, new Vector2(0,0)); * break; * } * } * }*/ void OnTriggerStay2D(Collider2D other) { DamageAcceptor otherDA = other.gameObject.GetComponent <DamageAcceptor>(); if (otherDA != null) { //acceptorsInZone.Add(new AcceptorAndCooldown(otherDA)); DoDamage(otherDA, damage, new Vector2((other.transform.position - transform.position).normalized.x * knockback.x, knockback.y)); } }
/* * public void doTargetDamage(DamageAcceptor damageAcceptor, GameObject argInSource, float argInDmg, string argInDamageType, Vector2 argInKnockBack) * { * if (damageAcceptor != null) * { * if (((Component)damageAcceptor).gameObject != argInSource) * { * DamageArgs args = new DamageArgs(); * args.knockback = argInKnockBack; * args.dmg = argInDmg; * args.source = argInSource; * args.type = argInDamageType; * * damageAcceptor.acceptDamage(args); * } * } * }*/ public void doTargetDamage(DamageAcceptor damageAcceptor, GameObject argInSource, float argInDmg, string argInDamageType, Vector2 argInKnockBack /*, List<string> argInIgnoreGroups*/) { if (damageAcceptor != null) { if (((Component)damageAcceptor).gameObject != argInSource) { //if (!(damageAcceptor.groups.Intersect(argInIgnoreGroups).Any())) { DamageArgs args = new DamageArgs(); args.knockback = argInKnockBack; args.dmg = argInDmg; args.source = argInSource; args.type = argInDamageType; damageAcceptor.acceptDamage(args); } } } }
public override bool Engage(Vector3 newTarget) { bool result = false; if (cooldown <= 0f) { //LineRenderer lr = GetComponentInChildren<LineRenderer>(); Vector3[] positions = new Vector3[2]; positions[0] = this.transform.position; positions[1] = this.transform.position + ((newTarget - this.transform.position).normalized * 100); cooldown = (1f / fireRate); audioSource.Play(); RaycastHit2D[] hits = Physics2D.RaycastAll(positions[0], positions[1] - positions[0], range); //lazer effect /*GameObject lazer =*/ Instantiate(Resources.Load("Lazer", typeof(GameObject)), barrel.transform.position, Quaternion.FromToRotation(Vector3.right, newTarget - this.transform.position), gpParent.transform) /* as GameObject*/; //// foreach (RaycastHit2D hit in hits) { DamageAcceptor acceptor = hit.collider.gameObject.GetComponent <DamageAcceptor>(); if ((acceptor != null) && (acceptor != this.GetComponentInParent <DamageAcceptor>())) { registry.damageAcceptors.doTargetDamage( acceptor, GetComponentInParent <Tag>().gameObject, damage, "normal", new Vector2(0, 0)); } } result = true; } return(result); }
bool CanMoveTo(float direction) { sideTouch = false; //if forward is free RaycastHit2D[] hits = Physics2D.RaycastAll(transform.position + new Vector3(0f, 0.3f, 0f), new Vector3(Mathf.Sign(direction), 0f, 0f), 2f); foreach (RaycastHit2D hit in hits) { if (hit.collider.GetComponent <PlayerTag>()) { if ((hit.distance < 0.6f)) { DamageAcceptor da = hit.collider.GetComponent <DamageAcceptor>(); if ((da != null)) { if (Time.time - prevAttackTime > 2f) { prevAttackTime = Time.time; DoDamage(da, damage, direction * 3000 * Vector2.right); } } } } if (hit.collider.gameObject.GetComponent <BorderTag>() != null) { sideTouch = true; } } if (!sideTouch) { //if forward-down is a floor if (true == Physics2D.Raycast(transform.position + new Vector3(Mathf.Sign(direction) * 1, 0.2f, 0), new Vector3(0, -1, 0), 0.5f, layersToSense)) { return(true); } } return(false); }
public override bool Engage(Vector3 newTarget) { bool result = false; if ((Time.time - previousShotTime) >= (1f / fireRate)) { if (engineAudio.isPlaying && engineAudio.clip == gasSound) { //if (engineAudio.volume < 1) { //engineAudio.volume = Mathf.Clamp01(engineAudio.volume + Time.deltaTime * 30)/2; } } else { engineAudio.clip = gasSound; engineAudio.loop = true; engineAudio.Play(); //engineAudio.volume = 0f; } gasCooldown = 0.3f; previousShotTime = Time.time; Collider2D[] cols = new Collider2D[5]; int count = GetComponent <Collider2D>().GetContacts(cols); if (count > 0) { cutAudio.Play(); GameObject bulletHitEffect = Instantiate(Resources.Load("BulletHitEffect", typeof(GameObject)), gpParent.transform) as GameObject; bulletHitEffect.transform.position = new Vector3(barrel.transform.position.x, barrel.transform.position.y, -2f); List <DamageAcceptor> acceptors = new List <DamageAcceptor>(); for (int i = 0; (i < count) && (i < cols.Length); i++) { DamageAcceptor acceptor = cols[i].gameObject.GetComponent <DamageAcceptor>(); if (/*(cols[i].isTrigger) ||*/ ((acceptor != null) && (acceptor == this.GetComponentInParent <DamageAcceptor>())) || (cols[i].usedByEffector)) { continue; } if (acceptor != null) { if (acceptors.Contains(acceptor)) { continue; } acceptors.Add(acceptor); registry.damageAcceptors.doTargetDamage( acceptor, GetComponentInParent <Tag>().gameObject, damage, "melee", (newTarget - this.transform.position).normalized * 2000f); //if ((((Component)acceptor).gameObject.GetComponent<StickStats>() != null) || (((Component)acceptor).gameObject.GetComponent<Ragdoll>() != null)) { //bulletHitEffect.GetComponent<ParticleSystem>().startColor = Color.red; //bulletHitEffect.GetComponent<ParticleSystem>().startSize *= 2; } } } acceptors.Clear(); } result = true; } return(result); }
public AcceptorAndCooldown(DamageAcceptor argInAcceptor) { da = argInAcceptor; cooldown = 1f; }
public void RemoveDamageAcceptor(DamageAcceptor argInDamageAcceptor) { damageAcceptors.RemoveAll(x => x == argInDamageAcceptor); }
public void AddDamageAcceptor(DamageAcceptor argInDamageAcceptor) { damageAcceptors.Add(argInDamageAcceptor); }
//bool fired = false; void ProcessAttackState() { preAttackCooldown -= Time.deltaTime; if (preAttackCooldown <= 0f) { preAttackCooldown = 0f; //anim.SetTrigger("Attack"); /*Vector3 translation = (attackDirection).normalized * Time.deltaTime * attackMoveSpeed * Mathf.Sin(90f * (1 - passedAttackDistance/attackDistance) ); * transform.position += translation; * //transform.Translate(translation); * passedAttackDistance += translation.magnitude; * if (passedAttackDistance >= attackDistance) * { * passedAttackDistance = 0f; * attackCooldown = 1 / attackFrequency; * preAttackCooldown = preAttackTime; * }*/ passedFireTime += Time.deltaTime; if (passedFireTime <= 1f) { ParticleSystem fire = weap.GetComponentInChildren <ParticleSystem>();//Instantiate(firePrefab, transform.position, Quaternion.identity, transform); fire.Play(); //Debug.Log("FIRE_Flamethrower"); RaycastHit2D[] hits = Physics2D.RaycastAll(fire.transform.position, fire.transform.right * Mathf.Sign(this.transform.localScale.x), passedFireTime * fire.startSpeed); Debug.DrawLine(fire.transform.position, fire.transform.position + (fire.transform.right * Mathf.Sign(this.transform.localScale.x) * passedFireTime * fire.startSpeed), Color.green); foreach (RaycastHit2D hit in hits) { DamageAcceptor da = hit.collider.GetComponent <DamageAcceptor>(); if (da != null) { DoDamage(da, damage, fire.transform.right * Mathf.Sign(this.transform.localScale.x) * knockback); } } } else { passedFireTime = 0f; //fired = false; ParticleSystem fire = weap.GetComponentInChildren <ParticleSystem>();//Instantiate(firePrefab, transform.position, Quaternion.identity, transform); fire.Stop(); attackCooldown = 1 / attackFrequency; preAttackCooldown = preAttackTime; weap.transform.rotation = Quaternion.identity; anim.SetFloat("LookAngle", 0); } } else { //anim.SetTrigger("PreAttack"); // flamethrower rotate float degreesToRotate = Quaternion.FromToRotation(Vector3.right * Mathf.Sign(transform.localScale.x), (target.transform.position + Vector3.up) - weap.transform.position).eulerAngles.z; weap.transform.rotation = Quaternion.AngleAxis(degreesToRotate, Vector3.forward); lookAtDirection = Mathf.Sign(target.transform.position.x - transform.position.x); this.transform.localScale = new Vector3(lookAtDirection, 1, 1); transform.rotation = Quaternion.identity; float lookAngleForAnimator = weap.transform.rotation.eulerAngles.z; if (Mathf.Abs(lookAngleForAnimator) > 90) { lookAngleForAnimator -= 360; } lookAngleForAnimator *= Mathf.Sign(transform.localScale.x); anim.SetFloat("LookAngle", lookAngleForAnimator); } }
public override bool Engage(Vector3 newTarget) { bool result = false; if ((Time.time - previousShotTime) >= (1f / fireRate)) { previousShotTime = Time.time; mgShootEffect.Play(); float localdmg = damage; RaycastHit2D[] hits = Physics2D.RaycastAll(this.transform.position, newTarget - this.transform.position, 30f); Array.Sort(hits, delegate(RaycastHit2D hit1, RaycastHit2D hit2) { return(hit1.distance.CompareTo(hit2.distance)); }); List <DamageAcceptor> acceptors = new List <DamageAcceptor>(); foreach (RaycastHit2D hit in hits) { DamageAcceptor acceptor = hit.collider.gameObject.GetComponent <DamageAcceptor>(); if ( /*(hit.collider.isTrigger) ||*/ ((acceptor != null) && (acceptor == this.GetComponentInParent <DamageAcceptor>())) || (hit.collider.usedByEffector) || (hit.collider.gameObject == this.gameObject)) { continue; } GameObject bulletHitEffect = Instantiate(Resources.Load("BulletHitEffect", typeof(GameObject)), gpParent.transform) as GameObject; bulletHitEffect.transform.position = new Vector3(hit.point.x, hit.point.y, -2f); if (acceptor != null) { if (acceptors.Contains(acceptor)) { continue; } acceptors.Add(acceptor); registry.damageAcceptors.doTargetDamage( acceptor, GetComponentInParent <Tag>().gameObject, (int)localdmg, "normal", (newTarget - this.transform.position).normalized * 500f); //if ( (((Component)acceptor).gameObject.GetComponent<StickStats>() != null) || (((Component)acceptor).gameObject.GetComponent<Ragdoll>() != null)) { //bulletHitEffect.GetComponent<ParticleSystem>().startColor = Color.red; //bulletHitEffect.GetComponent<ParticleSystem>().startSize *= 2; } } if (!hit.collider.isTrigger) { localdmg *= 0.8f; } if (localdmg <= damage / 10) { break; } } acceptors.Clear(); audioSource.Play(); result = true; } return(result); }