Skip to content

Commit 4b770a4

Browse files
committed
Merge from ncsoft repository
1 parent 00305fc commit 4b770a4

File tree

83 files changed

+2394
-368
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+2394
-368
lines changed

Content/Scripts/devrequire.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,16 @@ var devrequire = function (opts) {
5959
};
6060

6161
watcher.OnChanged.Add(function () {
62-
var changed_modules = get_change(watcher)
63-
var module_changed = changed_modules.length > 0
62+
let changed_modules = get_change(watcher)
63+
let module_changed = changed_modules.length > 0
6464
if (module_changed) {
65+
let file = _.uniq(changed_modules).join(',')
66+
67+
if (!JavascriptLibrary.V8_IsEnableHotReload()) {
68+
console.log(`skip hot reload ${file}.`)
69+
return
70+
}
71+
6572
cleanup()
6673

6774
function retry(index) {
@@ -82,10 +89,8 @@ var devrequire = function (opts) {
8289
cleanup = function () { }
8390
}
8491

85-
var file = _.uniq(changed_modules).join(',')
86-
8792
if (should_notify) {
88-
var note = new JavascriptNotification
93+
let note = new JavascriptNotification
8994
note.Text = notification_message + ": " + file
9095
note.bFireAndForget = true
9196
note.Fire()

Content/Scripts/editor.js

+13-5
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
function read_dir(dir) {
1818
let out = Root.ReadDirectory(dir)
1919
if (out.$) {
20-
let prerequisite_items = _.filter(out.OutItems, (item) => !item.bIsDirectory && /^((?!node_modules).)*$/.test(item.Name) && /prerequisite[^\.]*\.js$/.test(item.Name))
20+
let prerequisite_items = _.filter(out.OutItems, (item) => !item.bIsDirectory && /^((?!(node_modules|__legacy)).)*$/.test(item.Name) && /prerequisite[^\.]*\.js$/.test(item.Name))
2121
prerequisites = prerequisites.concat(prerequisite_items.map((item) => item.Name.substr(root_path.length + 1)))
22-
let extension_items = _.filter(out.OutItems, (item) => !item.bIsDirectory && /^((?!node_modules).)*$/.test(item.Name) && /extension[^\.]*\.js$/.test(item.Name))
22+
let extension_items = _.filter(out.OutItems, (item) => !item.bIsDirectory && /^((?!(node_modules|__legacy)).)*$/.test(item.Name) && /extension[^\.]*\.js$/.test(item.Name))
2323
extensions = extensions.concat(extension_items.map((item) => item.Name.substr(root_path.length + 1)))
2424
out.OutItems.forEach((item) => {
2525
if (item.bIsDirectory) {
@@ -43,8 +43,15 @@
4343
}
4444

4545
function main() {
46-
let bye_prerequisites = _.filter(prerequisites.map(prerequisite => spawn('prerequisite', prerequisite)), _.isFunction)
47-
let byes = _.filter(extensions.map(extension => spawn('extension', extension)), _.isFunction)
46+
//let bye_prerequisites = _.filter(prerequisites.map(prerequisite => spawn('prerequisite', prerequisite)), _.isFunction)
47+
let prerequisite_result = prerequisites.map(prerequisite => spawn('prerequisite', prerequisite));
48+
let loaded_prerequisites = Promise.all(prerequisite_result.map(result => result[0]));
49+
let bye_prerequisites = prerequisite_result.map(result => result[1]);
50+
let byes = [];
51+
52+
loaded_prerequisites.then(__ => {
53+
byes = _.filter(extensions.map(extension => spawn('extension', extension)), _.isFunction);
54+
});
4855

4956
return function () {
5057
_.concat(byes, bye_prerequisites).forEach(byeFunc => byeFunc())
@@ -63,7 +70,8 @@
6370
return () => {}
6471
}
6572
}
66-
} else {
73+
}
74+
else {
6775
global.$$exit = function() {}
6876
global.$exit = function () {
6977
global.$$exit()

Content/Scripts/uclass.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
let classFlags = (splits[3] || "").split('+').map((x) => x.trim())
124124

125125
function refactored(x) {
126-
let m = /\s*(\w+)\s*(\/\*([^\*]*)\*\/)?\s*/.exec(x)
126+
let m = /\s*(\w+)\;?\s*(\/\*([^\*]*)\*\/)?\s*/.exec(x);
127127
if (m) {
128128
let arr = (m[3] || '').split('+').map((x) => x.trim())
129129
let type = arr.pop()

Content/Scripts/uproperty.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
let classFlags = (splits[3] || "").split('+').map((x) => x.trim())
2222

2323
function refactored(x) {
24-
let m = /\s*(\w+)\s*(\/\*([^\*]*)\*\/)?\s*/.exec(x)
24+
let m = /\s*(\w+)\;?\s*(\/\*([^\*]*)\*\/)?\s*/.exec(x);
2525
if (m) {
2626
let arr = (m[3] || '').split('+').map((x) => x.trim())
2727
let type = arr.pop()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
2+
#include "JavascriptClassViewer.h"
3+
#include "Modules/ModuleManager.h"
4+
#include "ClassViewerModule.h"
5+
#include "ClassViewerFilter.h"
6+
7+
#define LOCTEXT_NAMESPACE "JavascriptClassViewer"
8+
9+
class FClassFilter : public IClassViewerFilter
10+
{
11+
public:
12+
/** All children of these classes will be included unless filtered out by another setting. */
13+
TSet< const UClass* > AllowedChildrenOfClasses;
14+
15+
TSet< const UClass* > DisallowedClasses;
16+
17+
/** Disallowed class flags. */
18+
EClassFlags DisallowedClassFlags;
19+
20+
virtual bool IsClassAllowed(const FClassViewerInitializationOptions& InInitOptions, const UClass* InClass, TSharedRef< FClassViewerFilterFuncs > InFilterFuncs) override
21+
{
22+
return !InClass->HasAnyClassFlags(DisallowedClassFlags) && InFilterFuncs->IfInClassesSet(DisallowedClasses, InClass) != EFilterReturn::Passed
23+
&& InFilterFuncs->IfInChildOfClassesSet(AllowedChildrenOfClasses, InClass) != EFilterReturn::Failed;
24+
}
25+
26+
virtual bool IsUnloadedClassAllowed(const FClassViewerInitializationOptions& InInitOptions, const TSharedRef< const IUnloadedBlueprintData > InUnloadedClassData, TSharedRef< FClassViewerFilterFuncs > InFilterFuncs) override
27+
{
28+
return !InUnloadedClassData->HasAnyClassFlags(DisallowedClassFlags) && InFilterFuncs->IfInClassesSet(DisallowedClasses, InUnloadedClassData) != EFilterReturn::Passed
29+
&& InFilterFuncs->IfInChildOfClassesSet(AllowedChildrenOfClasses, InUnloadedClassData) != EFilterReturn::Failed;
30+
}
31+
};
32+
33+
UJavascriptClassViewer::UJavascriptClassViewer(const FObjectInitializer& ObjectInitializer)
34+
: Super(ObjectInitializer)
35+
{
36+
}
37+
38+
TSharedRef<SWidget> UJavascriptClassViewer::RebuildWidget()
39+
{
40+
if (IsDesignTime())
41+
{
42+
return RebuildDesignWidget(
43+
SNew(SBox)
44+
.HAlign(HAlign_Center)
45+
.VAlign(VAlign_Center)
46+
[
47+
SNew(STextBlock)
48+
.Text(LOCTEXT("JavascriptClassViewer", "JavascriptClassViewer"))
49+
]
50+
);
51+
}
52+
else
53+
{
54+
if (OnGetDefaultValue.IsBound())
55+
{
56+
DefaultClass = OnGetDefaultValue.Execute();
57+
}
58+
59+
return SNew(SHorizontalBox)
60+
+ SHorizontalBox::Slot()
61+
.AutoWidth()
62+
.VAlign(VAlign_Center)
63+
[
64+
SNew(SWrapBox)
65+
.PreferredWidth(150.f)
66+
+ SWrapBox::Slot()
67+
.Padding(FMargin(0, 0, 5.0f, 0))
68+
.VAlign(VAlign_Center)
69+
[
70+
SNew(SHorizontalBox)
71+
+ SHorizontalBox::Slot()
72+
.AutoWidth()
73+
.Padding(2, 0)
74+
.MaxWidth(100.0f)
75+
[
76+
SAssignNew(ClassViewerAnchor, SComboButton)
77+
.ContentPadding(FMargin(2, 2, 2, 1))
78+
.MenuPlacement(MenuPlacement_BelowAnchor)
79+
.ButtonContent()
80+
[
81+
SNew(STextBlock)
82+
.Font(FEditorStyle::GetFontStyle("PropertyWindow.NormalFont"))
83+
.Text(TAttribute<FText>::Create([this]() { return OnGetComboTextValue(); }))
84+
.ToolTipText(TAttribute<FText>::Create([this]() { return GetObjectToolTip(); }))
85+
]
86+
.OnGetMenuContent(FOnGetContent::CreateLambda([this]() { return GeneratePathPicker(); }))
87+
]
88+
// Use button
89+
+ SHorizontalBox::Slot()
90+
.AutoWidth()
91+
.Padding(1, 0)
92+
.VAlign(VAlign_Center)
93+
[
94+
SNew(SButton)
95+
.ButtonStyle(FEditorStyle::Get(), "NoBorder")
96+
.OnClicked(FOnClicked::CreateLambda([this]() { return OnClickUse(); }))
97+
.ContentPadding(1.f)
98+
.ToolTipText(NSLOCTEXT("GraphEditor", "ObjectGraphPin_Use_Tooltip", "Use asset browser selection"))
99+
[
100+
SNew(SImage)
101+
.Image(FEditorStyle::GetBrush(TEXT("PropertyWindow.Button_Use")))
102+
]
103+
]
104+
// Browse button
105+
+ SHorizontalBox::Slot()
106+
.AutoWidth()
107+
.Padding(1, 0)
108+
.VAlign(VAlign_Center)
109+
[
110+
SNew(SButton)
111+
.ButtonStyle(FEditorStyle::Get(), "NoBorder")
112+
.OnClicked(FOnClicked::CreateLambda([this]() { return OnClickBrowse(); }))
113+
.ContentPadding(0)
114+
.ToolTipText(NSLOCTEXT("GraphEditor", "ObjectGraphPin_Browse_Tooltip", "Browse"))
115+
[
116+
SNew(SImage)
117+
.Image(FEditorStyle::GetBrush(TEXT("PropertyWindow.Button_Browse")))
118+
]
119+
]
120+
]
121+
];
122+
}
123+
}
124+
125+
FReply UJavascriptClassViewer::OnClickUse()
126+
{
127+
FEditorDelegates::LoadSelectedAssetsIfNeeded.Broadcast();
128+
129+
const UClass* SelectedClass = GEditor->GetFirstSelectedClass(CategoryClass);
130+
if (SelectedClass != NULL)
131+
{
132+
DefaultClass = const_cast<UClass*>(SelectedClass);
133+
134+
if (OnSetDefaultValue.IsBound())
135+
{
136+
OnSetDefaultValue.Execute(this->GetValue());
137+
}
138+
}
139+
140+
return FReply::Handled();
141+
}
142+
143+
FText UJavascriptClassViewer::GetValue() const
144+
{
145+
FText Value;
146+
if (DefaultClass != NULL)
147+
{
148+
Value = FText::FromString(DefaultClass->GetFullName());
149+
}
150+
else
151+
{
152+
Value = FText::GetEmpty();
153+
}
154+
155+
return Value;
156+
}
157+
158+
FText UJavascriptClassViewer::GetObjectToolTip() const
159+
{
160+
return GetValue();
161+
}
162+
163+
FReply UJavascriptClassViewer::OnClickBrowse()
164+
{
165+
if (DefaultClass != NULL)
166+
{
167+
TArray<UObject*> Objects;
168+
Objects.Add(DefaultClass);
169+
170+
GEditor->SyncBrowserToObjects(Objects);
171+
}
172+
173+
return FReply::Handled();
174+
}
175+
176+
FText UJavascriptClassViewer::OnGetComboTextValue() const
177+
{
178+
FText Value = LOCTEXT("DefaultComboText", "Select Class");
179+
180+
if (CategoryClass != NULL)
181+
{
182+
if (UField* Field = Cast<UField>(DefaultClass))
183+
{
184+
Value = Field->GetDisplayNameText();
185+
}
186+
}
187+
188+
return Value;
189+
}
190+
191+
TSharedRef<SWidget> UJavascriptClassViewer::GeneratePathPicker()
192+
{
193+
FClassViewerModule& ClassViewerModule = FModuleManager::Get().LoadModuleChecked<FClassViewerModule>(TEXT("ClassViewer"));
194+
FClassViewerInitializationOptions Options;
195+
Options.bShowNoneOption = true;
196+
TSharedPtr<FClassFilter> Filter = MakeShareable(new FClassFilter);
197+
Filter->DisallowedClassFlags = CLASS_Abstract | CLASS_Deprecated | CLASS_NewerVersionExists;
198+
199+
// This class and its children are the classes that we can show objects for
200+
for (UClass* AllowedChildrenOfClass : AllowedChildrenOfClasses)
201+
{
202+
Filter->AllowedChildrenOfClasses.Add(AllowedChildrenOfClass);
203+
}
204+
Options.ClassFilter = Filter;
205+
206+
return
207+
SNew(SBox)
208+
.HeightOverride(300)
209+
.WidthOverride(300)
210+
[
211+
SNew(SBorder)
212+
.BorderImage(FEditorStyle::GetBrush("Menu.Background"))
213+
[
214+
ClassViewerModule.CreateClassViewer(Options,
215+
FOnClassPicked::CreateLambda([&](UClass* InChosenClass)
216+
{
217+
if (DefaultClass != InChosenClass)
218+
{
219+
// Close the Class Viewer
220+
ClassViewerAnchor->SetIsOpen(false);
221+
222+
DefaultClass = InChosenClass;
223+
224+
if (OnSetDefaultValue.IsBound())
225+
{
226+
OnSetDefaultValue.Execute(this->GetValue());
227+
}
228+
}
229+
}
230+
))
231+
]
232+
];
233+
}
234+
235+
#undef LOCTEXT_NAMESPACE
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#pragma once
2+
#include "Components/Widget.h"
3+
#include "JavascriptClassViewer.generated.h"
4+
5+
class SMenuAnchor;
6+
7+
UCLASS()
8+
class JAVASCRIPTEDITOR_API UJavascriptClassViewer : public UWidget
9+
{
10+
GENERATED_UCLASS_BODY()
11+
12+
public:
13+
UFUNCTION(BlueprintCallable, Category = Content)
14+
void SetCategoryClass(UClass* InCategoryClass) { CategoryClass = InCategoryClass; }
15+
16+
UFUNCTION(BlueprintCallable, Category = Content)
17+
void SetAllowedChildrenOfClasses(TArray<UClass*> InAllowedChildrenOfClasses) { AllowedChildrenOfClasses = InAllowedChildrenOfClasses; }
18+
19+
private:
20+
21+
FReply OnClickUse();
22+
23+
FText GetValue() const;
24+
25+
FText GetObjectToolTip() const;
26+
27+
FReply OnClickBrowse();
28+
29+
FText OnGetComboTextValue() const;
30+
31+
TSharedRef<SWidget> GeneratePathPicker();
32+
33+
public:
34+
35+
DECLARE_DYNAMIC_DELEGATE_RetVal(UClass*, FOnGetDefaultValue);
36+
37+
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnSetDefaultValue, FText, Value);
38+
39+
UPROPERTY(EditAnywhere, Category = Events, meta = (IsBindableEvent = "True"))
40+
FOnGetDefaultValue OnGetDefaultValue;
41+
42+
UPROPERTY(EditAnywhere, Category = Events, meta = (IsBindableEvent = "True"))
43+
FOnSetDefaultValue OnSetDefaultValue;
44+
45+
UPROPERTY()
46+
UClass* CategoryClass;
47+
48+
UPROPERTY()
49+
TArray<UClass*> AllowedChildrenOfClasses;
50+
51+
protected:
52+
// UWidget interface
53+
virtual TSharedRef<SWidget> RebuildWidget() override;
54+
// End of UWidget interface
55+
56+
TSharedPtr< class SMenuAnchor > ClassViewerAnchor;
57+
58+
class UClass* DefaultClass;
59+
};

0 commit comments

Comments
 (0)