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); }
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); }
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); }
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); }
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); }
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); }
public static void ReadObjectSingularityMine(this NetIncomingMessage msg, SingularityMine s) { msg.ReadObjectSphere(s); }
public static void WriteObjectSingularityMine(this NetOutgoingMessage msg, SingularityMine s) { msg.WriteObjectSphere(s); }