示例#1
0
    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;
    }
示例#2
0
    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);
            }
        }
    }
示例#3
0
        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());
        }
示例#4
0
    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);
        }
示例#6
0
 void Awake()
 {
     minePrefab = Resources.Load <ProximityMine>("Prefabs/ProximityMine");
 }
 public virtual void onExplode(ProximityMine obj, Point3F pos)
 {
 }
 public virtual void onTriggered(ProximityMine obj, SceneObject target)
 {
 }
示例#9
0
    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;
                }
            }
        }
    }