func Raycast(mapid, layer int, start_x, start_y, start_z, end_x, end_y, end_z float32) []float32 { cpaths := C.Raycast(C.int(mapid), C.int(layer), C.float(start_x), C.float(start_y), C.float(start_z), C.float(end_x), C.float(end_y), C.float(end_z)) defer C.FreePaths(cpaths) if cpaths == nil { return nil } hdr := reflect.SliceHeader{ Data: uintptr(unsafe.Pointer(cpaths)), Len: 3, Cap: 3, } tmppaths := *(*[]C.float)(unsafe.Pointer(&hdr)) pos := make([]float32, 3) pos[0] = float32(tmppaths[0]) pos[1] = float32(tmppaths[1]) pos[2] = float32(tmppaths[2]) return pos }
func FindPath(mapid, layer int, start_x, start_y, start_z, end_x, end_y, end_z float32) []float32 { cpaths := C.FindStraightPath(C.int(mapid), C.int(layer), C.float(start_x), C.float(start_y), C.float(start_z), C.float(end_x), C.float(end_y), C.float(end_z)) //cpaths的第一位是数组的长度 defer C.FreePaths(cpaths) length := int(C.GetPathArrSize(cpaths)) //获取的长度为数据长度,整个数组长度为length+1 if length < 3 { return nil } hdr := reflect.SliceHeader{ Data: uintptr(unsafe.Pointer(cpaths)), Len: length + 1, Cap: length + 1, } tmppaths := *(*[]C.float)(unsafe.Pointer(&hdr)) gopaths := make([]float32, length) for k, v := range tmppaths[1:] { gopaths[k] = float32(v) } return gopaths }