This commit is contained in:
2025-09-23 11:18:33 +08:00
parent bc21884da0
commit e5fba438ea
9 changed files with 303 additions and 121 deletions

View File

@@ -127,6 +127,69 @@ processor IADS_CMDR_TASK_MGR WSF_TASK_PROCESSOR
}
end_script
# -------------------------------------------------------------------------
script void sendMessage()
#writeln("MakeAssignments ");
Array<WsfPlatform> firer = Array<WsfPlatform>();
Array<WsfPlatform> mover = Array<WsfPlatform>();
Array<WsfPlatform> waiter = Array<WsfPlatform>();
foreach (WsfPlatform sub in PLATFORM.Subordinates())
{
#writeln("is Subordinates");
if (sub.Type() == "LARGE_SAM_LAUNCHER")
{
#writeln("is LARGE_SAM_LAUNCHER");
if (WeaponsAvailable(sub) &&
(TasksAssignedTo(sub) < MAX_ASSIGNMENTS_PER_SAM) &&
(TasksAssignedTo(sub, TRACK.TrackId()) < 1) &&
(TRACK.WithinZoneOf(sub, "battalion_sector")))
{
#writeln("can fire");
writeln("*** Adding ", sub.Name(), " to firer");
firer.PushBack(sub);
}
if(WeaponsAvailable(sub) &&
!(TRACK.WithinZoneOf(sub, "battalion_sector")))
{
writeln("*** Adding ", sub.Name(), " to mover");
mover.PushBack(sub);
}
if(!WeaponsAvailable(sub))
{
waiter.PushBack(sub);
}
}
}
int i;
int numAssignments = (int)MATH.Min(firer.Size(), MAX_SAMS_PER_TARGET);
for (int i=0; i < numAssignments; i = i + 1)
{
writeln("assign fire");
WsfControlMessage msg = WsfControlMessage();
msg.SetAuxData("track",TRACK);
msg.SetAuxData("task","ENGAGE");
PLATFORM.Comm("sub_net").SendMessage(msg,"red_mortar_carrier1","cmdr_net");
#AssignTask(TRACK, "ENGAGE", firer[i]);
}
int numMover=(int)(mover.Size());
for (int i=0; i < numMover; i = i + 1)
{
writeln("assign move");
AssignTask(TRACK, "MOVE", mover[i]);
}
int numWaiter=(int)(waiter.Size());
for (int i=0; i < numWaiter; i = i + 1)
{
writeln("assign wait");
AssignTask(TRACK, "WAIT", waiter[i]);
}
end_script
# -------------------------------------------------------------------------
evaluation_interval DETECTED 10.0 sec
@@ -134,7 +197,8 @@ processor IADS_CMDR_TASK_MGR WSF_TASK_PROCESSOR
state DETECTED
next_state ASSIGNED
if (! IsAssignable()) return false;
MakeAssignments();
#MakeAssignments();
#sendMessage();
return true;
end_next_state
end_state
@@ -148,7 +212,8 @@ processor IADS_CMDR_TASK_MGR WSF_TASK_PROCESSOR
CancelTask(TRACK.TrackId());
return true;
}
MakeAssignments();
#MakeAssignments();
#sendMessage();
return false;
end_next_state
end_state
@@ -178,6 +243,7 @@ platform_type IADS_CMDR WSF_PLATFORM
processor task_mgr IADS_CMDR_TASK_MGR
operating_level ENGAGE 1
end_processor

View File

@@ -12,54 +12,65 @@
# * * ************************************** * *
include_once weapons/sam/large_sam.txt
include_once behavior/behavior_engage.txt
platform_type LARGE_SAM_LAUNCHER WSF_PLATFORM
platform_type LARGE_SAM_LAUNCHER WSF_PLATFORM
icon SA-10_Launcher
radar_signature VEHICLE_RADAR_SIGNATURE
comm cmdr_net RED_DATALINK
mover WSF_GROUND_MOVER
end_mover
comm cmdr_net RED_DATALINK
network_name <local:slave>
internal_link data_mgr
internal_link task_mgr
end_comm
mover WSF_GROUND_MOVER
end_mover
processor data_mgr WSF_TRACK_PROCESSOR
purge_interval 60 sec
end_processor
processor task_mgr WSF_TASK_PROCESSOR
script void on_task_assign(WsfTask aTask, WsfTrack aTrack)
if (aTask.TaskType() == "ENGAGE")
{
WsfWeapon missile = PLATFORM.Weapon("sam");
missile.Fire(aTrack);
writeln("fire,remain weapon:", missile.QuantityRemaining());
}
if (aTask.TaskType() == "MOVE")
{
if(!aTrack.WithinZoneOf(PLATFORM,"battalion_sector"))
{
double relativeAzimuthOf=
PLATFORM.RelativeAzimuthOf(aTrack.CurrentLocation());
PLATFORM.TurnToRelativeHeading(relativeAzimuthOf);
PLATFORM.GoToSpeed(16);#m/s
}
}
if (aTask.TaskType() == "WAIT")
{
PLATFORM.GoToSpeed(0);#m/s
}
update_interval 5 sec
advanced_behavior_tree
selector
behavior_node behavior_engage
end_selector
end_advanced_behavior_tree
end_script
# script void on_task_assign(WsfTask aTask, WsfTrack aTrack)
#
# if (aTask.TaskType() == "ENGAGE")
# {
# WsfWeapon missile = PLATFORM.Weapon("sam");
# missile.Fire(aTrack);
# writeln("fire,remain weapon:", missile.QuantityRemaining());
# }
# if (aTask.TaskType() == "MOVE")
# {
# if(!aTrack.WithinZoneOf(PLATFORM,"battalion_sector"))
# {
# double relativeAzimuthOf=
# PLATFORM.RelativeAzimuthOf(aTrack.CurrentLocation());
# PLATFORM.TurnToRelativeHeading(relativeAzimuthOf);
# PLATFORM.GoToSpeed(16);#m/s
#
# }
# }
# if (aTask.TaskType() == "WAIT")
# {
# PLATFORM.GoToSpeed(0);#m/s
# }
#
#
# end_script
end_processor
weapon sam LARGE_SAM
quantity 10
end_weapon