Executor
I see you
- Reaction score
- 57
Hi,
do you think the following OrderSystem could be useful?
do you think the following OrderSystem could be useful?
JASS:
interface BaseOrder
string c
unit u
method issue takes nothing returns nothing defaults nothing
endinterface
struct DynamicOrder extends BaseOrder
string cp
string cw
method issuePoint takes real x, real y returns nothing
call IssuePointOrder(.u,.cp,x,y)
endmethod
method issueWidget takes widget w returns nothing
call IssueTargetOrder(.u, .cw, w)
endmethod
method issueImmed takes nothing returns nothing
call IssueImmediateOrder(.u, .c)
endmethod
static method NewDynamicOrder takes unit u, string cp, string cw, string c returns Order
local thistype this = thistype.allocate()
local Order o = Order.create()
set .u = u
set .c = c
set .cp = cp
set .cw = cw
set o.Dynamic = this
set o.TheOrder = this
return o
endmethod
endstruct
struct NonTargetedOrder extends BaseOrder
method issueOnPoint takes real x, real y returns nothing
call IssuePointOrder(.u, .c, x , y )
endmethod
method issueOnWidget takes widget w returns nothing
call IssueTargetOrder(.u, .c, w)
endmethod
method issueImmed takes nothing returns nothing
call IssueImmediateOrder(.u, .c)
endmethod
static method NewNonTargetedOrder takes unit u, string c returns Order
local thistype this = thistype.allocate()
local Order o = Order.create()
set .u = u
set .c = c
set o.NonTargeted = this
set o.TheOrder = this
return o
endmethod
endstruct
struct PointOrder extends BaseOrder
real x
real y
method issue takes nothing returns nothing
call IssuePointOrder(.u, .c, .x , .y)
endmethod
static method NewPointOrder takes unit u, string c, real x, real y returns Order
local thistype this = thistype.allocate()
local Order o = Order.create()
set .u = u
set .c = c
set .x = x
set .y = y
set o.Point = this
set o.TheOrder = this
return o
endmethod
endstruct
private struct ImmedOrder extends BaseOrder
method issue takes nothing returns nothing
call IssueImmediateOrder(.u, .c)
endmethod
static method NewImmedOrder takes unit u ,string c returns Order
local thistype this = thistype.allocate()
local Order o = Order.create()
set .u = u
set .c = c
set o.Immed = this
set o.TheOrder = this
return o
endmethod
endstruct
private struct WidgetOrder extends BaseOrder
widget w
method issue takes nothing returns nothing
call IssueTargetOrder(.u, .c, .w)
endmethod
static method NewWidgetOrder takes unit u, string c, widget w returns Order
local thistype this = thistype.allocate()
local Order o = Order.create()
set .u = u
set .w = w
set .c = c
set o.Widget = this
set o.TheOrder = this
return o
endmethod
endstruct
struct Order
BaseOrder TheOrder = 0
method issue takes nothing returns nothing
call TheOrder.issue()
endmethod
delegate PointOrder Point = 0
delegate WidgetOrder Widget = 0
delegate ImmedOrder Immed = 0
delegate DynamicOrder Dynamic = 0
delegate NonTargetedOrder NonTargeted = 0
endstruct
JASS:
scope Test initializer INIT
private function TheTest1 takes nothing returns nothing
local Order T = Order.NewDynamicOrder(gg_unit_hpea_0001,"move","attack","stop")
call TriggerSleepAction(1.)
call T.issuePoint(1000.,1000.) // worker moves to 1000/1000
call TriggerSleepAction(2.)
call T.issueImmed() // he stops
call TriggerSleepAction(1.)
call T.issueWidget(gg_unit_hpea_0002) // he attacks another worker
call TriggerSleepAction(6.)
call T.issueImmed() // he stops
endfunction
private function TheTest2 takes nothing returns nothing
local Order T = Order.NewPointOrder(gg_unit_hpea_0003,"move",1000.,1000.)
call T.issue()
endfunction
private function INIT takes nothing returns nothing
call TheTest1.execute()
call TheTest2.execute()
endfunction
endscope