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(); }
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); }
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; } } }
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); }
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(); }