protected override ISceneObject SpawnMine(Point point)
        {
            SingularityMine mine = SceneObjectFactory.CreateAsteroidDroppingSingularityMine(SceneMgr, point, Owner);
            Vector          dir  = new Vector(endPoint.X - startPoint.X, endPoint.Y - startPoint.Y);

            dir.Normalize();
            mine.Direction = dir;

            LinearMovementControl c = mine.GetControlOfType <LinearMovementControl>();

            c.Speed = Owner.Data.MineFallingSpeed * SharedDef.MINE_LAUNCHER_SPEED_MODIFIER;

            if (SceneMgr.GameType != Gametype.SOLO_GAME)
            {
                NetOutgoingMessage msg = SceneMgr.CreateNetMessage();
                (mine as ISendable).WriteObject(msg);
                SceneMgr.SendMessage(msg);
            }

            HighlightingControl hc = new HighlightingControl();

            mine.AddControl(hc);

            lastMine = mine;
            SceneMgr.DelayedAttachToScene(mine);

            return(mine);
        }
Example #2
0
        public static SingularityMine CreatePowerlessMine(SceneMgr mgr, Vector pos, Vector dir, Player plr)
        {
            SingularityMine mine = new SingularityMine(mgr, IdMgr.GetNewId(mgr.GetCurrentPlayer().GetId()));

            mine.Position  = pos;
            mine.Owner     = plr;
            mine.Radius    = 2;
            mine.Direction = dir;
            mine.Color     = Colors.BlueViolet;
            mine.SetGeometry(SceneGeometryFactory.CreateMineImage(mine));

            SphereCollisionShape cs = new SphereCollisionShape();

            cs.Center           = mine.Center;
            cs.Radius           = mine.Radius;
            mine.CollisionShape = cs;

            PowerlessSingularityControl sc = new PowerlessSingularityControl();

            sc.Speed         = plr.Data.MineGrowthSpeed;
            sc.Strength      = plr.Data.MineStrength;
            sc.StatsReported = true;
            mine.AddControl(sc);

            mine.AddControl(new StickySphereCollisionShapeControl());
            return(mine);
        }
        private void ReceivedNewSingularityMineMsg(NetIncomingMessage msg)
        {
            SingularityMine s = new SingularityMine(this, -1);

            s.ReadObject(msg);
            s.Owner = GetOpponentPlayer();
            s.SetGeometry(SceneGeometryFactory.CreateSolidColorEllipseGeometry(s));
            DelayedAttachToScene(s);
            SyncReceivedObject(s, msg);
        }
        protected override void InitControl(ISceneObject me)
        {
            if (!(me is SingularityMine))
            {
                throw new InvalidOperationException("Cannot attach SingularityControl to non SingularityMine object");
            }

            hitObjects   = new List <long>();
            meMine       = me as SingularityMine;
            hitSomething = false;
        }
        protected virtual ISceneObject SpawnMine(Point point)
        {
            SingularityMine mine = SceneObjectFactory.CreateDroppingSingularityMine(SceneMgr, point, Owner);

            if (SceneMgr.GameType != Gametype.SOLO_GAME)
            {
                NetOutgoingMessage msg = SceneMgr.CreateNetMessage();
                (mine as ISendable).WriteObject(msg);
                SceneMgr.SendMessage(msg);
            }

            SceneMgr.DelayedAttachToScene(mine);
            return(mine);
        }
