Skip to content

Commit

Permalink
2.8.3 (#50)
Browse files Browse the repository at this point in the history
Co-authored-by: Hazzer <[email protected]>
  • Loading branch information
Hazzer and Hazzer authored Dec 5, 2022
1 parent 17bb851 commit 5ccfd84
Show file tree
Hide file tree
Showing 6 changed files with 112 additions and 106 deletions.
Binary file modified 1.4/Assemblies/Locks.dll
Binary file not shown.
2 changes: 1 addition & 1 deletion About/About.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@
<downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>
</li>
</modDependencies>
<description>Version 2.8.1\nThis addon adds Lock command on every door.\n - Left-click to lock toggle.\n - Right click for more options\n - Alternatively you can use "Lock" inspector tab\n\nNote: Door lock must be flicked by colonist.</description>
<description>Version 2.8.3\nThis addon adds Lock command on every door.\n - Left-click to lock toggle.\n - Right click for more options\n - Alternatively you can use "Lock" inspector tab\n\nNote: Door lock must be flicked by colonist.</description>
</ModMetaData>
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
</p>
<p align="center">
<a href="https://github.com/Aviuz/Locks/releases">
<img src="https://img.shields.io/badge/version-2.8.2-blue.svg?style=flat" alt="v2.8.2" />
<img src="https://img.shields.io/badge/version-2.8.3-blue.svg?style=flat" alt="v2.8.3" />
</a>
</p>

Expand Down
210 changes: 107 additions & 103 deletions Source/LockState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,124 +6,128 @@

namespace Locks
{
public enum LockMode
public enum LockMode
{
Allies,
Colony
}

public struct LockState
{
public LockMode mode;
public bool locked;
public bool allowSlave;
public bool petDoor;
public bool pensDoor;
public bool allowAnimals;
public bool childLock;
public List<Pawn> owners;

public LockState(LockMode mode, bool locked, bool petDoor, bool pensDoor, List<Pawn> owners,
bool allowSlave = true, bool allowAnimals = true)
{
Allies,
Colony
this.mode = mode;
this.locked = locked;
this.petDoor = petDoor;
this.pensDoor = pensDoor;
this.owners = owners;
childLock = false;
this.allowSlave = allowSlave;
this.allowAnimals = allowAnimals;
}

public struct LockState
public void CopyFrom(LockState copy)
{
public LockMode mode;
public bool locked;
public bool allowSlave;
public bool petDoor;
public bool pensDoor;
public bool allowAnimals;
public bool childLock;
public List<Pawn> owners;

public LockState(LockMode mode, bool locked, bool petDoor, bool pensDoor, List<Pawn> owners,
bool allowSlave = true, bool allowAnimals = true)
{
this.mode = mode;
this.locked = locked;
this.petDoor = petDoor;
this.pensDoor = pensDoor;
this.owners = owners;
childLock = false;
this.allowSlave = allowSlave;
this.allowAnimals = allowAnimals;
}
mode = copy.mode;
locked = copy.locked;
petDoor = copy.petDoor;
pensDoor = copy.pensDoor;
owners.Clear();
owners.AddRange(copy.owners);

public void CopyFrom(LockState copy)
{
mode = copy.mode;
locked = copy.locked;
petDoor = copy.petDoor;
pensDoor = copy.pensDoor;
owners.Clear();
owners.AddRange(copy.owners);
allowSlave = copy.allowSlave;
allowAnimals = copy.allowAnimals;

allowSlave = copy.allowSlave;
allowAnimals = copy.allowAnimals;

childLock = copy.childLock;
}
childLock = copy.childLock;
}

public static bool operator ==(LockState a, LockState b)
public static bool operator ==(LockState a, LockState b)
{
if (a.mode != b.mode)
{
return false;
}
if (a.locked != b.locked)
{
return false;
}
if (a.petDoor != b.petDoor)
{
return false;
}
if (a.pensDoor != b.pensDoor)
{
return false;
}
if (a.allowSlave != b.allowSlave)
{
return false;
}
if (a.allowAnimals != b.allowAnimals)
{
return false;
}
if (a.childLock != b.childLock)
{
return false;
}
foreach (var p in a.owners)
{
if (!b.owners.Contains(p))
{
if (a.mode != b.mode)
{
return false;
}
if (a.locked != b.locked)
{
return false;
}
if (a.petDoor != b.petDoor)
{
return false;
}
if (a.pensDoor != b.pensDoor)
{
return false;
}
if (a.allowSlave != b.allowSlave)
{
return false;
}
if (a.allowAnimals != b.allowAnimals)
{
return false;
}
if (a.childLock != b.childLock)
{
return false;
}
foreach (var p in a.owners)
{
if (!b.owners.Contains(p))
{
return false;
}
}
foreach (var p in b.owners)
{
if (!a.owners.Contains(p))
{
return false;
}
}
return true;
return false;
}

public static bool operator !=(LockState a, LockState b)
}
foreach (var p in b.owners)
{
if (!a.owners.Contains(p))
{
return !(a == b);
return false;
}
}
return true;
}

public bool Private
{
get
{
return owners.Count > 0;
}
}
public static bool operator !=(LockState a, LockState b)
{
return !(a == b);
}

public void ExposeData(String postfix)
{
Scribe_Values.Look(ref mode, $"Locks_LockData_Mode_{postfix}", LockMode.Allies, false);
Scribe_Values.Look(ref locked, $"Locks_LockData_Locked_{postfix}", true, false);
Scribe_Values.Look(ref petDoor, $"Locks_LockData_PetDoor_{postfix}", false, false);
Scribe_Values.Look(ref pensDoor, $"Locks_LockData_PensDoor_{postfix}", false, false);
public bool Private
{
get
{
return owners.Count > 0;
}
}

Scribe_Values.Look(ref allowSlave, $"Locks_LockData_SlaveDoor_{postfix}", true, false);
Scribe_Values.Look(ref allowAnimals, $"Locks_LockData_NonAnimalDoor_{postfix}", true, false);
public void ExposeData(String postfix)
{
Scribe_Values.Look(ref mode, $"Locks_LockData_Mode_{postfix}", LockMode.Allies, false);
Scribe_Values.Look(ref locked, $"Locks_LockData_Locked_{postfix}", true, false);
Scribe_Values.Look(ref petDoor, $"Locks_LockData_PetDoor_{postfix}", false, false);
Scribe_Values.Look(ref pensDoor, $"Locks_LockData_PensDoor_{postfix}", false, false);

Scribe_Values.Look(ref childLock, $"Locks_LockData_ChildLock_{postfix}", false, false);
Scribe_Values.Look(ref allowSlave, $"Locks_LockData_SlaveDoor_{postfix}", true, false);
Scribe_Values.Look(ref allowAnimals, $"Locks_LockData_NonAnimalDoor_{postfix}", true, false);

Scribe_Collections.Look(ref owners, $"Locks_LockData_Owners_{postfix}", LookMode.Reference);
}
Scribe_Values.Look(ref childLock, $"Locks_LockData_ChildLock_{postfix}", false, false);

Scribe_Collections.Look(ref owners, $"Locks_LockData_Owners_{postfix}", LookMode.Reference);
if (Scribe.mode == LoadSaveMode.PostLoadInit)
{
owners.RemoveAll((Pawn x) => x == null);
}
}
}
}
2 changes: 1 addition & 1 deletion Source/LockUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ private static bool OwnersControlMech(LockState respectedState, Pawn p)
{
foreach (Pawn owner in respectedState.owners)
{
if (owner.mechanitor != null && owner.mechanitor.ControlledPawns.Contains(p))
if (owner != null && owner.mechanitor != null && owner.mechanitor.ControlledPawns.Contains(p))
{
return true;
}
Expand Down
2 changes: 2 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
Changelog:
2.8.3
- Fix for null element in door owners.
2.8.2
- Forcing door state for changes with pen, pens and animal allowed state.
2.8.1
Expand Down

0 comments on commit 5ccfd84

Please sign in to comment.