108 lines
2.8 KiB
Go

package factions
// Faction represents a single faction with its properties
type Faction struct {
ID int32 // Faction ID
Name string // Faction name
Type string // Faction type/category
Description string // Faction description
NegativeChange int16 // Amount faction decreases by default
PositiveChange int16 // Amount faction increases by default
DefaultValue int32 // Default faction value for new characters
}
// NewFaction creates a new faction with the given parameters
func NewFaction(id int32, name, factionType, description string) *Faction {
return &Faction{
ID: id,
Name: name,
Type: factionType,
Description: description,
NegativeChange: 0,
PositiveChange: 0,
DefaultValue: 0,
}
}
// GetID returns the faction ID
func (f *Faction) GetID() int32 {
return f.ID
}
// GetName returns the faction name
func (f *Faction) GetName() string {
return f.Name
}
// GetType returns the faction type
func (f *Faction) GetType() string {
return f.Type
}
// GetDescription returns the faction description
func (f *Faction) GetDescription() string {
return f.Description
}
// GetNegativeChange returns the default decrease amount
func (f *Faction) GetNegativeChange() int16 {
return f.NegativeChange
}
// GetPositiveChange returns the default increase amount
func (f *Faction) GetPositiveChange() int16 {
return f.PositiveChange
}
// GetDefaultValue returns the default faction value
func (f *Faction) GetDefaultValue() int32 {
return f.DefaultValue
}
// SetNegativeChange sets the default decrease amount
func (f *Faction) SetNegativeChange(amount int16) {
f.NegativeChange = amount
}
// SetPositiveChange sets the default increase amount
func (f *Faction) SetPositiveChange(amount int16) {
f.PositiveChange = amount
}
// SetDefaultValue sets the default faction value
func (f *Faction) SetDefaultValue(value int32) {
f.DefaultValue = value
}
// Clone creates a copy of the faction
func (f *Faction) Clone() *Faction {
return &Faction{
ID: f.ID,
Name: f.Name,
Type: f.Type,
Description: f.Description,
NegativeChange: f.NegativeChange,
PositiveChange: f.PositiveChange,
DefaultValue: f.DefaultValue,
}
}
// IsValid returns true if the faction has valid data
func (f *Faction) IsValid() bool {
return f.ID > 0 && len(f.Name) > 0
}
// IsSpecialFaction returns true if this is a special faction (ID <= 10)
func (f *Faction) IsSpecialFaction() bool {
return f.ID <= SpecialFactionIDMax
}
// CanIncrease returns true if this faction can be increased
func (f *Faction) CanIncrease() bool {
return !f.IsSpecialFaction() && f.PositiveChange != 0
}
// CanDecrease returns true if this faction can be decreased
func (f *Faction) CanDecrease() bool {
return !f.IsSpecialFaction() && f.NegativeChange != 0
}