2014年5月30日 星期五

自訂UnrealScript內建型別

UnrealScript跟C++一樣可以自訂struct、class、enum型別,但是如果想要增加內建型別的話,還是得修改編譯器才辦得的。雖然新增一個內建型別並不是一件簡單的事情,不過UE的程式結構寫得很系統化,很容易就可以找到要改哪些地方。本篇就來示範一下如何為UnrealScript增加一個倍精確度浮點數型別。

由於UnrealScript裡已經定義了一個名為double的struct在Object.uc如下:
struct {DOUBLE} double
{
    var native const int  A;
    var native const int  B;
};  
所以在本例中的倍精確度浮點數型別就改叫real以避免名稱衝突。當然real寫完之後其實是可以取代原來的double。這個struct只是給原生屬性佔位用的,實際上不能在UnrealScript中當成浮點數使用。

除了加入double型別外,當然還會示範如何加入基本的四則運算:
native(1111) static final operator(20) real +  ( real A, real B );
native(1112) static final operator(20) real -  ( real A, real B );
native(1113) static final operator(16) real *  ( real A, real B );
native(1114) static final operator(16) real /  ( real A, real B );
先在UnNames.h中定義待會會用到的名稱:
REGISTER_NAME( 16, DoubleProperty)
REGISTER_NAME( 17, Real) 
所有的內建型別都有對應的屬性類別,在UnType.h中定義對應double型別的UDoubleProperty類別: