public void RenderPawnAt(Vector3 drawLoc, float angle, bool northSouthRotation) { if (!graphics.AllResolved) { graphics.ResolveAllGraphics(); } RenderPawnInternal(drawLoc, angle, northSouthRotation); if (vehicle.def.race.specialShadowData != null) { if (shadowGraphic == null) { shadowGraphic = new Graphic_Shadow(vehicle.def.race.specialShadowData); } shadowGraphic.Draw(drawLoc, Rot4.North, vehicle, 0f); } if (graphics.vehicle.VehicleGraphic != null && graphics.vehicle.VehicleGraphic.ShadowGraphic != null) { graphics.vehicle.VehicleGraphic.ShadowGraphic.Draw(drawLoc, Rot4.North, vehicle, 0f); } if (vehicle.Spawned && !vehicle.Dead) { //vehicle.stances.StanceTrackerDraw(); vehicle.vPather.PatherDraw(); } }
public void Launch(Thing launcher, Vector3 origin, LocalTargetInfo targ, Thing flyingThing, DamageInfo?newDamageInfo = null) { this.innerContainer = new ThingOwner <Thing>(this, false, LookMode.Deep); bool spawned = flyingThing.Spawned; this.pawn = (launcher as Pawn); bool flag = spawned; if (flag) { FieldInfo shadowgraphic = typeof(PawnRenderer).GetField("shadowGraphic", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField); // FieldInfo c2 = typeof(Thing).GetField("graphicInt", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField); Traverse traverse = Traverse.Create(pawn.Drawer.renderer); ShadowData data = new ShadowData(); data.volume = Vector3.zero; Graphic_Shadow graphic = new Graphic_Shadow(data); shadowgraphic.SetValue(pawn.Drawer.renderer, graphic); } this.origin = origin; this.impactDamage = newDamageInfo; this.flyingThing = flyingThing; bool flag2 = targ.Thing != null; bool flag3 = flag2; if (flag3) { // Log.Message("Has Target aat launch"); this.assignedTarget = targ.Thing; } this.destination = targ.Cell.ToVector3Shifted(); this.ticksToImpact = this.StartingTicksToImpact; this.Initialize(); }
public void MakeInvisible() { oldGraphics = pawn.Drawer.renderer.graphics; oldShadow = GetShadowGraphic(pawn.Drawer.renderer); pawn.Drawer.renderer.graphics = new PawnGraphicSet_Invisible(pawn); ShadowData shadowData = new ShadowData { volume = new Vector3(0, 0, 0), offset = new Vector3(0, 0, 0) }; SetShadowGraphic(pawn.Drawer.renderer, new Graphic_Shadow(shadowData)); pawn.stances.CancelBusyStanceHard(); if (lastCarried != null && lastCarried == pawn.carryTracker.CarriedThing) { lastCarriedGraphic = pawn.carryTracker.CarriedThing.Graphic; SetGraphicInt(pawn.carryTracker.CarriedThing, new Graphic_Invisible()); } if (Find.Selector.SelectedObjects.Contains(pawn)) { Find.Selector.SelectedObjects.Remove(pawn); } if (!PlayerKnowledgeDatabase.IsComplete(XenomorphConceptDefOf.RRY_Concept_Chestbursters)) { LessonAutoActivator.TeachOpportunity(XenomorphConceptDefOf.RRY_Concept_Chestbursters, OpportunityType.Important); } }
public void SetShadowGraphic(PawnRenderer _this, Graphic_Shadow newValue) { if (_shadowGraphic == null) { _shadowGraphic = typeof(PawnRenderer).GetField("shadowGraphic", BindingFlags.Instance | BindingFlags.NonPublic); if (_shadowGraphic == null) { Log.ErrorOnce("Unable to reflect PawnRenderer.shadowGraphic!", 0x12348765); } } _shadowGraphic.SetValue(_this, newValue); }
public override void DrawAt(Vector3 drawLoc) { if (!Spawned) { base.DrawAt(drawLoc); return; } wheelLoc = drawLoc; bodyLoc = drawLoc; //Vertical if (Rotation.AsInt % 2 == 0) { wheelLoc.y = Altitudes.AltitudeFor(AltitudeLayer.Item) + 0.02f; } //horizontal if (axlesComp.HasAxles() && Rotation.AsInt % 2 == 1) { wheelLoc.y = Altitudes.AltitudeFor(AltitudeLayer.Pawn) + 0.04f; bodyLoc.y = Altitudes.AltitudeFor(AltitudeLayer.Pawn) + 0.03f; Vector2 drawSize = def.graphic.drawSize; int num = Rotation == Rot4.West ? -1 : 1; Vector3 vector3 = new Vector3(1f * drawSize.x, 1f, 1f * drawSize.y); Quaternion asQuat = Rotation.AsQuat; float x = 1f * Mathf.Sin(num * (wheelRotation * 0.05f) % (2 * Mathf.PI)); float z = 1f * Mathf.Cos(num * (wheelRotation * 0.05f) % (2 * Mathf.PI)); asQuat.SetLookRotation(new Vector3(x, 0f, z), Vector3.up); wheel_shake = (float)((Math.Sin(tick_time) + Math.Abs(Math.Sin(tick_time))) / 40.0); wheelLoc.z = wheelLoc.z + wheel_shake; Vector3 mountThingLoc = drawLoc; mountThingLoc.y = Altitudes.AltitudeFor(AltitudeLayer.Pawn) + 0.06f; Vector3 mountThingOffset = new Vector3(0, 0, 1).RotatedBy(Rotation.AsAngle); List <Vector3> list; if (axlesComp.GetAxleLocations(drawSize, num, out list)) { foreach (Vector3 current in list) { Matrix4x4 matrix = default(Matrix4x4); matrix.SetTRS(wheelLoc + current, asQuat, vector3); Graphics.DrawMesh(MeshPool.plane10, matrix, graphic_Wheel_Single.MatAt(Rotation), 0); } } } base.DrawAt(bodyLoc); if (vehicleComp.compProps.specialShadowData != null) { if (shadowGraphic == null) { shadowGraphic = new Graphic_Shadow(vehicleComp.compProps.specialShadowData); } shadowGraphic.Draw(drawLoc, Rot4.North, this); } }