private void SpawnNewBullet(ISceneObject target, ISceneObject ignored = null) { SingularityExplodingBullet bullet = new SingularityExplodingBullet(me.SceneMgr, IdMgr.GetNewId(me.SceneMgr.GetCurrentPlayer().GetId())); Vector targettedPosition = AIUtils.ComputeDestinationPositionToHitTarget(target, meBullet.Owner.Data.BulletSpeed, me.Center, me.SceneMgr.GetRandomGenerator()); SceneObjectFactory.InitSingularityBullet(bullet, me.SceneMgr, targettedPosition, me.Position, meBullet.Owner); PointCollisionShape cs = new PointCollisionShape(); cs.Center = bullet.Center; bullet.CollisionShape = cs; ExcludingExplodingSingularityBulletControl c = new ExcludingExplodingSingularityBulletControl(); c.Speed = SharedDef.BULLET_EXPLOSION_SPEED; c.Strength = SharedDef.BULLET_EXPLOSION_STRENGTH; c.StatReported = true; if (ignored != null) { c.IgnoredObjects.Add(ignored.Id); } bullet.AddControl(c); bullet.AddControl(new StickyPointCollisionShapeControl()); NetOutgoingMessage msg = me.SceneMgr.CreateNetMessage(); (bullet as ISendable).WriteObject(msg); me.SceneMgr.SendMessage(msg); me.SceneMgr.DelayedAttachToScene(bullet); }