初始化提交
This commit is contained in:
150
Plugins/lua_wrapper/Source/lua_wrapper/Private/lua_wrapper.cpp
Normal file
150
Plugins/lua_wrapper/Source/lua_wrapper/Private/lua_wrapper.cpp
Normal file
@ -0,0 +1,150 @@
|
||||
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "lua_wrapper.h"
|
||||
#include "lua_wrapperStyle.h"
|
||||
#include "lua_wrapperCommands.h"
|
||||
#include "LevelEditor.h"
|
||||
#include "Widgets/Docking/SDockTab.h"
|
||||
#include "Widgets/Layout/SBox.h"
|
||||
#include "Widgets/Text/STextBlock.h"
|
||||
#include "Widgets/Input/SEditableTextBox.h"
|
||||
#include "Framework/MultiBox/MultiBoxBuilder.h"
|
||||
#include "HAL/FileManager.h"
|
||||
|
||||
#ifndef _MSC_VER
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
static const FName lua_wrapperTabName("LuaWrapper");
|
||||
|
||||
#define LOCTEXT_NAMESPACE "Flua_wrapperModule"
|
||||
|
||||
void Flua_wrapperModule::StartupModule()
|
||||
{
|
||||
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
|
||||
|
||||
Flua_wrapperStyle::Initialize();
|
||||
Flua_wrapperStyle::ReloadTextures();
|
||||
|
||||
Flua_wrapperCommands::Register();
|
||||
|
||||
PluginCommands = MakeShareable(new FUICommandList);
|
||||
|
||||
PluginCommands->MapAction(
|
||||
Flua_wrapperCommands::Get().OpenPluginWindow,
|
||||
FExecuteAction::CreateRaw(this, &Flua_wrapperModule::PluginButtonClicked),
|
||||
FCanExecuteAction());
|
||||
|
||||
FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");
|
||||
|
||||
{
|
||||
TSharedPtr<FExtender> MenuExtender = MakeShareable(new FExtender());
|
||||
MenuExtender->AddMenuExtension("WindowLayout", EExtensionHook::After, PluginCommands, FMenuExtensionDelegate::CreateRaw(this, &Flua_wrapperModule::AddMenuExtension));
|
||||
|
||||
LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(MenuExtender);
|
||||
}
|
||||
|
||||
{
|
||||
TSharedPtr<FExtender> ToolbarExtender = MakeShareable(new FExtender);
|
||||
ToolbarExtender->AddToolBarExtension("Settings", EExtensionHook::After, PluginCommands, FToolBarExtensionDelegate::CreateRaw(this, &Flua_wrapperModule::AddToolbarExtension));
|
||||
|
||||
LevelEditorModule.GetToolBarExtensibilityManager()->AddExtender(ToolbarExtender);
|
||||
}
|
||||
|
||||
FGlobalTabmanager::Get()->RegisterNomadTabSpawner(lua_wrapperTabName, FOnSpawnTab::CreateRaw(this, &Flua_wrapperModule::OnSpawnPluginTab))
|
||||
.SetDisplayName(LOCTEXT("Flua_wrapperTabTitle", "lua_wrapper"))
|
||||
.SetMenuType(ETabSpawnerMenuType::Hidden);
|
||||
}
|
||||
|
||||
void Flua_wrapperModule::ShutdownModule()
|
||||
{
|
||||
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
|
||||
// we call this function before unloading the module.
|
||||
Flua_wrapperStyle::Shutdown();
|
||||
|
||||
Flua_wrapperCommands::Unregister();
|
||||
|
||||
FGlobalTabmanager::Get()->UnregisterNomadTabSpawner(lua_wrapperTabName);
|
||||
}
|
||||
|
||||
TSharedRef<SDockTab> Flua_wrapperModule::OnSpawnPluginTab(const FSpawnTabArgs& SpawnTabArgs)
|
||||
{
|
||||
FText WidgetText = FText::Format(
|
||||
LOCTEXT("WindowWidgetText", "Add code to {0} in {1} to override this window's contents"),
|
||||
FText::FromString(TEXT("Flua_wrapperModule::OnSpawnPluginTab")),
|
||||
FText::FromString(TEXT("lua_wrapper.cpp"))
|
||||
);
|
||||
|
||||
return SNew(SDockTab)
|
||||
.TabRole(ETabRole::NomadTab)
|
||||
[
|
||||
// Put your tab content here!
|
||||
SNew(SBox)
|
||||
.HAlign(HAlign_Left)
|
||||
.VAlign(VAlign_Top)
|
||||
[
|
||||
SNew(SVerticalBox)
|
||||
+ SVerticalBox::Slot()[
|
||||
SNew(STextBlock)
|
||||
.Text(WidgetText)
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
#ifndef _MSC_VER
|
||||
std::string exec(const char* cmd) {
|
||||
char buffer[128];
|
||||
std::string result = "";
|
||||
FILE* f = popen(cmd, "r");
|
||||
if (!f) {
|
||||
return "popen() failed...";
|
||||
}
|
||||
try {
|
||||
while (!feof(f)) {
|
||||
if (fgets(buffer, 128, f) != NULL) {
|
||||
result += buffer;
|
||||
}
|
||||
}
|
||||
} catch (...) {
|
||||
pclose(f);
|
||||
return "run cmd failed...";
|
||||
}
|
||||
pclose(f);
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
void Flua_wrapperModule::PluginButtonClicked()
|
||||
{
|
||||
//FGlobalTabmanager::Get()->InvokeTab(lua_wrapperTabName);
|
||||
#ifdef _MSC_VER
|
||||
auto contentDir = IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*FPaths::ProjectContentDir());
|
||||
auto cmd = contentDir + TEXT("/../Tools/lua-wrapper.exe");
|
||||
system(TCHAR_TO_UTF8(*cmd));
|
||||
#else
|
||||
auto contentDir = IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*FPaths::ProjectContentDir());
|
||||
auto toolsDir = contentDir + TEXT("../Tools/");
|
||||
chdir(TCHAR_TO_UTF8(*toolsDir));
|
||||
auto ret = exec("/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono lua-wrapper.exe");
|
||||
GEngine->AddOnScreenDebugMessage(-1, 30.0f, FColor::Red, ret.c_str());
|
||||
#endif
|
||||
}
|
||||
|
||||
void Flua_wrapperModule::AddMenuExtension(FMenuBuilder& Builder)
|
||||
{
|
||||
Builder.AddMenuEntry(Flua_wrapperCommands::Get().OpenPluginWindow);
|
||||
}
|
||||
|
||||
void Flua_wrapperModule::AddToolbarExtension(FToolBarBuilder& Builder)
|
||||
{
|
||||
Builder.AddToolBarButton(Flua_wrapperCommands::Get().OpenPluginWindow);
|
||||
}
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
|
||||
IMPLEMENT_MODULE(Flua_wrapperModule, lua_wrapper)
|
||||
@ -0,0 +1,12 @@
|
||||
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "lua_wrapperCommands.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "Flua_wrapperModule"
|
||||
|
||||
void Flua_wrapperCommands::RegisterCommands()
|
||||
{
|
||||
UI_COMMAND(OpenPluginWindow, "LuaWrapper", "Generate Lua Interface (Windows only)", EUserInterfaceActionType::Button, FInputGesture());
|
||||
}
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
@ -0,0 +1,70 @@
|
||||
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "lua_wrapperStyle.h"
|
||||
#include "Styling/SlateStyleRegistry.h"
|
||||
#include "Framework/Application/SlateApplication.h"
|
||||
#include "Slate/SlateGameResources.h"
|
||||
#include "Interfaces/IPluginManager.h"
|
||||
|
||||
TSharedPtr< FSlateStyleSet > Flua_wrapperStyle::StyleInstance = NULL;
|
||||
|
||||
void Flua_wrapperStyle::Initialize()
|
||||
{
|
||||
if (!StyleInstance.IsValid())
|
||||
{
|
||||
StyleInstance = Create();
|
||||
FSlateStyleRegistry::RegisterSlateStyle(*StyleInstance);
|
||||
}
|
||||
}
|
||||
|
||||
void Flua_wrapperStyle::Shutdown()
|
||||
{
|
||||
FSlateStyleRegistry::UnRegisterSlateStyle(*StyleInstance);
|
||||
ensure(StyleInstance.IsUnique());
|
||||
StyleInstance.Reset();
|
||||
}
|
||||
|
||||
FName Flua_wrapperStyle::GetStyleSetName()
|
||||
{
|
||||
static FName StyleSetName(TEXT("lua_wrapperStyle"));
|
||||
return StyleSetName;
|
||||
}
|
||||
|
||||
#define IMAGE_BRUSH( RelativePath, ... ) FSlateImageBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ )
|
||||
#define BOX_BRUSH( RelativePath, ... ) FSlateBoxBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ )
|
||||
#define BORDER_BRUSH( RelativePath, ... ) FSlateBorderBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ )
|
||||
#define TTF_FONT( RelativePath, ... ) FSlateFontInfo( Style->RootToContentDir( RelativePath, TEXT(".ttf") ), __VA_ARGS__ )
|
||||
#define OTF_FONT( RelativePath, ... ) FSlateFontInfo( Style->RootToContentDir( RelativePath, TEXT(".otf") ), __VA_ARGS__ )
|
||||
|
||||
const FVector2D Icon16x16(16.0f, 16.0f);
|
||||
const FVector2D Icon20x20(20.0f, 20.0f);
|
||||
const FVector2D Icon40x40(40.0f, 40.0f);
|
||||
|
||||
TSharedRef< FSlateStyleSet > Flua_wrapperStyle::Create()
|
||||
{
|
||||
TSharedRef< FSlateStyleSet > Style = MakeShareable(new FSlateStyleSet("lua_wrapperStyle"));
|
||||
Style->SetContentRoot(IPluginManager::Get().FindPlugin("lua_wrapper")->GetBaseDir() / TEXT("Resources"));
|
||||
|
||||
Style->Set("lua_wrapper.OpenPluginWindow", new IMAGE_BRUSH(TEXT("ButtonIcon_40x"), Icon40x40));
|
||||
|
||||
return Style;
|
||||
}
|
||||
|
||||
#undef IMAGE_BRUSH
|
||||
#undef BOX_BRUSH
|
||||
#undef BORDER_BRUSH
|
||||
#undef TTF_FONT
|
||||
#undef OTF_FONT
|
||||
|
||||
void Flua_wrapperStyle::ReloadTextures()
|
||||
{
|
||||
if (FSlateApplication::IsInitialized())
|
||||
{
|
||||
FSlateApplication::Get().GetRenderer()->ReloadTextureResources();
|
||||
}
|
||||
}
|
||||
|
||||
const ISlateStyle& Flua_wrapperStyle::Get()
|
||||
{
|
||||
return *StyleInstance;
|
||||
}
|
||||
31
Plugins/lua_wrapper/Source/lua_wrapper/Public/lua_wrapper.h
Normal file
31
Plugins/lua_wrapper/Source/lua_wrapper/Public/lua_wrapper.h
Normal file
@ -0,0 +1,31 @@
|
||||
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
class FToolBarBuilder;
|
||||
class FMenuBuilder;
|
||||
|
||||
class Flua_wrapperModule : public IModuleInterface
|
||||
{
|
||||
public:
|
||||
|
||||
/** IModuleInterface implementation */
|
||||
virtual void StartupModule() override;
|
||||
virtual void ShutdownModule() override;
|
||||
|
||||
/** This function will be bound to Command (by default it will bring up plugin window) */
|
||||
void PluginButtonClicked();
|
||||
|
||||
private:
|
||||
|
||||
void AddToolbarExtension(FToolBarBuilder& Builder);
|
||||
void AddMenuExtension(FMenuBuilder& Builder);
|
||||
|
||||
TSharedRef<class SDockTab> OnSpawnPluginTab(const class FSpawnTabArgs& SpawnTabArgs);
|
||||
|
||||
private:
|
||||
TSharedPtr<class FUICommandList> PluginCommands;
|
||||
};
|
||||
@ -0,0 +1,23 @@
|
||||
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Framework/Commands/Commands.h"
|
||||
#include "lua_wrapperStyle.h"
|
||||
|
||||
class Flua_wrapperCommands : public TCommands<Flua_wrapperCommands>
|
||||
{
|
||||
public:
|
||||
|
||||
Flua_wrapperCommands()
|
||||
: TCommands<Flua_wrapperCommands>(TEXT("lua_wrapper"), NSLOCTEXT("Contexts", "lua_wrapper", "lua_wrapper Plugin"), NAME_None, Flua_wrapperStyle::GetStyleSetName())
|
||||
{
|
||||
}
|
||||
|
||||
// TCommands<> interface
|
||||
virtual void RegisterCommands() override;
|
||||
|
||||
public:
|
||||
TSharedPtr< FUICommandInfo > OpenPluginWindow;
|
||||
};
|
||||
@ -0,0 +1,32 @@
|
||||
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Styling/SlateStyle.h"
|
||||
|
||||
/** */
|
||||
class Flua_wrapperStyle
|
||||
{
|
||||
public:
|
||||
|
||||
static void Initialize();
|
||||
|
||||
static void Shutdown();
|
||||
|
||||
/** reloads textures used by slate renderer */
|
||||
static void ReloadTextures();
|
||||
|
||||
/** @return The Slate style set for the Shooter game */
|
||||
static const ISlateStyle& Get();
|
||||
|
||||
static FName GetStyleSetName();
|
||||
|
||||
private:
|
||||
|
||||
static TSharedRef< class FSlateStyleSet > Create();
|
||||
|
||||
private:
|
||||
|
||||
static TSharedPtr< class FSlateStyleSet > StyleInstance;
|
||||
};
|
||||
60
Plugins/lua_wrapper/Source/lua_wrapper/lua_wrapper.Build.cs
Normal file
60
Plugins/lua_wrapper/Source/lua_wrapper/lua_wrapper.Build.cs
Normal file
@ -0,0 +1,60 @@
|
||||
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.IO;
|
||||
|
||||
public class lua_wrapper : ModuleRules
|
||||
{
|
||||
public lua_wrapper(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
|
||||
PublicIncludePaths.AddRange(
|
||||
new string[] {
|
||||
Path.Combine(ModuleDirectory, "Public")
|
||||
// ... add public include paths required here ...
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
PrivateIncludePaths.AddRange(
|
||||
new string[] {
|
||||
Path.Combine(ModuleDirectory, "Private"),
|
||||
// ... add other private include paths required here ...
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
PublicDependencyModuleNames.AddRange(
|
||||
new string[]
|
||||
{
|
||||
"Core",
|
||||
// ... add other public dependencies that you statically link with here ...
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
PrivateDependencyModuleNames.AddRange(
|
||||
new string[]
|
||||
{
|
||||
"Projects",
|
||||
"InputCore",
|
||||
"UnrealEd",
|
||||
"LevelEditor",
|
||||
"CoreUObject",
|
||||
"Engine",
|
||||
"Slate",
|
||||
"SlateCore",
|
||||
// ... add private dependencies that you statically link with here ...
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
DynamicallyLoadedModuleNames.AddRange(
|
||||
new string[]
|
||||
{
|
||||
// ... add any modules that your module loads dynamically here ...
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user