In terms of what SourceGo is capable of, here's an example using a receiver, returning multiple values, and assigning multiple values.
Code:
type PlayerInfo struct {
Origin Vec3
Angle QAngle
Weaps [3]Entity
}
func (pi PlayerInfo) GetOrigin(buffer *Vec3) (float, float, float) {
*buffer = pi.Origin
return pi.Origin[0], pi.Origin[1], pi.Origin[2]
}
var p PlayerInfo
var origin Vec3
x,y,z := p.GetOrigin(&origin)
origin[0], origin[1], origin[2] = x,y,z
this becomes:
Code:
enum struct PlayerInfo {
float Origin[3];
float Angle[3];
int Weaps[3];
}
public float PlayerInfo_GetOrigin(const PlayerInfo pi, float buffer[3], float& PlayerInfo_GetOrigin_param1, float& PlayerInfo_GetOrigin_param2) {
buffer = pi.Origin;
PlayerInfo_GetOrigin_param1 = pi.Origin[1];
PlayerInfo_GetOrigin_param2 = pi.Origin[2];
return pi.Origin[0];
}
PlayerInfo p;
float origin[3];
float x;
float y;
float z;
x = PlayerInfo_GetOrigin(p, origin, y, z);
origin[0] = x;
origin[1] = y;
origin[2] = z;
__________________