Exemplo n.º 1
0
    private static void DealExplosiveDamage(ExplosiveType damageParams, Vector3 collisionPosition, IProjectile projectile)
    {
        var explosionPosition = collisionPosition.ToVector2();

        Collider2D[] colliders2D     = Physics2D.OverlapCircleAll(explosionPosition, damageParams.explosiveRadius);
        List <int>   gridInstanceIDs = new List <int>();

        //apply explosion knockback to all grids within explosion range
        for (int i = 0; i < colliders2D.Length; i++)
        {
            //casts the collider to an IBlock and then performs a null check so only blocks are damaged
            var colliderBlock = (IBlock)colliders2D[i].transform.GetComponent(typeof(IBlock));
            if (colliderBlock != null)
            {
                //Explosion knockback calculations
                var instanceID = colliderBlock.blockBaseClass.gridID;
                if (!gridInstanceIDs.Contains(instanceID))
                {
                    var shipObject = Extensions.GetFromTable(instanceID);
                    if (shipObject.rb2d == null)
                    {
                        Debug.LogWarning("ship object doesnt exist");
                    }
                    var shipCollider         = shipObject.rb2d;
                    var worldPosCenterOfMass = Extensions.GetWorldPosCenterOfMassFromGridID(instanceID);
                    shipCollider.AddForce((worldPosCenterOfMass - explosionPosition) * damageParams.explosiveForce);
                    gridInstanceIDs.Add(instanceID);
                }
                //applies damage
                colliderBlock.ApplyExplosiveDamageToBlock(damageParams.explosiveDamage);
            }
        }
        ((MonoBehaviour)projectile).transform.gameObject.Destroy();
    }
Exemplo n.º 2
0
        private bool HasPerm(BasePlayer player, ExplosiveType type)
        {
            switch (type)
            {
            case ExplosiveType.Grenade:
                return(permission.UserHasPermission(player.UserIDString, "martyrdom.grenade"));

            case ExplosiveType.Beancan:
                return(permission.UserHasPermission(player.UserIDString, "martyrdom.beancan"));

            case ExplosiveType.Explosive:
                return(permission.UserHasPermission(player.UserIDString, "martyrdom.explosive"));
            }
            return(false);
        }
Exemplo n.º 3
0
        private void TryDropExplosive(BasePlayer player)
        {
            ExplosiveType type = registeredMartyrs[player.userID];

            if (HasPerm(player, type))
            {
                if (HasEnoughRes(player, explosiveInfo[type].ItemID, 1))
                {
                    TakeResources(player, explosiveInfo[type].ItemID, 1);
                    CreateExplosive(type, player);
                    registeredMartyrs.Remove(player.userID);
                    return;
                }
            }
        }
Exemplo n.º 4
0
        public static Entity CreateExplosionSprite(Vector2 position, ExplosiveType explosiveType)
        {
            var entity = new Entity();

            var transformComponent       = new TransformComponent(position, new Vector2(32, 32));
            var skinComponent            = new SkinComponent("ExplosiveSprite");
            var explosiveSpriteComponent = new ExplosionSpriteComponent();

            explosiveSpriteComponent.ExplosiveType = explosiveType;
            explosiveSpriteComponent.TimeRemaining = 1000;

            entity.AddComponent(transformComponent);
            entity.AddComponent(skinComponent);
            entity.AddComponent(explosiveSpriteComponent);
            entity.AddComponent(new OneShotAnimationComponent());

            return(entity);
        }
Exemplo n.º 5
0
        private void CreateExplosive(ExplosiveType type, BasePlayer player)
        {
            ExplosiveInfo info   = explosiveInfo[type];
            BaseEntity    entity = GameManager.server.CreateEntity(info.PrefabName, player.transform.position + new Vector3(0, 1.5f, 0), new Quaternion(), true);

            entity.OwnerID       = player.userID;
            entity.creatorEntity = player;

            TimedExplosive explosive = entity.GetComponent <TimedExplosive>();

            explosive.timerAmountMax  = info.Fuse;
            explosive.timerAmountMin  = info.Fuse;
            explosive.explosionRadius = info.Radius;
            explosive.damageTypes     = new List <Rust.DamageTypeEntry> {
                new Rust.DamageTypeEntry {
                    amount = info.Damage, type = Rust.DamageType.Explosion
                }
            };
            explosive.Spawn();
        }