func GetEntityData(ent datatype.Entityer, base bool, depth int) *SaveEntity { if !base && !ent.IsSave() { return nil } s := &SaveEntity{} ent.SyncToDb() s.Typ = ent.ObjTypeName() s.DBId = ent.GetDbId() s.Obj = ent.GetSaveLoader() s.Index = ent.GetIndex() if ent.Base() != nil { s.Base = GetEntityData(ent.Base(), true, depth) } if base { return s } if depth > 1 { return s } clds := ent.GetChilds() l := len(clds) if l > 0 { s.Childs = make([]*SaveEntity, 0, l) for _, e := range clds { if e != nil { if child := GetEntityData(e, false, depth+1); child != nil { s.Childs = append(s.Childs, child) } } } } return s }