public void ApplyOrders(World world, float2 xy, MouseInput mi) { if (world.OrderGenerator == null) return; var orders = world.OrderGenerator.Order(world, xy.ToInt2(), mi).ToArray(); orders.Do( o => world.IssueOrder( o ) ); world.PlayVoiceForOrders(orders); }
public static void DoExplosion(Actor attacker, string weapontype, float2 pos, int altitude) { var args = new ProjectileArgs { src = pos.ToInt2(), dest = pos.ToInt2(), srcAltitude = altitude, destAltitude = altitude, firedBy = attacker, target = Target.FromPos(pos), weapon = Rules.Weapons[ weapontype.ToLowerInvariant() ], facing = 0 }; if (args.weapon.Report != null) Sound.Play(args.weapon.Report + ".aud", pos); DoImpacts(args); }
public void DrawSprite(Sprite s, float2 location, string palette, float2 size) { if (s.sheet != currentSheet) Flush(); currentSheet = s.sheet; Util.FastCreateQuad(vertices, indices, location.ToInt2(), s, Game.world.WorldRenderer.GetPaletteIndex(palette), nv, ni, size); nv += 4; ni += 6; if (++sprites >= spritesPerBatch) Flush(); }
public void DrawSprite(Sprite s, float2 location, int paletteIndex, float2 size) { Renderer.CurrentBatchRenderer = this; if (s.sheet != currentSheet) Flush(); if( nv + 4 > Renderer.TempBufferSize ) Flush(); currentSheet = s.sheet; Util.FastCreateQuad(vertices, location.ToInt2(), s, paletteIndex, nv, size); nv += 4; }
public void DrawSprite(Sprite s, float2 location, int paletteIndex, float2 size) { Renderer.CurrentBatchRenderer = this; if (s.sheet != currentSheet) { Flush(); } if (nv + 4 > Renderer.TempBufferSize) { Flush(); } currentSheet = s.sheet; Util.FastCreateQuad(vertices, location.ToInt2(), s, paletteIndex, nv, size); nv += 4; }
public void ApplyOrders(World world, float2 xy, MouseInput mi) { if (world.OrderGenerator == null) return; var orders = world.OrderGenerator.Order(world, xy.ToInt2(), mi).ToArray(); Game.orderManager.IssueOrders( orders ); // Find an actor with a phrase to say var done = false; foreach (var o in orders) { foreach (var v in o.Subject.TraitsImplementing<IOrderVoice>()) { if (Sound.PlayVoice(v.VoicePhraseForOrder(o.Subject, o), o.Subject, o.Subject.Owner.Country.Race)) { done = true; break; } } if (done) break; } }
public override void Draw() { buttons.Clear(); if (world.LocalPlayer == null) { return; } var manager = world.LocalPlayer.PlayerActor.Trait <SupportPowerManager>(); var powers = manager.Powers.Where(p => !p.Value.Disabled); var numPowers = powers.Count(); if (numPowers == 0) { return; } var rectBounds = RenderBounds; WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-top"), new float2(rectBounds.X, rectBounds.Y)); for (var i = 1; i < numPowers; i++) { WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51)); } WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51)); // Hack Hack Hack rectBounds.Width = 69; rectBounds.Height = 10 + numPowers * 51 + 21; var y = rectBounds.Y + 10; foreach (var kv in powers) { var sp = kv.Value; var image = spsprites[sp.Info.Image]; var drawPos = new float2(rectBounds.X + 5, y); var rect = new Rectangle(rectBounds.X + 5, y, 64, 48); if (rect.Contains(Viewport.LastMousePos)) { var pos = drawPos.ToInt2(); var tl = new int2(pos.X - 3, pos.Y - 3); var m = new int2(pos.X + 64 + 3, pos.Y + 48 + 3); var br = tl + new int2(64 + 3 + 20, 40); if (sp.TotalTime > 0) { br += new int2(0, 20); } if (sp.Info.LongDesc != null) { br += Game.Renderer.Fonts["Regular"].Measure(sp.Info.LongDesc.Replace("\\n", "\n")); } else { br += new int2(300, 0); } var border = WidgetUtils.GetBorderSizes("dialog4"); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(tl.X, tl.Y, m.X + border[3], m.Y), PanelSides.Left | PanelSides.Top | PanelSides.Bottom | PanelSides.Center); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X - border[2], tl.Y, br.X, m.Y + border[1]), PanelSides.Top | PanelSides.Right | PanelSides.Center); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X, m.Y - border[1], br.X, br.Y), PanelSides.Left | PanelSides.Right | PanelSides.Bottom | PanelSides.Center); pos += new int2(77, 5); Game.Renderer.Fonts["Bold"].DrawText(sp.Info.Description, pos, Color.White); if (sp.TotalTime > 0) { pos += new int2(0, 20); Game.Renderer.Fonts["Bold"].DrawText(WidgetUtils.FormatTime(sp.RemainingTime).ToString(), pos, Color.White); Game.Renderer.Fonts["Bold"].DrawText("/ {0}".F(WidgetUtils.FormatTime(sp.TotalTime)), pos + new int2(45, 0), Color.White); } if (sp.Info.LongDesc != null) { pos += new int2(0, 20); Game.Renderer.Fonts["Regular"].DrawText(sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White); } } WidgetUtils.DrawSHP(image, drawPos, worldRenderer); clock.PlayFetchIndex("idle", () => sp.TotalTime == 0 ? clock.CurrentSequence.Length - 1 : (sp.TotalTime - sp.RemainingTime) * (clock.CurrentSequence.Length - 1) / sp.TotalTime); clock.Tick(); WidgetUtils.DrawSHP(clock.Image, drawPos, worldRenderer); var overlay = sp.Ready ? ReadyText : sp.Active ? null : HoldText; var font = Game.Renderer.Fonts["TinyBold"]; if (overlay != null) { var size = font.Measure(overlay); var overlayPos = drawPos + new float2(32, 16); font.DrawTextWithContrast(overlay, overlayPos - new float2(size.X / 2, 0), Color.White, Color.Black, 1); } buttons.Add(Pair.New(rect, HandleSupportPower(kv.Key, manager))); y += 51; } }
public override void Draw() { buttons.Clear(); if( world.LocalPlayer == null ) return; var manager = world.LocalPlayer.PlayerActor.Trait<SupportPowerManager>(); var powers = manager.Powers.Where(p => !p.Value.Disabled); var numPowers = powers.Count(); if (numPowers == 0) return; var rectBounds = RenderBounds; WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-top"),new float2(rectBounds.X,rectBounds.Y)); for (var i = 1; i < numPowers; i++) WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51)); WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51)); // Hack Hack Hack rectBounds.Width = 69; rectBounds.Height = 10 + numPowers * 51 + 21; var y = rectBounds.Y + 10; foreach (var kv in powers) { var sp = kv.Value; var image = spsprites[sp.Info.Image]; var drawPos = new float2(rectBounds.X + 5, y); var rect = new Rectangle(rectBounds.X + 5, y, 64, 48); if (rect.Contains(Viewport.LastMousePos)) { var pos = drawPos.ToInt2(); var tl = new int2(pos.X-3,pos.Y-3); var m = new int2(pos.X+64+3,pos.Y+48+3); var br = tl + new int2(64+3+20,40); if (sp.TotalTime > 0) br += new int2(0,20); if (sp.Info.LongDesc != null) br += Game.Renderer.Fonts["Regular"].Measure(sp.Info.LongDesc.Replace("\\n", "\n")); else br += new int2(300,0); var border = WidgetUtils.GetBorderSizes("dialog4"); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(tl.X, tl.Y, m.X + border[3], m.Y), PanelSides.Left | PanelSides.Top | PanelSides.Bottom | PanelSides.Center); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X - border[2], tl.Y, br.X, m.Y + border[1]), PanelSides.Top | PanelSides.Right | PanelSides.Center); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X, m.Y - border[1], br.X, br.Y), PanelSides.Left | PanelSides.Right | PanelSides.Bottom | PanelSides.Center); pos += new int2(77, 5); Game.Renderer.Fonts["Bold"].DrawText(sp.Info.Description, pos, Color.White); if (sp.TotalTime > 0) { pos += new int2(0,20); Game.Renderer.Fonts["Bold"].DrawText(WidgetUtils.FormatTime(sp.RemainingTime).ToString(), pos, Color.White); Game.Renderer.Fonts["Bold"].DrawText("/ {0}".F(WidgetUtils.FormatTime(sp.TotalTime)), pos + new int2(45,0), Color.White); } if (sp.Info.LongDesc != null) { pos += new int2(0, 20); Game.Renderer.Fonts["Regular"].DrawText(sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White); } } WidgetUtils.DrawSHP(image, drawPos, worldRenderer); clock.PlayFetchIndex("idle", () => sp.TotalTime == 0 ? clock.CurrentSequence.Length - 1 : (sp.TotalTime - sp.RemainingTime) * (clock.CurrentSequence.Length - 1) / sp.TotalTime); clock.Tick(); WidgetUtils.DrawSHP(clock.Image, drawPos, worldRenderer); var overlay = sp.Ready ? "ready" : sp.Active ? null : "hold"; if (overlay != null) { ready.Play(overlay); WidgetUtils.DrawSHP(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2), worldRenderer); } buttons.Add(Pair.New(rect,HandleSupportPower(kv.Key, manager))); y += 51; } }
public void Scroll(float2 delta, bool ignoreBorders) { var d = delta.ToInt2(); var newScrollPosition = scrollPosition + d; if(!ignoreBorders) newScrollPosition = this.NormalizeScrollPosition(newScrollPosition); scrollPosition = newScrollPosition; }
public override void DrawInner(World world) { buttons.Clear(); var powers = world.LocalPlayer.PlayerActor.TraitsImplementing<SupportPower>(); var numPowers = powers.Count(p => p.IsAvailable); if (numPowers == 0) return; var rectBounds = RenderBounds; WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-top"),new float2(rectBounds.X,rectBounds.Y)); for (var i = 1; i < numPowers; i++) WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51)); WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51)); Game.Renderer.RgbaSpriteRenderer.Flush(); // Hack Hack Hack rectBounds.Width = 69; rectBounds.Height = 10 + numPowers * 51 + 21; var y = rectBounds.Y + 10; foreach (var sp in powers) { var image = spsprites[sp.Info.Image]; if (sp.IsAvailable) { var drawPos = new float2(rectBounds.X + 5, y); var rect = new Rectangle(rectBounds.X + 5, y, 64, 48); if (rect.Contains(Viewport.LastMousePos.ToPoint())) { var pos = drawPos.ToInt2(); var tl = new int2(pos.X-3,pos.Y-3); var m = new int2(pos.X+64+3,pos.Y+48+3); var br = tl + new int2(64+3+20,60); if (sp.Info.LongDesc != null) br += Game.Renderer.RegularFont.Measure(sp.Info.LongDesc.Replace("\\n", "\n")); else br += new int2(300,0); var border = WidgetUtils.GetBorderSizes("dialog4"); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(tl.X, tl.Y, m.X + border[3], m.Y), PanelSides.Left | PanelSides.Top | PanelSides.Bottom); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X - border[2], tl.Y, br.X, m.Y + border[1]), PanelSides.Top | PanelSides.Right); WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X, m.Y - border[1], br.X, br.Y), PanelSides.Left | PanelSides.Right | PanelSides.Bottom); pos += new int2(77, 5); Game.Renderer.BoldFont.DrawText(sp.Info.Description, pos, Color.White); pos += new int2(0,20); Game.Renderer.BoldFont.DrawText(WorldUtils.FormatTime(sp.RemainingTime).ToString(), pos, Color.White); Game.Renderer.BoldFont.DrawText("/ {0}".F(WorldUtils.FormatTime(sp.TotalTime)), pos + new int2(45,0), Color.White); if (sp.Info.LongDesc != null) { pos += new int2(0, 20); Game.Renderer.RegularFont.DrawText(sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White); } } WidgetUtils.DrawSHP(image, drawPos); clock.PlayFetchIndex("idle", () => (sp.TotalTime - sp.RemainingTime) * (clock.CurrentSequence.Length - 1) / sp.TotalTime); clock.Tick(); WidgetUtils.DrawSHP(clock.Image, drawPos); if (sp.IsReady) { ready.Play("ready"); WidgetUtils.DrawSHP(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2)); } buttons.Add(Pair.New(rect,HandleSupportPower(sp))); y += 51; } } Game.Renderer.WorldSpriteRenderer.Flush(); }