IEnumerator ExplodeCoroutine(bool doubleRadius = false) { inExplodeCoroutine = true; if (GameManager.S.inGame) { SoundManager.instance.Play("BombExplode"); SoundManager.instance.Play("Explosion"); } hasExploded = true; hitbox.enabled = false; GetComponent <SpriteRenderer>().enabled = false; GetComponentInChildren <ParticleSystem>().Play(); Destroy(gameObject, 2.5f); Collider[] allObjectsHit = Physics.OverlapSphere(transform.position, (doubleRadius ? 2 : 1) * explosionRadius); ProximityMine nearestOtherMine = null; foreach (var obj in allObjectsHit) { //If any players are within the blast zone if (obj.gameObject.tag == "Player") { //Ignore the mine's owner Ship shipHit = obj.gameObject.GetComponentInParent <Ship>(); if (shipHit.playerEnum == owningPlayer) { continue; } //Deal damage to any other player else { shipHit.TakeDamage(flatDamage); } } //Deal damage to any protag ship caught in the explosion else if (obj.gameObject.tag == "ProtagShip") { ProtagShip shipHit = obj.gameObject.GetComponentInParent <ProtagShip>(); shipHit.TakeDamage(flatDamage); } //Blow up any other nearby proximity mines, with twice the radius (more mines == bigger explosion) else if (obj.gameObject.tag == "ProximityMine") { if (nearestOtherMine == null) { nearestOtherMine = obj.gameObject.GetComponent <ProximityMine>(); } } } if (nearestOtherMine != null) { yield return(new WaitForSeconds(otherMineDetonationDelay)); nearestOtherMine.Explode(true); } inExplodeCoroutine = false; }
private void Explode() { //start explosion exploding = true; Instantiate(explosion, transform.position, transform.rotation); Destroy(this.gameObject); //gets all of the collider's within the exoplosion's range Collider[] hitColliders = Physics.OverlapSphere(transform.position, globalProximityRadius); for (int i = 0; i < hitColliders.Length; i++) { //kill player if in range if (hitColliders[i].tag == "Player") { Vector3 collisionPosition = hitColliders[i].transform.position; Quaternion collisionRotation = Quaternion.LookRotation(hitColliders[i].transform.up); /* * if (!PlayerInformation.instance.dead) * { * PlayerInformation.instance.PlayerDeath(collisionPosition, collisionRotation); * }*/ } //sets off chain reaction of mine explosions if they are within the blast radius if (hitColliders[i].tag == "Mine" && (hitColliders[i].gameObject.name != this.gameObject.name)) { ProximityMine pm = hitColliders[i].gameObject.GetComponent <ProximityMine>(); if (pm.exploding == false) { pm.Explode(); } } } //gets all of the collider's within the force distance range to add explosion force to them float globalForceRadius = proximityCollider.transform.lossyScale.x * (forceRadius); Collider[] forceColliders = Physics.OverlapSphere(transform.position, globalForceRadius); for (int i = 0; i < forceColliders.Length; i++) { //gets parent rigid body Rigidbody rb = forceColliders[i].transform.root.gameObject.GetComponent <Rigidbody>(); if (rb != null && (forceColliders[i].gameObject.name != this.gameObject.name)) { rb.AddExplosionForce(explosionForce, transform.position, globalForceRadius, 1f, ForceMode.Impulse); } } }
private Transform[] FindAllTankMines(Collider[] allObjects) { List <Transform> mines = new List <Transform>(); for (int i = 0; i < allObjects.Length; i++) { ProximityMine thisMine = allObjects[i].GetComponent <ProximityMine>(); if (thisMine != null && thisMine.owningPlayer != ai.thisShip.playerEnum) { mines.Add(thisMine.transform); } } return(mines.ToArray()); }
void Explode(float explosionDamage, float explosionRadius) { if (GameManager.S.inGame) { SoundManager.instance.Play("Explosion"); } Collider[] allObjectsHit = Physics.OverlapSphere(transform.position, explosionRadius); foreach (var obj in allObjectsHit) { if (obj.gameObject.tag == "Player") { Ship shipHit = obj.gameObject.GetComponentInParent <Ship>(); if (shipHit.playerEnum == owningPlayer) { return; } else { shipHit.TakeDamage(CalculateDamageDealt(obj.transform, explosionDamage, explosionRadius)); } } else if (obj.gameObject.tag == "ProtagShip") { ProtagShip shipHit = obj.gameObject.GetComponentInParent <ProtagShip>(); shipHit.TakeDamage(CalculateDamageDealt(obj.transform, explosionDamage, explosionRadius)); } } int numMinesSpawned = Random.Range(minNumBombs, maxNumBombs); for (int i = 0; i < numMinesSpawned; i++) { ProximityMine newMine = Instantiate(minePrefab, transform.position, new Quaternion()) as ProximityMine; newMine.owningPlayer = owningPlayer; } }
public static GameObject BuildPrefab() { var bomb = SpriteBuilder.SpriteFromResource("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", new GameObject("InfantryGrenade")); bomb.SetActive(false); FakePrefab.MarkAsFakePrefab(bomb); var animator = bomb.AddComponent <tk2dSpriteAnimator>(); var collection = (PickupObjectDatabase.GetById(108) as SpawnObjectPlayerItem).objectToSpawn.GetComponent <tk2dSpriteAnimator>().Library.clips[0].frames[0].spriteCollection; var deployAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_002.png", collection), }, "infantrygrenade_throw", tk2dSpriteAnimationClip.WrapMode.Once); deployAnimation.fps = 12; foreach (var frame in deployAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } var explodeAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_explode_001.png", collection), }, "infantrygrenade_explode", tk2dSpriteAnimationClip.WrapMode.Once); explodeAnimation.fps = 30; foreach (var frame in explodeAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } var armedAnimation = SpriteBuilder.AddAnimation(animator, collection, new List <int> { SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_001.png", collection), SpriteBuilder.AddSpriteToCollection("NevernamedsItems/Resources/ThrowableActives/infantrygrenade_throw_002.png", collection), }, "infantrygrenade_primed", tk2dSpriteAnimationClip.WrapMode.LoopSection); armedAnimation.fps = 10.0f; armedAnimation.loopStart = 0; foreach (var frame in armedAnimation.frames) { frame.eventLerpEmissiveTime = 0.5f; frame.eventLerpEmissivePower = 30f; } var audioListener = bomb.AddComponent <AudioAnimatorListener>(); audioListener.animationAudioEvents = new ActorAudioEvent[] { new ActorAudioEvent { eventName = "Play_OBJ_mine_beep_01", eventTag = "beep" } }; ProximityMine proximityMine = new ProximityMine { explosionData = new ExplosionData { useDefaultExplosion = false, doDamage = true, forceUseThisRadius = false, damageRadius = 3f, damageToPlayer = 0, damage = 30, breakSecretWalls = false, secretWallsRadius = 3.5f, forcePreventSecretWallDamage = false, doDestroyProjectiles = true, doForce = true, pushRadius = 3, force = 25, debrisForce = 12.5f, preventPlayerForce = false, explosionDelay = 0.1f, usesComprehensiveDelay = false, comprehensiveDelay = 0, playDefaultSFX = false, doScreenShake = true, ss = new ScreenShakeSettings { magnitude = 1, speed = 6.5f, time = 0.22f, falloff = 0, direction = new Vector2(0, 0), vibrationType = ScreenShakeSettings.VibrationType.Auto, simpleVibrationStrength = Vibration.Strength.Medium, simpleVibrationTime = Vibration.Time.Normal }, doStickyFriction = true, doExplosionRing = true, isFreezeExplosion = false, freezeRadius = 5, IsChandelierExplosion = false, rotateEffectToNormal = false, ignoreList = new List <SpeculativeRigidbody>(), overrideRangeIndicatorEffect = null, effect = StaticExplosionDatas.explosiveRoundsExplosion.effect, freezeEffect = null, }, explosionStyle = ProximityMine.ExplosiveStyle.TIMED, detectRadius = 3.5f, explosionDelay = 1f, usesCustomExplosionDelay = false, customExplosionDelay = 0.1f, deployAnimName = "infantrygrenade_throw", explodeAnimName = "infantrygrenade_explode", idleAnimName = "infantrygrenade_primed", MovesTowardEnemies = false, HomingTriggeredOnSynergy = false, HomingDelay = 3.25f, HomingRadius = 10, HomingSpeed = 4, }; var boom = bomb.AddComponent <ProximityMine>(proximityMine); return(bomb); }
void Awake() { minePrefab = Resources.Load <ProximityMine>("Prefabs/ProximityMine"); }
public virtual void onExplode(ProximityMine obj, Point3F pos) { }
public virtual void onTriggered(ProximityMine obj, SceneObject target) { }
void Update() { if (LevelStarted) { Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector3Int hoveredTilePos = FunctionalTilemap.WorldToCell(mousePos); Vector3 hoveredTileCenter = FunctionalTilemap.CellToWorld(hoveredTilePos) + new Vector3(0.5f, 0.5f, 0f); GhostTilemap.ClearAllTiles(); canPlace = false; if (hotbarSelection >= 0) { Buildable selectedBuildable = BuildableHotbar[hotbarSelection]; Color c; if (Money >= selectedBuildable.Price && (hoveredTileCenter - transform.position).magnitude < PlacementDistance && FloorTilemap.HasTile(hoveredTilePos) && !(FullBlockingTilemap.HasTile(hoveredTilePos) || WalkBlockingTilemap.HasTile(hoveredTilePos) || FunctionalTilemap.HasTile(hoveredTilePos))) { canPlace = true; c = Color.white; } else { c = Color.red; c.g = 0.5f; c.b = 0.5f; } c.a = 0.5f; GhostTilemap.color = c; GhostTilemap.SetTile(hoveredTilePos, selectedBuildable.Tile); } if (Time.time > nextSecondTime) { nextSecondTime += 1f; } if (Alive) { float lookAngle = Vector2.SignedAngle(Vector2.up, (Vector2)(mousePos - transform.position)); transform.rotation = Quaternion.Euler(0f, 0f, lookAngle); for (int i = 0; i < BuildableHotbar.Length; i++) { if (Input.GetButtonDown($"Item {i + 1}")) { hotbarSelection = i; } } Color c = Color.white; if (Time.time - lastDamageTime < 0.5f) { hasDamageCooldown = true; c = Color.red; } else { hasDamageCooldown = false; } GetComponent <SpriteRenderer>().color = c; if (Input.GetButtonDown("Left Click")) { if (hotbarSelection >= 0 && canPlace) { Buildable selectedBuildable = BuildableHotbar[hotbarSelection]; FunctionalTilemap.SetTile(hoveredTilePos, selectedBuildable.Tile); GameObject buildableObject = Instantiate(selectedBuildable.Object, hoveredTileCenter, Quaternion.identity); Money -= selectedBuildable.Price; Turret turret = buildableObject.GetComponent <Turret>(); if (turret != null) { turret.BeatTime = nextSecondTime; } ProximityMine mine = buildableObject.GetComponent <ProximityMine>(); if (mine != null) { mine.Tilemap = FunctionalTilemap; mine.BeatTime = nextSecondTime; } ShieldEmitter shield = buildableObject.GetComponent <ShieldEmitter>(); if (shield != null) { shield.Tilemap = ShieldTilemap; } } } if (Input.GetButtonDown("Right Click")) { hotbarSelection = -1; } } } }