Skip to content

Commit

Permalink
1.0.9.4 - Bugfix
Browse files Browse the repository at this point in the history
CompOversizedWeapon should no longer throw odd errors.
  • Loading branch information
jecrell committed Feb 14, 2018
1 parent dd6e8eb commit b5132a2
Show file tree
Hide file tree
Showing 6 changed files with 206 additions and 811 deletions.
2 changes: 1 addition & 1 deletion About/About.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<url></url>
<targetVersion>0.18.0</targetVersion>
<description>
[1.0.9.3] Adds modding components to RimWorld: vehicles, spell casting, weapon slots, oversized weapons, and more!
[1.0.9.4] Adds modding components to RimWorld: vehicles, spell casting, weapon slots, oversized weapons, and more!

Note to players: This mod will not change your game, but rather it lets modders do more, so you can have an even more amazing RimWorld experience.

Expand Down
Binary file modified Assemblies/CompOversizedWeapon.dll
Binary file not shown.
895 changes: 126 additions & 769 deletions Source/.idea/.idea.JecsTools/.idea/workspace.xml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ namespace CompOversizedWeapon
{
internal class CompOversizedWeapon : ThingComp
{
public CompProperties_OversizedWeapon Props => (CompProperties_OversizedWeapon) props;
public CompProperties_OversizedWeapon Props => props as CompProperties_OversizedWeapon;

public CompOversizedWeapon()
{
if (!(props is CompProperties_OversizedWeapon))
props = new CompProperties_OversizedWeapon();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace CompOversizedWeapon
{
internal class CompProperties_OversizedWeapon : CompProperties
public class CompProperties_OversizedWeapon : CompProperties
{
//public SoundDef soundMiss;
//public SoundDef soundHitPawn;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System.Linq;
using System;
using System.Data.Common;
using System.Linq;
using Harmony;
using RimWorld;
using UnityEngine;
Expand Down Expand Up @@ -48,6 +50,8 @@ public static bool DrawEquipmentAimingPreFix(PawnRenderer __instance, Thing eq,
var flip = false;
var num = aimAngle - 90f;
var pawn = Traverse.Create(__instance).Field("pawn").GetValue<Pawn>();
if (pawn == null) return true;

Mesh mesh;
if (aimAngle > 20f && aimAngle < 160f)
{
Expand All @@ -63,77 +67,105 @@ public static bool DrawEquipmentAimingPreFix(PawnRenderer __instance, Thing eq,
}
else
{
mesh = MeshPool.plane10;
var offsetAtPeace = eq.def.equippedAngleOffset;
if (!pawn.IsFighting() && compOversizedWeapon.Props.verticalFlipOutsideCombat)
{
offsetAtPeace += 180f;
}
num += offsetAtPeace;
num = AdjustOffsetAtPeace(eq, pawn, compOversizedWeapon, num);
}
if (!pawn.IsFighting() && (compOversizedWeapon.Props.verticalFlipNorth && pawn.Rotation == Rot4.North))

if (compOversizedWeapon.Props != null && (!pawn.IsFighting() && (compOversizedWeapon.Props.verticalFlipNorth && pawn.Rotation == Rot4.North)))
{
num += 180f;
}
if (!pawn.IsFighting())
{
if (pawn.Rotation == Rot4.North)
{
num += compOversizedWeapon.Props.angleAdjustmentNorth;
}
else if (pawn.Rotation == Rot4.East)
{
num += compOversizedWeapon.Props.angleAdjustmentEast;
}
else if (pawn.Rotation == Rot4.West)
{
num += compOversizedWeapon.Props.angleAdjustmentWest;
}
else if (pawn.Rotation == Rot4.South)
{
num += compOversizedWeapon.Props.angleAdjustmentSouth;
}
num = AdjustNonCombatRotation(pawn, num, compOversizedWeapon);
}
num %= 360f;



var graphic_StackCount = eq.Graphic as Graphic_StackCount;
Material matSingle;
if (graphic_StackCount != null)
matSingle = graphic_StackCount.SubGraphicForStackCount(1, eq.def).MatSingle;
else
matSingle = eq.Graphic.MatSingle;


var s = new Vector3(eq.def.graphicData.drawSize.x, 1f, eq.def.graphicData.drawSize.y);
var matrix = default(Matrix4x4);


Vector3 curOffset = AdjustRenderOffsetFromDir(pawn, compOversizedWeapon);
matrix.SetTRS(drawLoc + curOffset, Quaternion.AngleAxis(num, Vector3.up), s);

var curOffset = AdjustRenderOffsetFromDir(pawn, compOversizedWeapon);

matrix.SetTRS(drawLoc + curOffset, Quaternion.AngleAxis(num, Vector3.up), s);
if (!flip) Graphics.DrawMesh(MeshPool.plane10, matrix, matSingle, 0);
else Graphics.DrawMesh(MeshPool.plane10Flip, matrix, matSingle, 0);
Graphics.DrawMesh(!flip ? MeshPool.plane10 : MeshPool.plane10Flip, matrix, matSingle, 0);
return false;
}
}
//}
return true;
}

private static Vector3 AdjustRenderOffsetFromDir(Pawn pawn, CompOversizedWeapon compOversizedWeapon)
private static float AdjustOffsetAtPeace(Thing eq, Pawn pawn, CompOversizedWeapon compOversizedWeapon, float num)
{
var curDir = pawn.Rotation;
Vector3 curOffset = compOversizedWeapon.Props.northOffset;
if (curDir == Rot4.East)
Mesh mesh;
mesh = MeshPool.plane10;
var offsetAtPeace = eq.def.equippedAngleOffset;
if (compOversizedWeapon.Props != null && (!pawn.IsFighting() && compOversizedWeapon.Props.verticalFlipOutsideCombat))
{
curOffset = compOversizedWeapon.Props.eastOffset;
offsetAtPeace += 180f;
}
else if (curDir == Rot4.South)
num += offsetAtPeace;
return num;
}

private static float AdjustNonCombatRotation(Pawn pawn, float num, CompOversizedWeapon compOversizedWeapon)
{
if (compOversizedWeapon.Props != null)
{
curOffset = compOversizedWeapon.Props.southOffset;
if (pawn.Rotation == Rot4.North)
{
num += compOversizedWeapon.Props.angleAdjustmentNorth;
}
else if (pawn.Rotation == Rot4.East)
{
num += compOversizedWeapon.Props.angleAdjustmentEast;
}
else if (pawn.Rotation == Rot4.West)
{
num += compOversizedWeapon.Props.angleAdjustmentWest;
}
else if (pawn.Rotation == Rot4.South)
{
num += compOversizedWeapon.Props.angleAdjustmentSouth;
}
}
else if (curDir == Rot4.West)
return num;
}

private static Vector3 AdjustRenderOffsetFromDir(Pawn pawn, CompOversizedWeapon compOversizedWeapon)
{
var curDir = pawn.Rotation;

Vector3 curOffset = Vector3.zero;

if (compOversizedWeapon.Props != null)
{
curOffset = compOversizedWeapon.Props.westOffset;

curOffset = compOversizedWeapon.Props.northOffset;
if (curDir == Rot4.East)
{
curOffset = compOversizedWeapon.Props.eastOffset;
}
else if (curDir == Rot4.South)
{
curOffset = compOversizedWeapon.Props.southOffset;
}
else if (curDir == Rot4.West)
{
curOffset = compOversizedWeapon.Props.westOffset;
}
}

return curOffset;
}

Expand Down

0 comments on commit b5132a2

Please sign in to comment.