Example #6
0
        public static DrawingGroup CreateMineImage(SingularityMine mine)
        {
            DrawingGroup g = null;

            mine.SceneMgr.Invoke(new Action(() =>
            {
                BitmapImage bi = new BitmapImage();
                bi.BeginInit();

                bi.UriSource        = new Uri("pack://application:,,,/resources/images/projectiles/mine.png");
                bi.DecodePixelWidth = mine.Radius * 4;
                bi.EndInit();

                g = new DrawingGroup();
                ImageDrawing img = new ImageDrawing();
                img.Rect         = new Rect(new Size(mine.Radius * 2, mine.Radius * 2));

                ColorReplaceEffect effect = new ColorReplaceEffect();
                effect.ColorToOverride    = Colors.White;
                effect.ColorReplace       = mine.Owner.GetPlayerColor();

                RenderTargetBitmap rtb = new RenderTargetBitmap((int)mine.Radius * 2, (int)mine.Radius * 2, 96, 96, PixelFormats.Pbgra32);

                System.Windows.Shapes.Rectangle visual = new System.Windows.Shapes.Rectangle();
                visual.Fill   = new ImageBrush(bi);
                visual.Effect = effect;

                Size sz = new Size(mine.Radius * 2, mine.Radius * 2);
                visual.Measure(sz);
                visual.Arrange(new Rect(sz));

                rtb.Render(visual);
                img.ImageSource = rtb;

                g = new DrawingGroup();
                TransformGroup tg = new TransformGroup();
                tg.Children.Add(new TranslateTransform(mine.Position.X, mine.Position.Y));
                tg.Children.Add(new RotateTransform(mine.Rotation, mine.Radius, mine.Radius));
                g.Transform = tg;
                g.Children.Add(img);
            }));

            return(g);
        }
Example #7
0
        public override void DoCollideWith(ISceneObject other, float tpf)
        {
            // jinak by mohly miny kolidovat navzajem a spawnovat dalsi a dalsi powerless miny
            if (other is SingularityMine)
            {
                return;
            }

            if (collided.Contains(other.Id))
            {
                return;
            }

            collided.Add(other.Id);

            base.DoCollideWith(other, tpf);

            SingularityMine mine = SceneObjectFactory.CreatePowerlessMine(me.SceneMgr, me.Position, meMine.Direction, meMine.Owner);

            collided.Add(mine.Id);
            me.SceneMgr.DelayedAttachToScene(mine);
        }
Example #8
0
        public static SingularityMine CreateDroppingSingularityMine(SceneMgr mgr, Point point, Player plr)
        {
            SingularityMine mine = new SingularityMine(mgr, IdMgr.GetNewId(mgr.GetCurrentPlayer().GetId()));

            mine.Position  = new Vector(point.X, 0);
            mine.Owner     = plr;
            mine.Radius    = 12;
            mine.Direction = new Vector(0, 1);
            mine.Color     = Colors.BlueViolet;

            SphereCollisionShape cs = new SphereCollisionShape();

            cs.Center           = mine.Center;
            cs.Radius           = mine.Radius;
            mine.CollisionShape = cs;

            DroppingSingularityControl sc = new DroppingSingularityControl();

            sc.Speed    = plr.Data.MineGrowthSpeed;
            sc.Strength = plr.Data.MineStrength;
            mine.AddControl(sc);

            LinearMovementControl lmc = new LinearMovementControl();

            lmc.Speed = plr.Data.MineFallingSpeed;
            mine.AddControl(lmc);

            LinearRotationControl lrc = new LinearRotationControl();

            lrc.RotationSpeed = (float)FastMath.LinearInterpolate(0, Math.PI, mgr.GetRandomGenerator().NextDouble());
            mine.AddControl(lrc);

            mine.AddControl(new StickySphereCollisionShapeControl());

            mine.SetGeometry(SceneGeometryFactory.CreateMineImage(mine));

            return(mine);
        }
Example #9
0
        public static DrawingGroup CreateSolidColorEllipseGeometry(SingularityMine mine)
        {
            DrawingGroup d = null;

            mine.SceneMgr.Invoke(new Action(() =>
            {
                EllipseGeometry geom = new EllipseGeometry(new Point(mine.Radius, mine.Radius), mine.Radius, mine.Radius);
                d = new DrawingGroup();
                d.Children.Add(new GeometryDrawing(mine.FillBrush, new Pen(mine.BorderBrush, 1), geom));

                TransformGroup tg = new TransformGroup();
                tg.Children.Add(new TranslateTransform(mine.Position.X, mine.Position.Y));
                d.Transform = tg;

                /*
                 * RippleEffect eff = new RippleEffect();
                 * eff.Amplitude = 0.2;
                 * eff.Frequency = 60;
                 * path.Effect = eff;
                 */
            }));

            return(d);
        }
Example #10
0
 public static void ReadObjectSingularityMine(this NetIncomingMessage msg, SingularityMine s)
 {
     msg.ReadObjectSphere(s);
 }
Example #11
0
 public static void WriteObjectSingularityMine(this NetOutgoingMessage msg, SingularityMine s)
 {
     msg.WriteObjectSphere(s);
 }