45. PreAttributeChange
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_AreaFire.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_AreaFire.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -8,9 +8,9 @@ | ||||
|  | ||||
| UGasaAttributeSet::UGasaAttributeSet() | ||||
| { | ||||
| 	InitHealth( 50.f ); | ||||
| 	InitHealth( 100.f ); | ||||
| 	InitMaxHealth( 100.f ); | ||||
| 	InitMana( 25.f ); | ||||
| 	InitMana( 50.f ); | ||||
| 	InitMaxMana( 50.f ); | ||||
| } | ||||
|  | ||||
| @@ -41,6 +41,27 @@ void UGasaAttributeSet::Client_OnRep_MaxMana( FGameplayAttributeData& PrevMaxMan | ||||
| } | ||||
| #pragma endregion Rep Notifies | ||||
|  | ||||
| void UGasaAttributeSet::PreAttributeChange( FGameplayAttribute const& Attribute, float& NewValue ) | ||||
| { | ||||
| 	Super::PreAttributeChange( Attribute, NewValue ); | ||||
|  | ||||
| 	if ( Attribute == GetHealthAttribute() ) | ||||
| 	{ | ||||
| 		NewValue = FMath::Clamp( NewValue, 0, GetMaxHealth() ); | ||||
| 	} | ||||
| 	if ( Attribute == GetMaxHealthAttribute() ) | ||||
| 	{ | ||||
| 		NewValue = FMath::Clamp( NewValue, 0, 99999.000000 ); | ||||
| 	} | ||||
| 	if ( Attribute == GetManaAttribute() ) | ||||
| 	{ | ||||
| 		NewValue = FMath::Clamp( NewValue, 0, GetMaxMana() ); | ||||
| 	} | ||||
| 	if ( Attribute == GetMaxManaAttribute() ) | ||||
| 	{ | ||||
| 		NewValue = FMath::Clamp( NewValue, 0, 99999.000000 ); | ||||
| 	} | ||||
| } | ||||
| void UGasaAttributeSet::GetLifetimeReplicatedProps( TArray<FLifetimeProperty>& OutLifetimeProps ) const | ||||
| { | ||||
| 	Super::GetLifetimeReplicatedProps( OutLifetimeProps ); | ||||
|   | ||||
| @@ -9,20 +9,16 @@ class GASA_API UGasaAttributeSet : public UAttributeSet | ||||
| { | ||||
| 	GENERATED_BODY() | ||||
| public: | ||||
| 	UPROPERTY( ReplicatedUsing = Client_OnRep_Health, EditAnywhere, BlueprintReadWrite, Category = "Attributes" ) | ||||
| 	FGameplayAttributeData Health; | ||||
|  | ||||
| 	UPROPERTY( ReplicatedUsing = Client_OnRep_MaxHealth, EditAnywhere, BlueprintReadWrite, Category = "Attributes" ) | ||||
| 	FGameplayAttributeData MaxHealth; | ||||
|  | ||||
| 	UPROPERTY( ReplicatedUsing = Client_OnRep_Mana, EditAnywhere, BlueprintReadWrite, Category = "Attributes" ) | ||||
| 	FGameplayAttributeData Mana; | ||||
|  | ||||
| 	UPROPERTY( ReplicatedUsing = Client_OnRep_MaxMana, EditAnywhere, BlueprintReadWrite, Category = "Attributes" ) | ||||
| 	FGameplayAttributeData MaxMana; | ||||
|  | ||||
| 	UGasaAttributeSet(); | ||||
|  | ||||
| 	UPROPERTY( ReplicatedUsing = Client_OnRep_Health, EditAnywhere, BlueprintReadWrite, Category = "Attributes" ) | ||||
| 	FGameplayAttributeData Health; | ||||
| 	UPROPERTY( ReplicatedUsing = Client_OnRep_MaxHealth, EditAnywhere, BlueprintReadWrite, Category = "Attributes" ) | ||||
| 	FGameplayAttributeData MaxHealth; | ||||
| 	UPROPERTY( ReplicatedUsing = Client_OnRep_Mana, EditAnywhere, BlueprintReadWrite, Category = "Attributes" ) | ||||
| 	FGameplayAttributeData Mana; | ||||
| 	UPROPERTY( ReplicatedUsing = Client_OnRep_MaxMana, EditAnywhere, BlueprintReadWrite, Category = "Attributes" ) | ||||
| 	FGameplayAttributeData MaxMana; | ||||
|  | ||||
| 	UFUNCTION() | ||||
| 	void Client_OnRep_Health( FGameplayAttributeData& PrevHealth ); | ||||
| @@ -62,8 +58,7 @@ public: | ||||
| 	#pragma endregion Getters | ||||
|  | ||||
| #pragma region Setters | ||||
| 	    FORCEINLINE void | ||||
| 	                 SetHealth( float NewVal ); | ||||
| 	FORCEINLINE void SetHealth( float NewVal ); | ||||
| 	FORCEINLINE void SetMaxHealth( float NewVal ); | ||||
| 	FORCEINLINE void SetMana( float NewVal ); | ||||
| 	FORCEINLINE void SetMaxMana( float NewVal ); | ||||
| @@ -90,8 +85,11 @@ public: | ||||
| 	} | ||||
| 	#pragma endregion Setters | ||||
|  | ||||
| #pragma region AttributeSet | ||||
| 	    void PreAttributeChange( const FGameplayAttribute& Attribute, float& NewValue ) override; | ||||
| #pragma endregion AttributeSet | ||||
|  | ||||
| #pragma region UObject | ||||
| 	    void | ||||
| 	    GetLifetimeReplicatedProps( TArray<FLifetimeProperty>& OutLifetimeProps ) const override; | ||||
| 	    void GetLifetimeReplicatedProps( TArray<FLifetimeProperty>& OutLifetimeProps ) const override; | ||||
| #pragma endregion UObject | ||||
| }; | ||||
|   | ||||
| @@ -77,6 +77,9 @@ CodeBody parse_file( char const* path ) { | ||||
| 	return code; | ||||
| } | ||||
|  | ||||
| // inline | ||||
| // CodeConstructor find_constructor( StrC parent_name, ) | ||||
|  | ||||
| inline | ||||
| void format_file( char const* path ) | ||||
| { | ||||
|   | ||||
| @@ -4,11 +4,12 @@ | ||||
| #include "gen.hpp" | ||||
| #include "gen.builder.hpp" | ||||
| #include "GasaGenCommon.cpp" | ||||
| #include "GasaGen_UGasaAttributeSet.cpp" | ||||
| #endif | ||||
|  | ||||
| void gen_UHostWidgetController() | ||||
| { | ||||
| 	Array<StringCached> attribute_fields = get_gasa_attribute_fields(); | ||||
| 	Array<GAS_AttributeEntry> attribute_fields = get_gasa_attribute_fields(); | ||||
|  | ||||
| 	CodeBody ori_HostWidgetController_header = parse_file(path_gasa_ui "HostWidgetController.h"); | ||||
| 	{ | ||||
| @@ -64,21 +65,21 @@ void gen_UHostWidgetController() | ||||
|  | ||||
| 			for ( s32 id = 0; id < attribute_fields.num(); ++id ) | ||||
| 			{ | ||||
| 				StringCached attribute_field = attribute_fields[id]; | ||||
| 				GAS_AttributeEntry attribute_field = attribute_fields[id]; | ||||
|  | ||||
| 				attribute_events.append( code_str( | ||||
| 					UPROPERTY(BlueprintAssignable, Category = "Attributes") | ||||
| 				)); | ||||
| 				attribute_events.append(fmt_newline); | ||||
| 				attribute_events.append( parse_variable( | ||||
| 					token_fmt( "field", (StrC) attribute_field, stringize( FAttributeFloatChangedSig Event_On<field>Changed; )) | ||||
| 					token_fmt( "field", (StrC) attribute_field.Name, stringize( FAttributeFloatChangedSig Event_On<field>Changed; )) | ||||
| 				)); | ||||
| 				attribute_events.append(fmt_newline); | ||||
| 			} | ||||
|  | ||||
| 			for ( s32 id = 0; id < attribute_fields.num(); ++id ) | ||||
| 			{ | ||||
| 				StringCached attribute_field = attribute_fields[id]; | ||||
| 				StringCached attribute_field = attribute_fields[id].Name; | ||||
|  | ||||
| 				attribute_events.append( parse_function( | ||||
| 					token_fmt( "field", (StrC) attribute_field, stringize( void <field>Changed(FOnAttributeChangeData const& Data); )) | ||||
| @@ -154,9 +155,9 @@ void gen_UHostWidgetController() | ||||
| 		CodeFn BroadcastInitialValues = NoCode; | ||||
| 		{ | ||||
| 			CodeBody broadcast_calls = def_body(ECode::Function_Body); | ||||
| 			for (StringCached field : attribute_fields) | ||||
| 			for (GAS_AttributeEntry field : attribute_fields) | ||||
| 			{ | ||||
| 				broadcast_calls.append( code_fmt( "field", (StrC)field, | ||||
| 				broadcast_calls.append( code_fmt( "field", (StrC)field.Name, | ||||
| 					stringize( Event_On<field>Changed.Broadcast( GasaAttribs->Get<field>() ); ) | ||||
| 				)); | ||||
| 			} | ||||
| @@ -185,9 +186,9 @@ void gen_UHostWidgetController() | ||||
| 			CodeBody bindings = def_body(ECode::Function_Body); | ||||
| 			bindings.append(fmt_newline); | ||||
| 			bindings.append(fmt_newline); | ||||
| 			for (StringCached field : attribute_fields) | ||||
| 			for (GAS_AttributeEntry field : attribute_fields) | ||||
| 			{ | ||||
| 				bindings.append( code_fmt( "field", (StrC)field, | ||||
| 				bindings.append( code_fmt( "field", (StrC)field.Name, | ||||
| 				stringize( | ||||
| 					FOnGameplayAttributeValueChange& <field>AttributeChangedDelegate = AbilitySystem->GetGameplayAttributeValueChangeDelegate(GasaAttribs->Get<field>Attribute()); | ||||
| 					<field>AttributeChangedDelegate.AddUObject(this, &ThisClass::<field>Changed); | ||||
| @@ -219,7 +220,7 @@ void gen_UHostWidgetController() | ||||
|  | ||||
| 			for ( s32 id = 0; id < attribute_fields.num(); ) | ||||
| 			{ | ||||
| 				StringCached attribute_field = attribute_fields[id]; | ||||
| 				StringCached attribute_field = attribute_fields[id].Name; | ||||
|  | ||||
| 				attribute_callbacks.append( parse_function( token_fmt( | ||||
| 					"field", (StrC) attribute_field, | ||||
|   | ||||
| @@ -7,25 +7,44 @@ | ||||
| #include "GasaGenCommon.cpp" | ||||
| #endif | ||||
|  | ||||
| void def_attribute_properties                   ( CodeBody body, Array<StringCached> properties ); | ||||
| void def_attribute_field_on_reps                ( CodeBody body, Array<StringCached> properties ); | ||||
| void def_attribute_field_property_getters       ( CodeBody body, StrC class_name, Array<StringCached> properties ); | ||||
| void def_attribute_field_value_getters          ( CodeBody body, Array<StringCached> properties ); | ||||
| void def_attribute_field_value_setters          ( CodeBody body, Array<StringCached> properties ); | ||||
| void def_attribute_field_property_setter_inlines( CodeBody body, StrC class_name, Array<StringCached> properties ); | ||||
| void def_attribute_field_initers                ( CodeBody body, Array<StringCached> properties ); | ||||
| void impl_attribute_fields                      ( CodeBody body, StrC class_name, Array<StringCached> properties ); | ||||
| struct GAS_AttributeEntry | ||||
| { | ||||
| 	StringCached Name; | ||||
| 	StringCached MinName; | ||||
| 	StringCached MaxName; | ||||
| 	float Min; | ||||
| 	float Max; | ||||
| }; | ||||
|  | ||||
| Array<StringCached> get_gasa_attribute_fields() | ||||
| void def_attribute_properties                   ( CodeBody body, Array<GAS_AttributeEntry> properties ); | ||||
| void def_attribute_field_on_reps                ( CodeBody body, Array<GAS_AttributeEntry> properties ); | ||||
| void def_attribute_field_property_getters       ( CodeBody body, StrC class_name, Array<GAS_AttributeEntry> properties ); | ||||
| void def_attribute_field_value_getters          ( CodeBody body, Array<GAS_AttributeEntry> properties ); | ||||
| void def_attribute_field_value_setters          ( CodeBody body, Array<GAS_AttributeEntry> properties ); | ||||
| void def_attribute_field_property_setter_inlines( CodeBody body, StrC class_name, Array<GAS_AttributeEntry> properties ); | ||||
| void def_attribute_field_initers                ( CodeBody body, Array<GAS_AttributeEntry> properties ); | ||||
| void impl_attribute_fields                      ( CodeBody body, StrC class_name, Array<GAS_AttributeEntry> properties ); | ||||
|  | ||||
| Array<GAS_AttributeEntry> get_gasa_attribute_fields() | ||||
| { | ||||
| 	local_persist | ||||
| 	Array<StringCached> attribute_fields = Array<StringCached>::init_reserve(GlobalAllocator, 64); | ||||
| 	Array<GAS_AttributeEntry> attribute_fields = Array<GAS_AttributeEntry>::init_reserve(GlobalAllocator, 64); | ||||
|  | ||||
| 	for (local_persist s32 do_once = 0; do_once == 0; ++ do_once) { | ||||
| 		attribute_fields.append( get_cached_string(txt("Health"))); | ||||
| 		attribute_fields.append( get_cached_string(txt("MaxHealth"))); | ||||
| 		attribute_fields.append( get_cached_string(txt("Mana"))); | ||||
| 		attribute_fields.append( get_cached_string(txt("MaxMana"))); | ||||
| 		StringCached str_Health    = get_cached_string(txt("Health")); | ||||
| 		StringCached str_MaxHealth = get_cached_string(txt("MaxHealth")); | ||||
| 		StringCached str_Mana      = get_cached_string(txt("Mana")); | ||||
| 		StringCached str_MaxMana   = get_cached_string(txt("MaxMana")); | ||||
|  | ||||
| 		GAS_AttributeEntry Health    = { str_Health,    {nullptr}, str_MaxHealth, 0, 100.f   }; | ||||
| 		GAS_AttributeEntry MaxHealth = { str_MaxHealth, {nullptr}, {nullptr},     0, 99999.f }; | ||||
| 		GAS_AttributeEntry Mana      = { str_Mana,      {nullptr}, str_MaxMana,   0, 50.f    }; | ||||
| 		GAS_AttributeEntry MaxMana   = { str_MaxMana,   {nullptr}, {nullptr},     0, 99999.f }; | ||||
|  | ||||
| 		attribute_fields.append(Health); | ||||
| 		attribute_fields.append(MaxHealth); | ||||
| 		attribute_fields.append(Mana); | ||||
| 		attribute_fields.append(MaxMana); | ||||
| 	} | ||||
| 	return attribute_fields; | ||||
| } | ||||
| @@ -35,7 +54,7 @@ void gen_UGasaAttributeSet() | ||||
| 	CodeType   type_UAttributeSet = def_type( txt("UAttributeSet") ); | ||||
| 	CodeComment generation_notice = def_comment(txt("Generated by GasaGen/GasaGen_UGasaAttributeSet.cpp")); | ||||
|  | ||||
| 	Array<StringCached> attribute_fields = get_gasa_attribute_fields(); | ||||
| 	Array<GAS_AttributeEntry> attribute_fields = get_gasa_attribute_fields(); | ||||
|  | ||||
| 	StrC class_name = txt("UGasaAttributeSet"); | ||||
|  | ||||
| @@ -57,32 +76,39 @@ void gen_UGasaAttributeSet() | ||||
| 					body.append( UHT_GENERATED_BODY); | ||||
| 					body.append( access_public ); | ||||
|  | ||||
| 					def_attribute_properties( body, attribute_fields); | ||||
|  | ||||
| 					body.append(fmt_newline); | ||||
| 					body.append( def_constructor() ); | ||||
| 					body.append(fmt_newline); | ||||
|  | ||||
| 					def_attribute_properties( body, attribute_fields); | ||||
| 					body.append(fmt_newline); | ||||
| 					def_attribute_field_on_reps( body, attribute_fields); | ||||
|  | ||||
| 					body.append(fmt_newline); | ||||
|  | ||||
| 					body.append( fmt_newline ); | ||||
| 					body.append( def_pragma(code( region Getters ))); | ||||
| 					body.append( def_pragma(txt( "region Getters" ))); | ||||
| 					def_attribute_field_property_getters( body, class_name, attribute_fields ); | ||||
| 					body.append( fmt_newline ); | ||||
| 					def_attribute_field_value_getters( body, attribute_fields ); | ||||
| 					body.append( def_pragma(code( endregion Getters ))); | ||||
| 					body.append( def_pragma(txt( "endregion Getters" ))); | ||||
| 					body.append( fmt_newline ); | ||||
|  | ||||
| 					body.append( def_pragma(code( region Setters ))); | ||||
| 					body.append( def_pragma(txt( "region Setters" ))); | ||||
| 					def_attribute_field_value_setters( body, attribute_fields ); | ||||
| 					body.append( fmt_newline ); | ||||
| 					body.append( fmt_newline ); | ||||
| 					def_attribute_field_initers( body, attribute_fields ); | ||||
| 					body.append( def_pragma(code( endregion Setters ))); | ||||
| 					body.append( def_pragma(txt( "endregion Setters" ))); | ||||
| 					body.append( fmt_newline ); | ||||
|  | ||||
| 					body.append( def_pragma( txt("region AttributeSet"))); | ||||
| 					body.append( code_str( | ||||
| 						void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override; | ||||
| 						// void PostAttributeChange(const FGameplayAttribute& Attribute, float OldValue, float NewValue) override; | ||||
| 					)); | ||||
| 					body.append( def_pragma( txt("endregion AttributeSet"))); | ||||
| 					body.append(fmt_newline); | ||||
|  | ||||
| 					body.append( def_pragma( txt("region UObject"))); | ||||
| 					CodeFn GetLifetimeOfReplicatedProps = parse_function( code( | ||||
| 						void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override; | ||||
| @@ -165,14 +191,54 @@ void gen_UGasaAttributeSet() | ||||
|  | ||||
| 			impl_attribute_fields( body, class_name, attribute_fields); | ||||
|  | ||||
| 			CodeFn PreAttributeChange; | ||||
| 			{ | ||||
| 				CodeBody attribute_clamps = def_body( CodeT::Function_Body ); | ||||
| 				attribute_clamps.append(fmt_newline); | ||||
| 				attribute_clamps.append(fmt_newline); | ||||
| 				for (GAS_AttributeEntry field : attribute_fields) | ||||
| 				{ | ||||
| 					String clamp_min; | ||||
| 					if (field.MinName.Data) | ||||
| 						clamp_min = get_cached_string(token_fmt( "MinName", (StrC)field.MinName, "Get<MinName>()")); | ||||
| 					else | ||||
| 						clamp_min = String::fmt_buf(GlobalAllocator, "%f", field.Min); | ||||
|  | ||||
| 					String clamp_max; | ||||
| 					if (field.MaxName.Data) | ||||
| 						clamp_max = get_cached_string(token_fmt( "MaxName", (StrC)field.MaxName, "Get<MaxName>()")); | ||||
| 					else | ||||
| 						clamp_max = String::fmt_buf(GlobalAllocator, "%f", field.Max); | ||||
|  | ||||
| 					attribute_clamps.append( code_fmt( | ||||
| 						"field",     (StrC)field.Name, | ||||
| 						"clamp_min", (StrC)clamp_min, | ||||
| 						"clamp_max", (StrC)clamp_max, | ||||
| 					stringize( | ||||
| 						if (Attribute == Get<field>Attribute()) | ||||
| 						{ | ||||
| 							NewValue = FMath::Clamp(NewValue, <clamp_min>, <clamp_max>); | ||||
| 						} | ||||
| 					))); | ||||
| 				} | ||||
| 				PreAttributeChange = parse_function( token_fmt( "attribute_clamps", (StrC)attribute_clamps.to_string(), stringize( | ||||
| 					void UGasaAttributeSet::PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) | ||||
| 					{ | ||||
| 						Super::PreAttributeChange(Attribute, NewValue); | ||||
| 						<attribute_clamps> | ||||
| 					} | ||||
| 				))); | ||||
| 			} | ||||
| 			body.append(PreAttributeChange); | ||||
|  | ||||
| 			CodeFn GetLifetimeOfReplicatedProps; | ||||
| 			{ | ||||
| 				CodeBody field_lifetimes = def_body( CodeT::Function_Body); | ||||
| 				field_lifetimes.append(fmt_newline); | ||||
| 				field_lifetimes.append(fmt_newline); | ||||
| 				for (StringCached field : attribute_fields) | ||||
| 				for (GAS_AttributeEntry field : attribute_fields) | ||||
| 				{ | ||||
| 					field_lifetimes.append( code_fmt( "field", (StrC)field, stringize( | ||||
| 					field_lifetimes.append( code_fmt( "field", (StrC)field.Name, stringize( | ||||
| 						DOREPLIFETIME_DEFAULT_GAS(UGasaAttributeSet, <field>); | ||||
| 					))); | ||||
| 				} | ||||
| @@ -194,44 +260,39 @@ void gen_UGasaAttributeSet() | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void def_attribute_properties( CodeBody body, Array<StringCached> properties ) | ||||
| void def_attribute_properties( CodeBody body, Array<GAS_AttributeEntry> properties ) | ||||
| { | ||||
| 	for ( StringCached property : properties ) | ||||
| 	for ( GAS_AttributeEntry property : properties ) | ||||
| 	{ | ||||
| 		Code field_uproperty = code_fmt( "property", (StrC)property, stringize( | ||||
| 		Code field_uproperty = code_fmt( "property", (StrC)property.Name, stringize( | ||||
| 			UPROPERTY(ReplicatedUsing=Client_OnRep_<property>, EditAnywhere, BlueprintReadWrite, Category="Attributes") | ||||
| 			FGameplayAttributeData <property>; | ||||
| 		)); | ||||
|  | ||||
| 		CodeType type_FGameplayAttributeData = def_type( txt("FGameplayAttributeData")); | ||||
|  | ||||
| 		body.append(fmt_newline); | ||||
| 		body.append( field_uproperty ); | ||||
| 		body.append(fmt_newline); | ||||
| 		body.append( def_variable( type_FGameplayAttributeData, StrC(property)) ); | ||||
| 		body.append(field_uproperty); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void def_attribute_field_on_reps( CodeBody body, Array<StringCached> properties ) | ||||
| void def_attribute_field_on_reps( CodeBody body, Array<GAS_AttributeEntry> properties ) | ||||
| { | ||||
| 	for ( StringCached property : properties ) | ||||
| 	for ( GAS_AttributeEntry property : properties ) | ||||
| 	{ | ||||
| 		Code umeta_UFUNCTION = code_str( UFUNCTION() ); | ||||
|  | ||||
| 		body.append(fmt_newline); | ||||
| 		body.append( umeta_UFUNCTION ); | ||||
| 		body.append(fmt_newline); | ||||
| 		body.append( code_fmt( "property", (StrC)property, stringize( | ||||
| 		body.append( code_fmt( "property", (StrC)property.Name, stringize( | ||||
| 			void Client_OnRep_<property>(FGameplayAttributeData& Prev<property>); | ||||
| 		))); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void def_attribute_field_property_getters( CodeBody body, StrC class_name, Array<StringCached> properties ) | ||||
| void def_attribute_field_property_getters( CodeBody body, StrC class_name, Array<GAS_AttributeEntry> properties ) | ||||
| { | ||||
| 	for ( String property : properties ) | ||||
| 	for ( GAS_AttributeEntry property : properties ) | ||||
| 	{ | ||||
| 		CodeFn generated_get_attribute = parse_function( | ||||
| 			token_fmt( "class_name", class_name, "property", (StrC)property, | ||||
| 			token_fmt( "class_name", class_name, "property", (StrC)property.Name, | ||||
| 			stringize( | ||||
| 				static FGameplayAttribute Get<property>Attribute() | ||||
| 				{ | ||||
| @@ -245,11 +306,11 @@ void def_attribute_field_property_getters( CodeBody body, StrC class_name, Array | ||||
|  | ||||
| #pragma push_macro("FORCEINLINE") | ||||
| #undef FORCEINLINE | ||||
| void def_attribute_field_value_getters( CodeBody body, Array<StringCached> properties ) | ||||
| void def_attribute_field_value_getters( CodeBody body, Array<GAS_AttributeEntry> properties ) | ||||
| { | ||||
| 	for ( String property : properties ) | ||||
| 	for ( GAS_AttributeEntry property : properties ) | ||||
| 	{ | ||||
| 		body.append( code_fmt( "property", (StrC)property, | ||||
| 		body.append( code_fmt( "property", (StrC)property.Name, | ||||
| 		stringize( | ||||
| 			FORCEINLINE float Get<property>() const | ||||
| 			{ | ||||
| @@ -259,24 +320,24 @@ void def_attribute_field_value_getters( CodeBody body, Array<StringCached> prope | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void def_attribute_field_value_setters( CodeBody body, Array<StringCached> properties ) | ||||
| void def_attribute_field_value_setters( CodeBody body, Array<GAS_AttributeEntry> properties ) | ||||
| { | ||||
| 	for ( String property : properties ) | ||||
| 	for ( GAS_AttributeEntry property : properties ) | ||||
| 	{ | ||||
| 		body.append( code_fmt( "property", (StrC)property, | ||||
| 		body.append( code_fmt( "property", (StrC)property.Name, | ||||
| 		stringize( | ||||
| 			FORCEINLINE void Set<property>(float NewVal); | ||||
| 		))); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void def_attribute_field_property_setter_inlines( CodeBody body, StrC class_name, Array<StringCached> properties ) | ||||
| void def_attribute_field_property_setter_inlines( CodeBody body, StrC class_name, Array<GAS_AttributeEntry> properties ) | ||||
| { | ||||
| 	body.append(def_pragma( txt("region Attribute Setters"))); | ||||
| 	for ( String property : properties ) | ||||
| 	for ( GAS_AttributeEntry property : properties ) | ||||
| 	{ | ||||
| 		CodeFn generated_get_attribute = parse_function( | ||||
| 			token_fmt( "class_name", class_name, "property", (StrC)property, | ||||
| 			token_fmt( "class_name", class_name, "property", (StrC)property.Name, | ||||
| 			stringize( | ||||
| 				FORCEINLINE void <class_name>::Set<property>(float NewVal) | ||||
| 				{ | ||||
| @@ -292,11 +353,11 @@ void def_attribute_field_property_setter_inlines( CodeBody body, StrC class_name | ||||
| 	body.append(def_pragma( txt("endregion Attribute Setters"))); | ||||
| } | ||||
|  | ||||
| void def_attribute_field_initers ( CodeBody body, Array<StringCached> properties ) | ||||
| void def_attribute_field_initers ( CodeBody body, Array<GAS_AttributeEntry> properties ) | ||||
| { | ||||
| 	for ( String property : properties ) | ||||
| 	for ( GAS_AttributeEntry property : properties ) | ||||
| 	{ | ||||
| 		body.append( code_fmt( "property", (StrC)property, | ||||
| 		body.append( code_fmt( "property", (StrC)property.Name, | ||||
| 		stringize( | ||||
| 			FORCEINLINE void Init<property>(float NewVal) | ||||
| 			{ | ||||
| @@ -307,14 +368,14 @@ void def_attribute_field_initers ( CodeBody body, Array<StringCached> properties | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void impl_attribute_fields( CodeBody body, StrC class_name, Array<StringCached> properties ) | ||||
| void impl_attribute_fields( CodeBody body, StrC class_name, Array<GAS_AttributeEntry> properties ) | ||||
| { | ||||
| 	body.append(fmt_newline); | ||||
| 	body.append(def_pragma( txt("region Rep Notifies"))); | ||||
| 	for ( String property : properties ) | ||||
| 	for ( GAS_AttributeEntry property : properties ) | ||||
| 	{ | ||||
| 		CodeFn field_impl = parse_function( token_fmt( | ||||
| 			"class_name", class_name, "property", (StrC)property, "from_notice", txt("\n// From GAMEPLAYATTRIBUTE_REPNOTIFY\n"), | ||||
| 			"class_name", class_name, "property", (StrC)property.Name, "from_notice", txt("\n// From GAMEPLAYATTRIBUTE_REPNOTIFY\n"), | ||||
| 		stringize( | ||||
| 			void <class_name>::Client_OnRep_<property>(FGameplayAttributeData& Prev<property>) | ||||
| 			{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user