I love the smell of UnrealEd crashing in the morning. – tarquin

UnrealScript Feature Recommendations

From Unreal Wiki, The Unreal Engine Documentation Site
Revision as of 03:55, 14 June 2010 by 00zX (Talk | contribs) (Block Scope variable definitions)

Jump to: navigation, search

What is this page for?

This page is here to promote discussion amongst UScripters about what features they would like to see added to UScript. When posting suggestions to this page you must have the understanding that these recommendations are purely that, they are not expectations, so with that do not expect these things to be added (also consider this when discussing/criticizing others suggestions).
Please try to keep your recommendations within reason I do think a realistic approach is best, thank you.

Block Scope variable definitions

This:

function NoBlockScope()
{
	local Object Obj;
 
	foreach ObjArray(Obj)
	{
		//Obj is accessible here
	}
	//Obj is defined and is accessible in this scope
}

Would become:

function BlockScope()
{
	foreach ObjArray(local Object Obj)
	{
		//Obj is accessible here
	}
	//Obj is not defined and inaccessible in this scope
}

The local keyword could be replaced with var, block or just omitted entirely. Similarly this would work for any type as in the following:

function BlockScopeTwo()
{
	foreach ObjArray(var Object Obj, var int i)
	{
		//Obj and i are only accessible here
	}
	//Obj and i are not defined and inaccessible in this scope
}

Default variable assignment

This:

function bool CheckReplacement(Actor Other)
{
	local Controller C;
 
	C = Controller(Other);
 
	if(C != None)
	{
		//do something here
	}
}

Would become:

function bool CheckReplacement(Actor Other)
{
	local Controller C = Controller(Other);
 
	if(C != None)
	{
		//do something here
	}
}

The following example is of both block scope and default variable assignment:

function BlockScopeThree()
{
	for(local int i = 0; i < A.length; ++i)
	{
		//do something here
	}
}

Casting as type

function bool CheckReplacement(Actor Other)
{
	local Controller(Other) C;
 
	if(C != None)
	{
		//do something here
	}
}

Accessor

var Pawn Pawn;
var Pawn.Controller Controller; // Pawn must have a subobject Controller right?

Triplet type

A type that can only be one of the following, constructed from 2 boolean types, one which denoted the value of either 0 or 1 and the other which denotes the sign being a negative or positive. There is infact a possibility for a negative zero.

-1,0,1

Updates to normal()

Using the aforementioned Triplet type one can construct a truple which can be used as a unit vector. This way input into the normal() would be a type conversion and allow for a more correct literal.

<=> Operator

With this type its possible to implement this binary relationship operator Space Ship Operator as in perl, ruby and groovy programming languages.