Skip to content

Commit

Permalink
Add the drakkal mast (#82)
Browse files Browse the repository at this point in the history
* Add the drakkal mast, which is super similar to viking mast, use vikingmast icon for now

* fix gameobject for sailcloth on drakkal

* add prefabname for drakkal mast, and fix a few more render problems

* fix tier4 prefab references

* fix wind direction for moder
  • Loading branch information
zolantris committed May 21, 2024
1 parent 46ad806 commit 0f540c2
Show file tree
Hide file tree
Showing 13 changed files with 118 additions and 43 deletions.
4 changes: 3 additions & 1 deletion src/ValheimRAFT/Assets/Translations/English/valheimraft.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@
"mb_sail_desc": "Customizable sail.",
"mb_sail_edit": "Customize sail",
"mb_vikingship_mast": "Longship mast",
"mb_vikingship_mast_desc": "A mast for your base, in the style of the longship",
"mb_vikingship_mast_desc": "A mast for your base, in the style of the Longship",
"valheim_vehicles_drakkalship_mast": "Drakkal Mast",
"valheim_vehicles_drakkalship_mast_desc": "A mast for your base, in the style of the Drakkal Longship",
"valheim_vehicles_water_vehicle": "A Water Vehicle",
"valheim_vehicles_water_vehicle_desc": "A raft (>=v2.0.0)...that you can build on!",
"valheim_vehicles_wheel": "Vehicle Wheel",
Expand Down
1 change: 0 additions & 1 deletion src/ValheimRAFT/ValheimRAFT.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@
<Compile Include="ValheimRAFT\MovableBaseZone.cs"/>
<Compile Include="ValheimRAFT\PrefabController.cs"/>
<Compile Include="ValheimRAFT\ShipStats.cs"/>
<Compile Include="ValheimRAFT\SailAreaForce.cs"/>
<Compile Include="ValheimRAFT\ValheimRaftPlugin.cs"/>
<Compile Include="ValheimRAFT\MastComponent.cs"/>
<Compile Include="ValheimRAFT\MeshHelper.cs"/>
Expand Down
2 changes: 1 addition & 1 deletion src/ValheimRAFT/ValheimRAFT/MoveableBaseRootComponent.cs

Large diffs are not rendered by default.

16 changes: 0 additions & 16 deletions src/ValheimRAFT/ValheimRAFT/SailAreaForce.cs

This file was deleted.

6 changes: 6 additions & 0 deletions src/ValheimRAFT/ValheimRAFT/ValheimRaftPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
using ValheimRAFT.Util;
using ValheimVehicles.ConsoleCommands;
using ValheimVehicles.Prefabs;
using ValheimVehicles.Propulsion.Sail;
using ValheimVehicles.Vehicles;
using Logger = Jotunn.Logger;

Expand Down Expand Up @@ -83,6 +84,7 @@ public class ValheimRaftPlugin : BaseUnityPlugin
public ConfigEntry<float> SailTier1Area { get; set; }
public ConfigEntry<float> SailTier2Area { get; set; }
public ConfigEntry<float> SailTier3Area { get; set; }
public ConfigEntry<float> SailTier4Area { get; set; }
public ConfigEntry<float> SailCustomAreaTier1Multiplier { get; set; }
public ConfigEntry<float> BoatDragCoefficient { get; set; }
public ConfigEntry<float> MastShearForceThreshold { get; set; }
Expand Down Expand Up @@ -245,6 +247,10 @@ private void CreatePropulsionConfig()
SailTier3Area = Config.Bind("Propulsion",
"SailTier3Area", SailAreaForce.Tier3,
CreateConfigDescription("Manual sets the sail wind area of the tier 3 sail.", true, true));

SailTier4Area = Config.Bind("Propulsion",
"SailTier4Area", SailAreaForce.Tier4,
CreateConfigDescription("Manual sets the sail wind area of the tier 4 sail.", true, true));
}

private void CreateServerConfig()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public class LoadValheimAssets

public static GameObject vanillaRaftPrefab;
public static GameObject vikingShipPrefab;
public static GameObject drakkarPrefab;
public static Transform waterMask;

