Inital Commit
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "MyActorComponent.h"
|
||||
|
||||
// Sets default values for this component's properties
|
||||
UMyActorComponent::UMyActorComponent()
|
||||
{
|
||||
// Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features
|
||||
// off to improve performance if you don't need them.
|
||||
PrimaryComponentTick.bCanEverTick = true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Called when the game starts
|
||||
void UMyActorComponent::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
// ...
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Called every frame
|
||||
void UMyActorComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
|
||||
{
|
||||
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
|
||||
|
||||
// ...
|
||||
}
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "WheatherSystem.h"
|
||||
#include <Camera/CameraComponent.h>
|
||||
|
||||
// Sets default values
|
||||
AWheatherSystem::AWheatherSystem()
|
||||
{
|
||||
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
|
||||
RainComponent = CreateDefaultSubobject<UNiagaraComponent>(TEXT("RainComponent"));
|
||||
|
||||
SnowComponent = CreateDefaultSubobject<UNiagaraComponent>(TEXT("SnowComponent"));
|
||||
|
||||
RainComponent->bAutoActivate = false;
|
||||
SnowComponent->bAutoActivate = false;
|
||||
RainComponent->Deactivate();
|
||||
SnowComponent->Deactivate();
|
||||
|
||||
SetActorLocation(FVector(0, 0, 0));
|
||||
|
||||
if (Sun != NULL && DayCurve != NULL && Moon != NULL) {
|
||||
FRotator* SunRotation = new FRotator(0.0, 0.0, 0.0);
|
||||
FRotator* MoonRotation = new FRotator(0.0, 0.0, 0.0);
|
||||
|
||||
SunRotation->Pitch = DayCurve->GetFloatValue(CurrentTime);
|
||||
MoonRotation->Pitch = DayCurve->GetFloatValue(CurrentTime) * -1;
|
||||
|
||||
Moon->SetActorRotation(*MoonRotation);
|
||||
Sun->SetActorRotation(*SunRotation);
|
||||
|
||||
UpdateWeather();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
void AWheatherSystem::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
OneHoure = (DayLengthMiutes * 60) / 24;
|
||||
APawn* PlayerPawn = UGameplayStatics::GetPlayerPawn(this, 0);
|
||||
USceneComponent* PlayerRoot = PlayerPawn->GetRootComponent();
|
||||
UCameraComponent* PlayerCamera = PlayerPawn->FindComponentByClass<UCameraComponent>();
|
||||
|
||||
RainComponent->AttachToComponent(PlayerCamera, FAttachmentTransformRules(EAttachmentRule::SnapToTarget, EAttachmentRule::KeepRelative, EAttachmentRule::KeepRelative, true));
|
||||
SnowComponent->AttachToComponent(PlayerCamera, FAttachmentTransformRules(EAttachmentRule::SnapToTarget, EAttachmentRule::KeepRelative, EAttachmentRule::KeepRelative, true));
|
||||
const FNiagaraParameterStore& RainParameterStore = RainComponent->GetOverrideParameters();
|
||||
const FNiagaraParameterStore& SnowParameterStore = SnowComponent->GetOverrideParameters();
|
||||
FNiagaraVariable Variable(FNiagaraTypeDefinition::GetFloatDef(), "SpawnRate");
|
||||
RainParameterStore.GetParameterValue(MaxRain, Variable);
|
||||
SnowParameterStore.GetParameterValue(MaxSnow, Variable);
|
||||
}
|
||||
|
||||
// Called every frame
|
||||
void AWheatherSystem::Tick(float DeltaTime)
|
||||
{
|
||||
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
double newTime = CurrentTime + (DeltaTime / OneHoure);
|
||||
|
||||
if (newTime > 24) {
|
||||
newTime = newTime - 24;
|
||||
}
|
||||
|
||||
CurrentTime = newTime;
|
||||
|
||||
if (Sun != NULL && DayCurve != NULL && Moon != NULL) {
|
||||
|
||||
FRotator* SunRotation = new FRotator(0.0, 0.0, 0.0);
|
||||
FRotator* MoonRotation = new FRotator(0.0, 0.0, 0.0);
|
||||
|
||||
// Sonnenbewegung
|
||||
SunRotation->Pitch = DayCurve->GetFloatValue(CurrentTime);
|
||||
|
||||
// Mondbewegung
|
||||
MoonRotation->Pitch = SunRotation->Pitch - 180.0f;
|
||||
|
||||
//Rotationen anwenden
|
||||
Sun->SetActorRotation(*SunRotation);
|
||||
Moon->SetActorRotation(*MoonRotation);
|
||||
|
||||
UpdateWeather();
|
||||
}
|
||||
}
|
||||
|
||||
void AWheatherSystem::UpdateWeather() {
|
||||
if (SunlightItensity != NULL && SkylightIntensity != NULL && WeatherTypeCurve != NULL) {
|
||||
|
||||
float weatherType = WeatherTypeCurve->GetFloatValue(CurrentTime);
|
||||
|
||||
Sun->GetLightComponent()->SetIntensity(
|
||||
FMath::Lerp(
|
||||
SunlightItensity->GetVectorValue(CurrentTime).X,
|
||||
SunlightItensity->GetVectorValue(CurrentTime).Y,
|
||||
weatherType));
|
||||
|
||||
SkyLight->GetLightComponent()->SetIntensity(
|
||||
FMath::Lerp(
|
||||
SkylightIntensity->GetVectorValue(CurrentTime).X,
|
||||
SkylightIntensity->GetVectorValue(CurrentTime).Y,
|
||||
weatherType));
|
||||
|
||||
}
|
||||
|
||||
UpdateRain();
|
||||
UpdateSnow();
|
||||
UpdateFog();
|
||||
|
||||
Sun->GetLightComponent()->SetEnableLightShaftBloom(CurrentTime > 6.0 && CurrentTime < 18.0);
|
||||
Sun->GetComponent()->SetEnableLightShaftOcclusion(CurrentTime > 6.0 && CurrentTime < 18.0);
|
||||
}
|
||||
|
||||
void AWheatherSystem::UpdateRain()
|
||||
{
|
||||
if (bRain){
|
||||
if (RainTimelineCurve != NULL) {
|
||||
float CurrentIntensity = RainTimelineCurve->GetFloatValue(CurrentTime);
|
||||
if (CurrentIntensity <= 0.000001) {
|
||||
RainComponent->Deactivate();
|
||||
}
|
||||
else {
|
||||
RainComponent->Activate();
|
||||
RainComponent->SetFloatParameter("SpawnRate", MaxRain * CurrentIntensity);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
RainComponent->Deactivate();
|
||||
}
|
||||
}
|
||||
|
||||
void AWheatherSystem::UpdateSnow()
|
||||
{
|
||||
if (bSnow){
|
||||
if (SnowTimelineCurve != NULL) {
|
||||
float CurrentIntensity = SnowTimelineCurve->GetFloatValue(CurrentTime);
|
||||
if (CurrentIntensity <= 0.000001) {
|
||||
SnowComponent->Deactivate();
|
||||
}
|
||||
else {
|
||||
SnowComponent->Activate();
|
||||
SnowComponent->SetFloatParameter("SpawnRate", MaxSnow * CurrentIntensity);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
SnowComponent->Deactivate();
|
||||
}
|
||||
}
|
||||
|
||||
void AWheatherSystem::UpdateFog()
|
||||
{
|
||||
if (Fog != NULL) {
|
||||
UExponentialHeightFogComponent* FogComponent = Fog->GetComponent();
|
||||
if (bFog) {
|
||||
if (FogTimelineCurve != NULL) {
|
||||
|
||||
FogComponent->SetFogDensity(FogTimelineCurve->GetFloatValue(CurrentTime));
|
||||
}
|
||||
}
|
||||
else {
|
||||
FogComponent->SetFogDensity(0.005);
|
||||
}
|
||||
if (FogHeightFalloffCurve != NULL) {
|
||||
FogComponent->SetFogHeightFalloff(FogHeightFalloffCurve->GetFloatValue(CurrentTime));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user