Exemple #1
0
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
}
Exemple #2
0
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
}