public static Piece woodFloorPiece;
Expand All @@ -24,6 +25,7 @@ public void Init(PrefabManager prefabManager)
{
vanillaRaftPrefab = prefabManager.GetPrefab("Raft");
vikingShipPrefab = prefabManager.GetPrefab("VikingShip");
drakkarPrefab = prefabManager.GetPrefab("VikingShip_Ashlands");
shipWaterEffects = vanillaRaftPrefab.transform.Find("WaterEffects").gameObject;

waterMask = vikingShipPrefab.transform.Find("ship/visual/watermask");
Expand Down
1 change: 1 addition & 0 deletions src/ValheimVehicles/ValheimVehicles.Prefabs/PrefabNames.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public enum PrefabSizeVariant
public const string Tier1RaftMastName = "MBRaftMast";
public const string Tier2RaftMastName = "MBKarveMast";
public const string Tier3RaftMastName = "MBVikingShipMast";
public const string Tier4RaftMastName = $"{ValheimVehiclesPrefix}_DrakkalMast";
public const string Tier1CustomSailName = "MBSail";
public const string BoardingRamp = "MBBoardingRamp";
public const string BoardingRampWide = "MBBoardingRamp_Wide";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,9 @@ private static void UpdateRaftSailDescriptions()

var tier3 = pieceManager.GetPiece(PrefabNames.Tier3RaftMastName);
tier3.Piece.m_description = SailPrefabs.GetTieredSailAreaText(3);

var tier4 = pieceManager.GetPiece(PrefabNames.Tier4RaftMastName);
tier4.Piece.m_description = SailPrefabs.GetTieredSailAreaText(4);
}

