forked from Shardstone/trail-into-darkness
70 lines
3.2 KiB
C#
70 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using ZLinq;
|
|
using UnityEngine;
|
|
|
|
namespace Nox.Game {
|
|
[CreateAssetMenu(fileName = "DefaultPartySettings", menuName = "Nox/Database/Entities/Default Party Settings")]
|
|
public class PartySettings : ScriptableObject {
|
|
[Header("Party System Defaults")]
|
|
public int maxPartySize = 4;
|
|
|
|
[Header("This will be default starting set")]
|
|
public string testStartingSetId;
|
|
|
|
[Header("Party Definition Sets")]
|
|
public List<PartyDefinitionSet> testPartyDefinitionSets;
|
|
|
|
[Header("Testing Party Definition Sets")]
|
|
public StarterCharacterSettings testStarterCharacterSettings;
|
|
|
|
private void OnValidate() {
|
|
if(String.IsNullOrEmpty(testStartingSetId)) {
|
|
Debug.LogError("DefaultPartySettings: startingSetId cannot be null or empty");
|
|
return;
|
|
}
|
|
foreach(var partyDefinitionSet in testPartyDefinitionSets) {
|
|
var partyDefinition = partyDefinitionSet.partyDefinition;
|
|
if(partyDefinition == null) {
|
|
return;
|
|
}
|
|
|
|
for(var i = 0; i < partyDefinition.maxPartySize; i++) {
|
|
if (partyDefinition.members.Count <= i) {
|
|
partyDefinition.members.Add(new CharacterDefinition());
|
|
}
|
|
}
|
|
|
|
if(testPartyDefinitionSets.AsValueEnumerable().FirstOrDefault(pds => pds.id == partyDefinitionSet.id && pds.isTestingSet) != null) {
|
|
var testingSet = testPartyDefinitionSets.AsValueEnumerable().FirstOrDefault(pds => pds.id == partyDefinitionSet.id && pds.isTestingSet);
|
|
ApplyClassAndRacialBonuses(testingSet);
|
|
}
|
|
|
|
if(partyDefinition.members.Count <= partyDefinition.maxPartySize) {
|
|
continue;
|
|
}
|
|
Debug.LogError($"Party definition '{partyDefinitionSet.id}' has more members than the maximum allowed size.Removing extra members.");
|
|
partyDefinition.members.RemoveRange(partyDefinition.maxPartySize, partyDefinition.members.Count - partyDefinition.maxPartySize);
|
|
}
|
|
}
|
|
private void ApplyClassAndRacialBonuses(PartyDefinitionSet testingSet) {
|
|
var partyDefinition = testingSet.partyDefinition;
|
|
foreach(var member in partyDefinition.members) {
|
|
var baseSettings = testStarterCharacterSettings.defaultEntityAttributes;
|
|
var classAttributes = testStarterCharacterSettings.classBonuses.AsValueEnumerable().FirstOrDefault(c => c.@class == member.Class)?.bonusAttributes;
|
|
var racialAttributes = testStarterCharacterSettings.racialBonuses.AsValueEnumerable().FirstOrDefault(rb => rb.race == member.Race)?.bonusAttributes;
|
|
if (classAttributes != null && racialAttributes != null) {
|
|
member.Attributes += baseSettings + classAttributes + racialAttributes;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public sealed class PartyDefinitionSet {
|
|
public string id;
|
|
public bool isTestingSet;
|
|
public PartyDefinition partyDefinition;
|
|
}
|
|
}
|