View Single Post
nergal
Veteran Member
Join Date: Apr 2012
Old 11-03-2020 , 17:26   Re: SourceGo: Experimental Golang to SourcePawn Transpiler
Reply With Quote #4

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;
__________________
nergal is offline