/**
Expand Down
98 changes: 81 additions & 17 deletions src/ValheimVehicles/ValheimVehicles.Prefabs/Registry/SailPrefabs.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using System.Linq;
using Jotunn;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
Expand All @@ -20,6 +22,7 @@ public void Register(PrefabManager prefabManager, PieceManager pieceManager)
RegisterRaftMast(prefabManager, pieceManager);
RegisterKarveMast(prefabManager, pieceManager);
RegisterVikingMast(prefabManager, pieceManager);
RegisterDrakkalMast(prefabManager, pieceManager);
RegisterCustomSail(prefabManager, pieceManager);
RegisterCustomSailCreator(prefabManager, pieceManager, 3);
RegisterCustomSailCreator(prefabManager, pieceManager, 4);
Expand All @@ -39,7 +42,7 @@ private void RegisterVikingMast(PrefabManager prefabManager, PieceManager pieceM
vikingShipMastPrefabPiece.transform.localScale = new Vector3(2f, 2f, 2f);
vikingShipMastPrefab.transform.localPosition = new Vector3(0, -1, 0);
vikingShipMastPrefabPiece.m_name = "$mb_vikingship_mast";
vikingShipMastPrefabPiece.m_description = "$mb_vikingship_mast_desc";
vikingShipMastPrefabPiece.m_description = GetTieredSailAreaText(3);
vikingShipMastPrefabPiece.m_placeEffect = LoadValheimAssets.woodFloorPiece.m_placeEffect;
PrefabRegistryController.AddToRaftPrefabPieces(vikingShipMastPrefabPiece);

Expand All @@ -48,9 +51,6 @@ private void RegisterVikingMast(PrefabManager prefabManager, PieceManager pieceM
var vikingShipMastComponent = vikingShipMastPrefab.AddComponent<MastComponent>();
vikingShipMastComponent.m_sailObject = vikingShipMastPrefab.transform.Find("Sail").gameObject;

// PrefabRegistryHelpers.AddBoundsToAllChildren(vikingShipMastPrefab, vikingShipMastPrefab);


vikingShipMastComponent.m_sailCloth =
vikingShipMastComponent.m_sailObject.GetComponentInChildren<Cloth>();
vikingShipMastComponent.m_allowSailRotation = true;
Expand All @@ -68,31 +68,93 @@ private void RegisterVikingMast(PrefabManager prefabManager, PieceManager pieceM
pieceManager.AddPiece(new CustomPiece(vikingShipMastPrefab, false, new PieceConfig
{
PieceTable = "Hammer",
Description = GetTieredSailAreaText(3),
Icon = LoadValheimVehicleAssets.VehicleSprites.GetSprite("vikingmast"),
Icon = LoadValheimVehicleAssets.VehicleSprites.GetSprite(SpriteNames.VikingMast),
Category = PrefabNames.ValheimRaftMenuName,
Enabled = true,
Requirements = new RequirementConfig[3]
{
new()
Requirements =
[
new RequirementConfig
{
Amount = 10,
Item = "FineWood",
Recover = true
},
new()
new RequirementConfig
{
Amount = 2,
Item = "RoundLog",
Recover = true
},
new()
new RequirementConfig
{
Amount = 6,
Item = "WolfPelt",
Recover = true
}
}
]
}));
}

private void RegisterDrakkalMast(PrefabManager prefabManager, PieceManager pieceManager)
{
var drakkalMast = LoadValheimAssets.drakkarPrefab.transform.Find("ship/visual/Mast")
.gameObject;

var prefab =
prefabManager.CreateClonedPrefab(PrefabNames.Tier4RaftMastName, drakkalMast);
var vikingShipMastPrefabPiece = prefab.AddComponent<Piece>();

vikingShipMastPrefabPiece.transform.localScale = new Vector3(1, 1, 1);
vikingShipMastPrefabPiece.m_name = "$valheim_vehicles_drakkalship_mast";
vikingShipMastPrefabPiece.m_description = GetTieredSailAreaText(4);
vikingShipMastPrefabPiece.m_placeEffect = LoadValheimAssets.woodFloorPiece.m_placeEffect;
PrefabRegistryController.AddToRaftPrefabPieces(vikingShipMastPrefabPiece);
PrefabRegistryHelpers.AddNetViewWithPersistence(prefab);

var mastComponent = prefab.AddComponent<MastComponent>();
var clothObj = prefab.GetComponentsInChildren<Cloth>()[0];
mastComponent.m_sailObject = clothObj.transform.parent.gameObject;

mastComponent.m_sailCloth = clothObj;
mastComponent.m_allowSailRotation = true;
mastComponent.m_allowSailShrinking = true;

// shipCollider
PrefabRegistryHelpers.AddSnapPoint("$hud_snappoint_bottom", prefab);

// Set wear and tear can be abstracted
PrefabRegistryHelpers.SetWearNTear(prefab, 3);

PrefabRegistryHelpers.FixRopes(prefab);
PrefabRegistryHelpers.FixCollisionLayers(prefab);

pieceManager.AddPiece(new CustomPiece(prefab, false, new PieceConfig
{
PieceTable = "Hammer",
Icon = LoadValheimVehicleAssets.VehicleSprites.GetSprite(SpriteNames.VikingMast),
Category = PrefabNames.ValheimRaftMenuName,
Enabled = true,
Requirements =
[
new RequirementConfig
{
Amount = 10,
Item = "FineWood",
Recover = true
},
new RequirementConfig
{
Amount = 10,
Item = "YggdrasilWood",
Recover = true
},
new RequirementConfig
{
Amount = 20,
Item = "LinenThread",
Recover = true
}
]
}));
}

Expand Down Expand Up @@ -187,6 +249,8 @@ public static string GetTieredSailAreaText(int tier)
$"$mb_karve_mast_desc\n$mb_raft_mast_generic_wind_desc [<color=yellow><b>{ValheimRaftPlugin.Instance.SailTier2Area.Value}</b></color>]",
3 =>
$"$mb_vikingship_mast_desc\n$mb_raft_mast_generic_wind_desc [<color=yellow><b>{ValheimRaftPlugin.Instance.SailTier3Area.Value}</b></color>]",
4 =>
$"$valheim_vehicles_drakkalship_mast_desc\n$mb_raft_mast_generic_wind_desc [<color=yellow><b>{ValheimRaftPlugin.Instance.SailTier4Area.Value}</b></color>]",
_ => ""
};

Expand Down Expand Up @@ -228,21 +292,21 @@ private void RegisterRaftMast(PrefabManager prefabManager, PieceManager pieceMan
Icon = LoadValheimVehicleAssets.VehicleSprites.GetSprite("raftmast"),
Category = PrefabNames.ValheimRaftMenuName,
Enabled = true,
Requirements = new RequirementConfig[2]
{
new()
Requirements =
[
new RequirementConfig
{
Amount = 10,
Item = "Wood",
Recover = true
},
new()
new RequirementConfig
{
Amount = 6,
Item = "DeerHide",
Recover = true
}
}
]
}));
}

Expand Down
1 change: 1 addition & 0 deletions src/ValheimVehicles/ValheimVehicles.Prefabs/SpriteNames.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ namespace ValheimVehicles.Prefabs;

public abstract class SpriteNames
{
public const string VikingMast = "vikingmast";
public const string ShipSteeringWheel = "steering_wheel";
public const string DirtFloor = "dirtfloor_icon";
public const string BoardingRamp = "boarding_ramp";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ namespace ValheimVehicles.Propulsion.Sail;
static class SailAreaForce
{
public static readonly float Tier1 = 5f;
public static readonly float Tier2 = 7.5f;
public static readonly float Tier3 = 10f;
public static readonly float Tier2 = 10f;
public static readonly float Tier3 = 20f;
public static readonly float Tier4 = 40f;
public static readonly float CustomTier1AreaForceMultiplier = 0.5f;
public static readonly bool HasPropulsionConfigOverride = false;
}
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ internal InitializationState BaseVehicleInitState
public int numberOfTier1Sails = 0;
public int numberOfTier2Sails = 0;
public int numberOfTier3Sails = 0;
public int numberOfTier4Sails = 0;
public float customSailsArea = 0f;

public float totalSailArea = 0f;
Expand Down Expand Up @@ -1084,6 +1085,7 @@ public float GetTotalSailArea()
numberOfTier1Sails = 0;
numberOfTier2Sails = 0;
numberOfTier3Sails = 0;
numberOfTier4Sails = 0;

var hasConfigOverride = ValheimRaftPlugin.Instance.EnableCustomPropulsionConfig.Value;

Expand All @@ -1096,23 +1098,23 @@ public float GetTotalSailArea()
continue;
}

if (mMastPiece.name.Contains("MBRaftMast"))
if (mMastPiece.name.StartsWith(PrefabNames.Tier1RaftMastName))
{
++numberOfTier1Sails;
var multiplier = hasConfigOverride
? ValheimRaftPlugin.Instance.SailTier1Area.Value
: Tier1;
totalSailArea += numberOfTier1Sails * multiplier;
}
else if (mMastPiece.name.Contains("MBKarveMast"))
else if (mMastPiece.name.StartsWith(PrefabNames.Tier2RaftMastName))
{
++numberOfTier2Sails;
var multiplier = hasConfigOverride
? ValheimRaftPlugin.Instance.SailTier2Area.Value
: Tier2;
totalSailArea += numberOfTier2Sails * multiplier;
}
else if (mMastPiece.name.Contains("MBVikingShipMast"))
else if (mMastPiece.name.StartsWith(PrefabNames.Tier3RaftMastName))
{
++numberOfTier3Sails;
var multiplier = hasConfigOverride
Expand All @@ -1121,6 +1123,15 @@ public float GetTotalSailArea()
totalSailArea += numberOfTier3Sails * multiplier;
;
}
else if (mMastPiece.name.StartsWith(PrefabNames.Tier4RaftMastName))
{
++numberOfTier4Sails;
var multiplier = hasConfigOverride
? ValheimRaftPlugin.Instance.SailTier4Area.Value
: Tier4;
totalSailArea += numberOfTier4Sails * multiplier;
;
}
}

var sailComponents = GetComponentsInChildren<SailComponent>();
Expand Down Expand Up @@ -1811,7 +1822,8 @@ public void EncapsulateBounds(GameObject go)
if (!door && !ladder && !rope && !go.name.StartsWith(PrefabNames.Tier1RaftMastName) &&
!go.name.StartsWith(PrefabNames.Tier1CustomSailName) &&
!go.name.StartsWith(PrefabNames.Tier2RaftMastName) &&
!go.name.StartsWith(PrefabNames.Tier3RaftMastName))
!go.name.StartsWith(PrefabNames.Tier3RaftMastName) &&
!go.name.StartsWith(PrefabNames.Tier4RaftMastName))
{
if (ValheimRaftPlugin.Instance.EnableExactVehicleBounds.Value || ShipHulls.IsHull(go))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1222,7 +1222,7 @@ private float GetSailForceEnergy(float sailSize, float windAngleFactor)

private Vector3 GetSailForce(float sailSize, float dt, bool isFlying)
{
var windDir = EnvMan.instance.GetWindDir();
var windDir = IsWindControllActive() ? Vector3.zero : EnvMan.instance.GetWindDir();
var windAngleFactorInterpolated = GetInterpolatedWindAngleFactor();

Vector3 target;
Expand Down

0 comments on commit 0f540c2

Please sign in to comment.