public void Attack(bool isMoving, bool attack) { //creates a projectile clone if (attack && (attackTime <= Time.time && !isCreated)) { //creates the projectile projectile = Instantiate(projectilePrefab, attackSource.position, attackSource.rotation); projectileScript = projectile.GetComponent <ProjectileManager>(); //updates and fetches projectile's data projectileScript.SetPlayerMoving(isMoving); fireRate = fireRates[projectileScript.GetPName()]; explodeType = projectileScript.GetExplosionType(); //adds the score and updates the attack time GameplayScript.current.AddScore(scores["fire"]); attackTime = fireRate + Time.time; //start waiting if it's a detonation projectile if (explodeType == explosionType.Detonate) { isCreated = true; } } //detonates the projectile using the button else if (attack && projectileScript != null) { StopCoroutine(coro); projectileScript.DetonateProjectile(); isCreated = false; } }
public ExplodeScript Setup(explosionType explosionType, float power, float radius) { ExplosionType = explosionType; Power = power; Radius = radius; return(this); }
private GameObject getExplodeEffectObject(explosionType explosionType) { GameObject go = null; if (explosionType == explosionType.Large) { go = (GameObject)Instantiate(AssetManager.Instance.Explosion.largeExplosionEffect); } else if (explosionType == explosionType.Small) { go = (GameObject)Instantiate(AssetManager.Instance.Explosion.smallExplosionEffect); } else if (explosionType == explosionType.Firework) { go = (GameObject)Instantiate(AssetManager.Instance.Explosion.fireworkeExplosionEffect); } else if (explosionType == explosionType.Big) { go = (GameObject)Instantiate(AssetManager.Instance.Explosion.bigExplosionEffect); } else if (explosionType == explosionType.Smoke) { go = (GameObject)Instantiate(AssetManager.Instance.Explosion.smokeExplosionEffect); } return(go); }
public Effect(effectType _type, soundType _s_type, explosionType _e_type, int _x, int _y) { type = _type; s_type = _s_type; e_type = _e_type; x = _x; y = _y; }
void Start() { //central throwing attributes s_Projectile.Init(rigid, playerMoving); explosionType explodeType = GetExplosionType(); //activates delayed detonation for some projectiles if (explodeType == explosionType.Delay || explodeType == explosionType.Detonate) { coro = StartCoroutine(WaitUntilDetonate()); } //instantly explode this one because why not else if (explodeType == explosionType.Instant) { ExplodeProjectile(); } }
public void Explody_Network(explosionType explosionType, Vector3 position) { fireEffect = getExplodeEffectObject(explosionType); if (ExplosionType == explosionType.Big) { fireEffect.transform.FindChild("Debris").localRotation = Quaternion.AngleAxis(UnityEngine.Random.Range(0f, 360f), Vector3.up); } fireEffect.transform.position = position; StartCoroutine(ParticleEffectEvent()); IEnumerator ParticleEffectEvent() { yield return(new WaitForFixedUpdate()); isExplodey = true; fireEffect.SetActive(true); fireEffect.AddComponent <TimedSelfDestruct>().Begin(30f); yield return(new WaitForSeconds(3f)); fireEffect.SetActive(false); } }
public void RequestExplosion(explosionType e_type, int _x, int _y) { all_effects.Add(new Effect(effectType.EXPLOSION, soundType.SHOOT, explosionType.SMALL, _x, _y)); }
public void LoadExplosion(ContentManager cont_man, string _path, explosionType e_type) { expls[(int)e_type] = new Sprite(); expls[(int)e_type].Load(cont_man, _path, 16, 16, 200); }
public void Explodey(explosionType explosiontype, Vector3 position, float power, float radius) { StartCoroutine(explodey(explosiontype, position, power, radius)); }
private IEnumerator explodey(explosionType explosiontype, Vector3 position, float power, float radius) { if (StatMaster.isClient) { yield break; } if (isExplodey) { yield break; } else { fireEffect = getExplodeEffectObject(explosiontype); if (ExplosionType == explosionType.Big) { fireEffect.transform.FindChild("Debris").localRotation = Quaternion.AngleAxis(UnityEngine.Random.Range(0f, 360f), Vector3.up); } fireEffect.transform.position = position; if (!StatMaster.isClient) { var message = ExplodyMessage.CreateMessage((int)explosiontype, position); ModNetworking.SendToAll(message); } } yield return(new WaitForFixedUpdate()); isExplodey = true; fireEffect.SetActive(true); OnExplode?.Invoke(); //定义爆炸位置为炸弹位置 Vector3 explosionPos = position; //这个方法用来返回球型半径之内(包括半径)的所有碰撞体collider[] Collider[] colliders = Physics.OverlapSphere(explosionPos, radius); //遍历返回的碰撞体,如果是刚体,则给刚体添加力 foreach (Collider hit in colliders) { if (hit.attachedRigidbody != null) { float force = UnityEngine.Random.Range(30000f, 50000f) * power * (Vector3.Distance(hit.transform.position, explosionPos) / (radius + 0.25f)); hit.attachedRigidbody.AddExplosionForce(force, explosionPos, radius); hit.attachedRigidbody.AddTorque(force * Vector3.Cross((hit.transform.position - explosionPos), Vector3.up)); reduceBlockHealth(hit.attachedRigidbody.gameObject); } } OnExploded?.Invoke(colliders); yield return(new WaitForSeconds(3f)); fireEffect.SetActive(false); OnExplodeFinal?.Invoke(); //------------------------------------------------------------- void reduceBlockHealth(GameObject gameObject) { var bhb = gameObject.GetComponent <BlockHealthBar>(); if (bhb != null) { bhb.DamageBlock(1); } } //--------------------------------------------------------------- }
public void LoadExplosion(ContentManager cont_man, string _path, explosionType e_type) { expls[(int)e_type] = new Sprite(); expls[(int)e_type].Load(cont_man, _path, 16, 16, 200); // draw an explosion }