eq2go/internal/sign/types.go

235 lines
5.3 KiB
Go

package sign
import "eq2emu/internal/spawn"
// Sign represents a clickable sign in the game world that extends Spawn
type Sign struct {
*spawn.Spawn // Embed spawn for basic functionality
// Widget properties
widgetID int32 // Widget identifier
widgetX float32 // Widget X coordinate
widgetY float32 // Widget Y coordinate
widgetZ float32 // Widget Z coordinate
// Sign properties
signType int8 // Type of sign (generic or zone)
title string // Sign title
description string // Sign description
language int8 // Language of the sign text
// Zone transport properties
zoneX float32 // Target zone X coordinate
zoneY float32 // Target zone Y coordinate
zoneZ float32 // Target zone Z coordinate
zoneHeading float32 // Target zone heading
zoneID int32 // Target zone ID
signDistance float32 // Maximum interaction distance
// Display options
includeLocation bool // Whether to include location in display
includeHeading bool // Whether to include heading in display
}
// NewSign creates a new sign with default values
func NewSign() *Sign {
baseSpawn := spawn.NewSpawn()
// Set spawn-specific defaults for signs
baseSpawn.SetSpawnType(DefaultSpawnType)
// TODO: Set appearance properties when spawn system is integrated
// appearance.pos.state = DefaultPosState
// appearance.difficulty = DefaultDifficulty
// appearance.activity_status = DefaultActivityStatus
return &Sign{
Spawn: baseSpawn,
widgetID: 0,
widgetX: 0,
widgetY: 0,
widgetZ: 0,
signType: SignTypeGeneric,
title: "",
description: "",
language: 0,
zoneX: 0,
zoneY: 0,
zoneZ: 0,
zoneHeading: 0,
zoneID: 0,
signDistance: DefaultSignDistance,
includeLocation: false,
includeHeading: false,
}
}
// IsSign returns true since this is a sign
func (s *Sign) IsSign() bool {
return true
}
// Widget ID methods
func (s *Sign) GetWidgetID() int32 {
return s.widgetID
}
func (s *Sign) SetWidgetID(id int32) {
s.widgetID = id
}
// Widget position methods
func (s *Sign) GetWidgetX() float32 {
return s.widgetX
}
func (s *Sign) SetWidgetX(x float32) {
s.widgetX = x
}
func (s *Sign) GetWidgetY() float32 {
return s.widgetY
}
func (s *Sign) SetWidgetY(y float32) {
s.widgetY = y
}
func (s *Sign) GetWidgetZ() float32 {
return s.widgetZ
}
func (s *Sign) SetWidgetZ(z float32) {
s.widgetZ = z
}
// Sign type methods
func (s *Sign) GetSignType() int8 {
return s.signType
}
func (s *Sign) SetSignType(signType int8) {
s.signType = signType
}
// Title and description methods
func (s *Sign) GetSignTitle() string {
return s.title
}
func (s *Sign) SetSignTitle(title string) {
s.title = title
}
func (s *Sign) GetSignDescription() string {
return s.description
}
func (s *Sign) SetSignDescription(description string) {
s.description = description
}
// Language methods
func (s *Sign) GetLanguage() int8 {
return s.language
}
func (s *Sign) SetLanguage(language int8) {
s.language = language
}
// Zone transport methods
func (s *Sign) GetSignZoneX() float32 {
return s.zoneX
}
func (s *Sign) SetSignZoneX(x float32) {
s.zoneX = x
}
func (s *Sign) GetSignZoneY() float32 {
return s.zoneY
}
func (s *Sign) SetSignZoneY(y float32) {
s.zoneY = y
}
func (s *Sign) GetSignZoneZ() float32 {
return s.zoneZ
}
func (s *Sign) SetSignZoneZ(z float32) {
s.zoneZ = z
}
func (s *Sign) GetSignZoneHeading() float32 {
return s.zoneHeading
}
func (s *Sign) SetSignZoneHeading(heading float32) {
s.zoneHeading = heading
}
func (s *Sign) GetSignZoneID() int32 {
return s.zoneID
}
func (s *Sign) SetSignZoneID(zoneID int32) {
s.zoneID = zoneID
}
func (s *Sign) GetSignDistance() float32 {
return s.signDistance
}
func (s *Sign) SetSignDistance(distance float32) {
s.signDistance = distance
}
// Display option methods
func (s *Sign) GetIncludeLocation() bool {
return s.includeLocation
}
func (s *Sign) SetIncludeLocation(include bool) {
s.includeLocation = include
}
func (s *Sign) GetIncludeHeading() bool {
return s.includeHeading
}
func (s *Sign) SetIncludeHeading(include bool) {
s.includeHeading = include
}
// SetSignIcon sets the sign's icon (delegates to spawn appearance)
func (s *Sign) SetSignIcon(icon int8) {
// TODO: Implement when spawn appearance system is integrated
// s.appearance.icon = icon
}
// HasZoneCoordinates returns true if the sign has valid zone coordinates
func (s *Sign) HasZoneCoordinates() bool {
return !(s.zoneX == 0 && s.zoneY == 0 && s.zoneZ == 0 && s.zoneHeading == 0)
}
// HasTitle returns true if the sign has a title
func (s *Sign) HasTitle() bool {
return len(s.title) > 0
}
// HasDescription returns true if the sign has a description
func (s *Sign) HasDescription() bool {
return len(s.description) > 0
}
// IsZoneSign returns true if this is a zone transport sign
func (s *Sign) IsZoneSign() bool {
return s.signType == SignTypeZone
}
// IsGenericSign returns true if this is a generic sign
func (s *Sign) IsGenericSign() bool {
return s.signType == SignTypeGeneric
}