Пример #1
0
        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);
                    }
                }
            }
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
 public void RenderBeforeWorld(WorldRenderer wr, World world)
 {
     wr.DrawRangeCircle(
         Color.FromArgb(128, Color.DeepSkyBlue),
         self.CenterLocation.ToFloat2(), (int)self.Trait <ChronoshiftDeploy>().Info.JumpDistance);
 }