#pragma once #include "GameFramework/Character.h" #include "PlayerSetupState.h" #include "MiniMap.h" #include "CharacterBase.generated.h" UCLASS() class ACharacterBase : public ACharacter { GENERATED_BODY() friend class AItemBase; public: ACharacterBase(); virtual void BeginPlay() override; virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; virtual void Tick(float deltaTime) override; UFUNCTION(BlueprintCallable, Category = "Appearance") void EquipSkills(const TArray& skills); UFUNCTION(BlueprintCallable, Category = "Appearance") void EquipSkillsFromSkillTreeState(const struct FSkillTreeState& skState); UFUNCTION(NetMulticast, Reliable) void EquipItems(const TArray>& itemClasses); UFUNCTION(NetMulticast, Reliable) void EquipItem(TSubclassOf itemClasses); void SendInitialAppearance(APlayerController* pc); void Destroyed() override; UFUNCTION(BlueprintCallable, NetMulticast, Reliable, Category = "Appearance") void UnequipSkills(const TArray& skills); UFUNCTION(BlueprintCallable, NetMulticast, Reliable, Category = "Appearance") void ClearEquipment(); UFUNCTION(BlueprintCallable, NetMulticast, Reliable, Category = "Appearance") void SetCustomizations(const FCharacterCustomization& cc); UFUNCTION(BlueprintCallable, Category = "Appearance") const TArray& GetEquipedSkills() const; UFUNCTION(BlueprintCallable, Category = "Appearance") const TArray& GetEquipedItems() const; UFUNCTION(BlueprintCallable, Category = "Appearance") TArray> GetEquipedItemClasses() const; UFUNCTION(BlueprintCallable, Category = "Appearance") const FCharacterCustomization& GetCharacterCustomization() const; UFUNCTION(BlueprintCallable, Category = "Team") int32 GetTeam() const; UFUNCTION(BlueprintCallable, Category = "Team") virtual void SetTeam(int32 team); // Tracking functions for effects on characters UFUNCTION(BlueprintCallable, Category = "Effect") void RegisterEffect(class AEffect* effect); UFUNCTION(BlueprintCallable, Category = "Effect") void UnRegisterEffect(class AEffect* effect); UFUNCTION(BlueprintCallable, Category = "Effect") TArray GetEffects(); // The name of the player that controls this unit (Only for ghosts, players and illusions) UPROPERTY(BlueprintReadOnly, Replicated) FString playerName; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Vision") float visionRadius; MiniMap::MinimapHandle minimapHandle; private: // Trigerred from RequestInitialAppearance send back to the client UFUNCTION(NetMulticast, Reliable) void m_ReceiveInitialAppearance(APlayerController* pc, const TArray& itemClasses, const FCharacterCustomization& cc); // Internal usage EquipSkills to allow multiple ways to call this function from blueprints UFUNCTION(NetMulticast, Reliable) void m_EquipSkills(const TArray& skills); void m_OnItemAdded(AItemBase* item); void m_OnItemRemoved(AItemBase* item); protected: UFUNCTION() virtual void m_OnRep_Team(); UPROPERTY(ReplicatedUsing=m_OnRep_Team) int32 m_team; // Maps skills to the items it spawned TMultiMap m_mappedItems; TArray m_equipedSkills; UPROPERTY() TArray m_items; TArray m_effects; };