初始化提交
This commit is contained in:
14
Source/RaspberryVehicle.Target.cs
Normal file
14
Source/RaspberryVehicle.Target.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class RaspberryVehicleTarget : TargetRules
|
||||
{
|
||||
public RaspberryVehicleTarget( TargetInfo Target) : base(Target)
|
||||
{
|
||||
Type = TargetType.Game;
|
||||
DefaultBuildSettings = BuildSettingsVersion.V2;
|
||||
ExtraModuleNames.AddRange( new string[] { "RaspberryVehicle" } );
|
||||
}
|
||||
}
|
31
Source/RaspberryVehicle/RaspberryVehicle.Build.cs
Normal file
31
Source/RaspberryVehicle/RaspberryVehicle.Build.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
|
||||
public class RaspberryVehicle : ModuleRules
|
||||
{
|
||||
public RaspberryVehicle(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
|
||||
PublicDependencyModuleNames.AddRange(
|
||||
new string[]
|
||||
{
|
||||
"Core",
|
||||
"Engine",
|
||||
"InputCore" ,
|
||||
"CoreUObject",
|
||||
}
|
||||
);
|
||||
|
||||
PrivateDependencyModuleNames.AddRange(
|
||||
new string[]
|
||||
{
|
||||
"RHI",
|
||||
"Sockets",
|
||||
"Networking",
|
||||
"RenderCore",
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
6
Source/RaspberryVehicle/RaspberryVehicle.cpp
Normal file
6
Source/RaspberryVehicle/RaspberryVehicle.cpp
Normal file
@@ -0,0 +1,6 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "RaspberryVehicle.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, RaspberryVehicle, "RaspberryVehicle" );
|
6
Source/RaspberryVehicle/RaspberryVehicle.h
Normal file
6
Source/RaspberryVehicle/RaspberryVehicle.h
Normal file
@@ -0,0 +1,6 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
|
139
Source/RaspberryVehicle/RaspberryVehicleGameMode.cpp
Normal file
139
Source/RaspberryVehicle/RaspberryVehicleGameMode.cpp
Normal file
@@ -0,0 +1,139 @@
|
||||
#include "RaspberryVehicleGameMode.h"
|
||||
|
||||
#include "Sockets.h"
|
||||
#include "Networking.h"
|
||||
#include "Misc/Timespan.h"
|
||||
#include "SocketSubsystem.h"
|
||||
#include "Engine/Texture2DDynamic.h"
|
||||
|
||||
ARaspberryVehicleGameMode::ARaspberryVehicleGameMode(const FObjectInitializer& ObjectInitializer)
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
}
|
||||
|
||||
void ARaspberryVehicleGameMode::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);
|
||||
|
||||
UDPSocket = SocketSubsystem->CreateSocket(NAME_DGram, TEXT("Raspberry Socket"), FNetworkProtocolTypes::IPv4);
|
||||
|
||||
UDPBuffer.SetNumUninitialized(1024);
|
||||
|
||||
CameraBuffer.Init(255, 256 * 256 * 4);
|
||||
|
||||
UDPLastTime = FDateTime(0);
|
||||
UDPSendTime = FDateTime(0);
|
||||
|
||||
CameraTexture = UTexture2D::CreateTransient(256, 256);
|
||||
void* Pixels = CameraTexture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
|
||||
FMemory::Memcpy(Pixels, CameraBuffer.GetData(), 256 * 256 * 4);
|
||||
CameraTexture->PlatformData->Mips[0].BulkData.Unlock();
|
||||
CameraTexture->UpdateResource();
|
||||
}
|
||||
|
||||
void ARaspberryVehicleGameMode::Tick(float DeltaSeconds)
|
||||
{
|
||||
Super::Tick(DeltaSeconds);
|
||||
|
||||
int32 BytesNum = 0;
|
||||
TSharedRef<FInternetAddr> Addr = SocketSubsystem->CreateInternetAddr();
|
||||
|
||||
bool bIsValid;
|
||||
Addr->SetIp(TEXT("192.168.1.1"), bIsValid);
|
||||
Addr->SetIp(*IP, bIsValid);
|
||||
Addr->SetPort(6000);
|
||||
|
||||
if ((FDateTime::Now() - UDPSendTime) > FTimespan::FromSeconds(0.1))
|
||||
{
|
||||
uint8* MotorModeBuffer = (uint8*)&MotorMode;
|
||||
|
||||
UDPBuffer[0] = MotorModeBuffer[3];
|
||||
UDPBuffer[1] = MotorModeBuffer[2];
|
||||
UDPBuffer[2] = MotorModeBuffer[1];
|
||||
UDPBuffer[3] = MotorModeBuffer[0];
|
||||
|
||||
uint8* MotorSpeedBuffer = (uint8*)&MotorSpeed;
|
||||
|
||||
UDPBuffer[4] = MotorSpeedBuffer[3];
|
||||
UDPBuffer[5] = MotorSpeedBuffer[2];
|
||||
UDPBuffer[6] = MotorSpeedBuffer[1];
|
||||
UDPBuffer[7] = MotorSpeedBuffer[0];
|
||||
|
||||
UDPSocket->SendTo(UDPBuffer.GetData(), 8, BytesNum, *Addr);
|
||||
|
||||
UDPSendTime = FDateTime::Now();
|
||||
}
|
||||
|
||||
uint32 PendingDataSize;
|
||||
while(UDPSocket->HasPendingData(PendingDataSize))
|
||||
{
|
||||
UDPSocket->RecvFrom(UDPBuffer.GetData(), UDPBuffer.Num(), BytesNum, *Addr);
|
||||
|
||||
if (BytesNum == 13)
|
||||
{
|
||||
UDPLastTime = FDateTime::Now();
|
||||
|
||||
bCLP = (bool)UDPBuffer[0];
|
||||
bNear = (bool)UDPBuffer[1];
|
||||
|
||||
bIS1 = (bool)UDPBuffer[2];
|
||||
bIS2 = (bool)UDPBuffer[3];
|
||||
bIS3 = (bool)UDPBuffer[4];
|
||||
bIS4 = (bool)UDPBuffer[5];
|
||||
bIS5 = (bool)UDPBuffer[6];
|
||||
|
||||
SpeedL = UDPBuffer[7] * 0.5;
|
||||
SpeedR = UDPBuffer[8] * 0.5;
|
||||
|
||||
uint8 DistanceBuffer[4];
|
||||
|
||||
DistanceBuffer[3] = UDPBuffer[9];
|
||||
DistanceBuffer[2] = UDPBuffer[10];
|
||||
DistanceBuffer[1] = UDPBuffer[11];
|
||||
DistanceBuffer[0] = UDPBuffer[12];
|
||||
|
||||
FMemory::Memcpy(&Distance, DistanceBuffer, sizeof Distance);
|
||||
}
|
||||
else if (BytesNum == 770)
|
||||
{
|
||||
int32 ChunkIndex;
|
||||
uint8* ChunkIndexBuffer = (uint8*)&ChunkIndex;
|
||||
|
||||
ChunkIndexBuffer[0] = UDPBuffer[1];
|
||||
ChunkIndexBuffer[1] = UDPBuffer[0];
|
||||
ChunkIndexBuffer[2] = 0;
|
||||
ChunkIndexBuffer[3] = 0;
|
||||
|
||||
uint8* Src = &UDPBuffer[2];
|
||||
|
||||
for (int32 PixelIndex = 0; PixelIndex < 256; ++PixelIndex)
|
||||
{
|
||||
CameraBuffer[(ChunkIndex * 256 + PixelIndex) * 4 + 0] = Src[PixelIndex * 3 + 0];
|
||||
CameraBuffer[(ChunkIndex * 256 + PixelIndex) * 4 + 1] = Src[PixelIndex * 3 + 1];
|
||||
CameraBuffer[(ChunkIndex * 256 + PixelIndex) * 4 + 2] = Src[PixelIndex * 3 + 2];
|
||||
CameraBuffer[(ChunkIndex * 256 + PixelIndex) * 4 + 3] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void* Buffer = CameraBuffer.GetData();
|
||||
FRHITexture2D* RHICameraTexture = CameraTexture->Resource->GetTexture2DRHI();
|
||||
ENQUEUE_RENDER_COMMAND(RaspberryCameraUpdate)(
|
||||
[RHICameraTexture, Buffer](FRHICommandListImmediate& RHICmdList)
|
||||
{
|
||||
uint32 Stride = 0;
|
||||
void* Pixels = RHILockTexture2D(RHICameraTexture, 0, RLM_WriteOnly, Stride, false);
|
||||
FMemory::Memcpy(Pixels, Buffer, 256 * 256 * 4);
|
||||
RHIUnlockTexture2D(RHICameraTexture, 0, false);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void ARaspberryVehicleGameMode::EndPlay(const EEndPlayReason::Type EndPlayReason)
|
||||
{
|
||||
SocketSubsystem->DestroySocket(UDPSocket);
|
||||
|
||||
Super::EndPlay(EndPlayReason);
|
||||
}
|
82
Source/RaspberryVehicle/RaspberryVehicleGameMode.h
Normal file
82
Source/RaspberryVehicle/RaspberryVehicleGameMode.h
Normal file
@@ -0,0 +1,82 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Misc/DateTime.h"
|
||||
#include "GameFramework/GameModeBase.h"
|
||||
#include "RaspberryVehicleGameMode.generated.h"
|
||||
|
||||
class FSocket;
|
||||
class UTexture2D;
|
||||
class ISocketSubsystem;
|
||||
|
||||
UCLASS(Blueprintable)
|
||||
class ARaspberryVehicleGameMode : public AGameModeBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
ARaspberryVehicleGameMode(const FObjectInitializer& ObjectInitializer);
|
||||
|
||||
UPROPERTY(BlueprintReadWrite)
|
||||
FString IP;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
FDateTime UDPLastTime;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
bool bCLP;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
bool bNear;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
bool bIS1;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
bool bIS2;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
bool bIS3;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
bool bIS4;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
bool bIS5;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
float SpeedL = 0.0f;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
float SpeedR = 0.0f;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
float Distance = 0.0f;
|
||||
|
||||
UPROPERTY(BlueprintReadWrite)
|
||||
int32 MotorMode = -1;
|
||||
|
||||
UPROPERTY(BlueprintReadWrite)
|
||||
int32 MotorSpeed = 100;
|
||||
|
||||
UPROPERTY(BlueprintReadWrite)
|
||||
UTexture2D* CameraTexture;
|
||||
|
||||
ISocketSubsystem* SocketSubsystem;
|
||||
|
||||
FSocket* UDPSocket;
|
||||
|
||||
TArray<uint8> UDPBuffer;
|
||||
|
||||
TArray<uint8> CameraBuffer;
|
||||
|
||||
FDateTime UDPSendTime;
|
||||
|
||||
//~ Begin AActor Interface.
|
||||
virtual void BeginPlay() override;
|
||||
virtual void Tick(float DeltaSeconds) override;
|
||||
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
|
||||
//~ End AActor Interface.
|
||||
|
||||
};
|
14
Source/RaspberryVehicleEditor.Target.cs
Normal file
14
Source/RaspberryVehicleEditor.Target.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class RaspberryVehicleEditorTarget : TargetRules
|
||||
{
|
||||
public RaspberryVehicleEditorTarget( TargetInfo Target) : base(Target)
|
||||
{
|
||||
Type = TargetType.Editor;
|
||||
DefaultBuildSettings = BuildSettingsVersion.V2;
|
||||
ExtraModuleNames.AddRange( new string[] { "RaspberryVehicle" } );
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user