Skip to content

Instantly share code, notes, and snippets.

@nakosung
Created November 25, 2016 13:22
Show Gist options
  • Save nakosung/cfe9818f48829d4fc9973f4600786c72 to your computer and use it in GitHub Desktop.
Save nakosung/cfe9818f48829d4fc9973f4600786c72 to your computer and use it in GitHub Desktop.
function maybe_create_ai() {
let controller = GWorld.GetAllActorsOfClass(AIController).OutActors[0]
if (!controller) {
let BP = Blueprint.Load('/Game/TopDownBP/Blueprints/TopDownCharacter.TopDownCharacter')
let old = GWorld.GetAllActorsOfClass(Character).OutActors[0]
let pos = old.GetActorLocation()
let character = new BP.GeneratedClass(GWorld,{X:pos.X,Y:pos.Y + 200,Z:pos.Z})
controller = new AIController(GWorld)
controller.Possess(character)
}
let callback
function moveTo(pos) {
let result = controller.MoveToLocation(pos,10,true,true,true,true)
if (result == 'RequestSuccessful') {
return new Promise(resolve => callback = resolve)
} else if (result == 'AlreadyAtGoal') {
return Promise.resolve()
} else {
return Promise.reject(new Error(result))
}
}
// Hook up delegate
controller.ReceiveMoveCompleted = [function() {
console.log('relay',...arguments,callback)
let fn = callback
callback = null
fn && fn()
}]
// Add js method (only visible to js)
controller.moveTo = moveTo
controller.destroy = function() {
let character = controller.GetControlledPawn()
character.DestroyActor()
controller.DestroyActor()
}
return controller
}
function show_widget(elem) {
if (!global.$widget) {
let widget = GWorld.CreateWidget(JavascriptWidget, GWorld.GetPlayerController(0))
widget.proxy = {}
widget.JavascriptContext = Context
widget.AddToViewport()
global.$widget = widget
}
let widget = global.$widget
widget.RemoveFromViewport()
widget.SetRootWidget(elem)
widget.AddToViewport()
}
function demo_ui() {
let UMG = require('UMG')
function click_1() {
console.log("HELLO")
}
function click_2() {
console.log("WORLD")
}
let ui = UMG.div({},
UMG.text({},"..Hello Tencent."),
UMG.span({},
UMG(Button,{Slot:{Size:{SizeRule:'Fill'}},OnClicked:click_1},"This button"),
UMG(Button,{Slot:{Size:{SizeRule:'Fill'}},OnClicked:click_2},"Rocks")
)
)
let instantiator = require('instantiator')
show_widget(instantiator(ui))
}
module.exports = function () {
let controller = maybe_create_ai()
function step() {
return controller.moveTo({X:Math.random() * 500, Y:Math.random() * 100 + 300})
}
function sequence(head,...tail) {
return head().then(_ => tail.length && sequence(...tail))
}
sequence(step,step,step,step,step).then(_ => console.log("BT completed")).then(_ => controller.destroy())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment