public void Render(WorldRenderer wr, World w, ActorInfo ai, int2 centerLocation) { wr.DrawRangeCircle( Color.FromArgb(128, Color.Yellow), centerLocation, ai.Traits.Get <AttackBaseInfo>().GetMaximumRange()); foreach (var a in w.ActorsWithTrait <RenderRangeCircle>()) { if (a.Actor.Owner == a.Actor.World.LocalPlayer) { if (a.Actor.Info.Traits.Get <RenderRangeCircleInfo>().RangeCircleType == RangeCircleType) { a.Trait.RenderBeforeWorld(wr, a.Actor); } } } }
public void RenderAfterWorld(WorldRenderer wr, Actor self) { if (devMode == null || !devMode.ShowCombatGeometry) { return; } if (healthInfo != null) { wr.DrawRangeCircle(self.CenterPosition, healthInfo.Radius, Color.Red); } var wlr = Game.Renderer.WorldLineRenderer; if (blockInfo != null) { var hc = Color.Orange; var height = new WVec(0, 0, blockInfo.Height.Length); var ha = wr.ScreenPosition(self.CenterPosition); var hb = wr.ScreenPosition(self.CenterPosition + height); wlr.DrawLine(ha, hb, hc); wr.DrawTargetMarker(hc, ha); wr.DrawTargetMarker(hc, hb); } // No armaments to draw if (attack.Value == null) { return; } var c = Color.White; // Fire ports on garrisonable structures var garrison = attack.Value as AttackGarrisoned; if (garrison != null) { var bodyOrientation = coords.Value.QuantizeOrientation(self, self.Orientation); foreach (var p in garrison.Info.Ports) { var pos = self.CenterPosition + coords.Value.LocalToWorld(p.Offset.Rotate(bodyOrientation)); var da = coords.Value.LocalToWorld(new WVec(224, 0, 0).Rotate(WRot.FromYaw(p.Yaw + p.Cone)).Rotate(bodyOrientation)); var db = coords.Value.LocalToWorld(new WVec(224, 0, 0).Rotate(WRot.FromYaw(p.Yaw - p.Cone)).Rotate(bodyOrientation)); var o = wr.ScreenPosition(pos); var a = wr.ScreenPosition(pos + da * 224 / da.Length); var b = wr.ScreenPosition(pos + db * 224 / db.Length); wlr.DrawLine(o, a, c); wlr.DrawLine(o, b, c); } return; } foreach (var a in attack.Value.Armaments) { foreach (var b in a.Barrels) { var muzzle = self.CenterPosition + a.MuzzleOffset(self, b); var dirOffset = new WVec(0, -224, 0).Rotate(a.MuzzleOrientation(self, b)); var sm = wr.ScreenPosition(muzzle); var sd = wr.ScreenPosition(muzzle + dirOffset); wlr.DrawLine(sm, sd, c); wr.DrawTargetMarker(c, sm); } } }
public void RenderBeforeWorld(WorldRenderer wr, World world) { wr.DrawRangeCircle( Color.FromArgb(128, Color.DeepSkyBlue), self.CenterLocation.ToFloat2(), (int)self.Trait <ChronoshiftDeploy>().Info.JumpDistance); }