Initial sow-tools import
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
package gff
|
||||
|
||||
import "fmt"
|
||||
|
||||
type FieldType uint32
|
||||
|
||||
const (
|
||||
TypeByte FieldType = iota
|
||||
TypeChar
|
||||
TypeWord
|
||||
TypeShort
|
||||
TypeDWord
|
||||
TypeInt
|
||||
TypeDWord64
|
||||
TypeInt64
|
||||
TypeFloat
|
||||
TypeDouble
|
||||
TypeCExoString
|
||||
TypeResRef
|
||||
TypeCExoLocString
|
||||
TypeVoid
|
||||
TypeStruct
|
||||
TypeList
|
||||
TypeOrientation
|
||||
TypeVector
|
||||
)
|
||||
|
||||
var fieldTypeNames = map[FieldType]string{
|
||||
TypeByte: "Byte",
|
||||
TypeChar: "Char",
|
||||
TypeWord: "Word",
|
||||
TypeShort: "Short",
|
||||
TypeDWord: "DWord",
|
||||
TypeInt: "Int",
|
||||
TypeDWord64: "DWord64",
|
||||
TypeInt64: "Int64",
|
||||
TypeFloat: "Float",
|
||||
TypeDouble: "Double",
|
||||
TypeCExoString: "CExoString",
|
||||
TypeResRef: "ResRef",
|
||||
TypeCExoLocString: "CExoLocString",
|
||||
TypeVoid: "Void",
|
||||
TypeStruct: "Struct",
|
||||
TypeList: "List",
|
||||
TypeOrientation: "Orientation",
|
||||
TypeVector: "Vector",
|
||||
}
|
||||
|
||||
type Document struct {
|
||||
FileType string `json:"file_type"`
|
||||
FileVersion string `json:"file_version"`
|
||||
Root Struct `json:"root"`
|
||||
}
|
||||
|
||||
type Struct struct {
|
||||
Type uint32 `json:"struct_type"`
|
||||
Fields []Field `json:"fields"`
|
||||
}
|
||||
|
||||
type Field struct {
|
||||
Label string `json:"label"`
|
||||
Type FieldType `json:"-"`
|
||||
Value Value `json:"-"`
|
||||
}
|
||||
|
||||
type Value interface {
|
||||
fieldType() FieldType
|
||||
}
|
||||
|
||||
type LocString struct {
|
||||
StringRef uint32 `json:"string_ref"`
|
||||
Entries []LocStringEntry `json:"entries"`
|
||||
}
|
||||
|
||||
type LocStringEntry struct {
|
||||
ID uint32 `json:"id"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
type Vector struct {
|
||||
X float32 `json:"x"`
|
||||
Y float32 `json:"y"`
|
||||
Z float32 `json:"z"`
|
||||
}
|
||||
|
||||
type Orientation struct {
|
||||
X float32 `json:"x"`
|
||||
Y float32 `json:"y"`
|
||||
Z float32 `json:"z"`
|
||||
W float32 `json:"w"`
|
||||
}
|
||||
|
||||
type ByteValue uint8
|
||||
type CharValue int8
|
||||
type WordValue uint16
|
||||
type ShortValue int16
|
||||
type DWordValue uint32
|
||||
type IntValue int32
|
||||
type DWord64Value uint64
|
||||
type Int64Value int64
|
||||
type FloatValue float32
|
||||
type DoubleValue float64
|
||||
type StringValue string
|
||||
type ResRefValue string
|
||||
type VoidValue []byte
|
||||
type ListValue []Struct
|
||||
|
||||
func (ByteValue) fieldType() FieldType { return TypeByte }
|
||||
func (CharValue) fieldType() FieldType { return TypeChar }
|
||||
func (WordValue) fieldType() FieldType { return TypeWord }
|
||||
func (ShortValue) fieldType() FieldType { return TypeShort }
|
||||
func (DWordValue) fieldType() FieldType { return TypeDWord }
|
||||
func (IntValue) fieldType() FieldType { return TypeInt }
|
||||
func (DWord64Value) fieldType() FieldType { return TypeDWord64 }
|
||||
func (Int64Value) fieldType() FieldType { return TypeInt64 }
|
||||
func (FloatValue) fieldType() FieldType { return TypeFloat }
|
||||
func (DoubleValue) fieldType() FieldType { return TypeDouble }
|
||||
func (StringValue) fieldType() FieldType { return TypeCExoString }
|
||||
func (ResRefValue) fieldType() FieldType { return TypeResRef }
|
||||
func (LocString) fieldType() FieldType { return TypeCExoLocString }
|
||||
func (VoidValue) fieldType() FieldType { return TypeVoid }
|
||||
func (Struct) fieldType() FieldType { return TypeStruct }
|
||||
func (ListValue) fieldType() FieldType { return TypeList }
|
||||
func (Orientation) fieldType() FieldType { return TypeOrientation }
|
||||
func (Vector) fieldType() FieldType { return TypeVector }
|
||||
|
||||
func (t FieldType) String() string {
|
||||
if name, ok := fieldTypeNames[t]; ok {
|
||||
return name
|
||||
}
|
||||
return fmt.Sprintf("FieldType(%d)", t)
|
||||
}
|
||||
|
||||
func NewField(label string, value Value) Field {
|
||||
return Field{
|
||||
Label: label,
|
||||
Type: value.fieldType(),
|
||||
Value: value,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user