mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Updated routines to support patrol.
This commit is contained in:
parent
c2b9bacdd1
commit
838b801784
@ -173,6 +173,7 @@ function DATABASE:_RegisterGroup( GroupTemplate )
|
|||||||
end
|
end
|
||||||
self.Groups[GroupTemplateName].GroupName = GroupTemplateName
|
self.Groups[GroupTemplateName].GroupName = GroupTemplateName
|
||||||
self.Groups[GroupTemplateName].Template = GroupTemplate
|
self.Groups[GroupTemplateName].Template = GroupTemplate
|
||||||
|
self.Groups[GroupTemplateName].groupId = GroupTemplate.groupId
|
||||||
self.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units
|
self.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units
|
||||||
trace.i( self.ClassName, { "Group", self.Groups[GroupTemplateName].GroupName, self.Groups[GroupTemplateName].UnitCount } )
|
trace.i( self.ClassName, { "Group", self.Groups[GroupTemplateName].GroupName, self.Groups[GroupTemplateName].UnitCount } )
|
||||||
|
|
||||||
|
|||||||
173
Routines.lua
173
Routines.lua
@ -1693,6 +1693,179 @@ trace.r( "", "", { Valid } )
|
|||||||
return Valid
|
return Valid
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints but returns speed and formation type along with vec2 of point}
|
||||||
|
-- refactor to search by groupId and allow groupId and groupName as inputs
|
||||||
|
local gpId = groupIdent
|
||||||
|
if type(groupIdent) == 'string' and not tonumber(groupIdent) then
|
||||||
|
gpId = _Database.Groups[groupIdent].groupId
|
||||||
|
end
|
||||||
|
|
||||||
|
for coa_name, coa_data in pairs(env.mission.coalition) do
|
||||||
|
if (coa_name == 'red' or coa_name == 'blue') and type(coa_data) == 'table' then
|
||||||
|
if coa_data.country then --there is a country table
|
||||||
|
for cntry_id, cntry_data in pairs(coa_data.country) do
|
||||||
|
for obj_type_name, obj_type_data in pairs(cntry_data) do
|
||||||
|
if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" then -- only these types have points
|
||||||
|
if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then --there's a group!
|
||||||
|
for group_num, group_data in pairs(obj_type_data.group) do
|
||||||
|
if group_data and group_data.groupId == gpId then -- this is the group we are looking for
|
||||||
|
if group_data.route and group_data.route.points and #group_data.route.points > 0 then
|
||||||
|
local points = {}
|
||||||
|
|
||||||
|
for point_num, point in pairs(group_data.route.points) do
|
||||||
|
local routeData = {}
|
||||||
|
if not point.point then
|
||||||
|
routeData.x = point.x
|
||||||
|
routeData.y = point.y
|
||||||
|
else
|
||||||
|
routeData.point = point.point --it's possible that the ME could move to the point = Vec2 notation.
|
||||||
|
end
|
||||||
|
routeData.form = point.action
|
||||||
|
routeData.speed = point.speed
|
||||||
|
routeData.alt = point.alt
|
||||||
|
routeData.alt_type = point.alt_type
|
||||||
|
routeData.airdromeId = point.airdromeId
|
||||||
|
routeData.helipadId = point.helipadId
|
||||||
|
routeData.type = point.type
|
||||||
|
routeData.action = point.action
|
||||||
|
if task then
|
||||||
|
routeData.task = point.task
|
||||||
|
end
|
||||||
|
points[point_num] = routeData
|
||||||
|
end
|
||||||
|
|
||||||
|
return points
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end --if group_data and group_data.name and group_data.name == 'groupname'
|
||||||
|
end --for group_num, group_data in pairs(obj_type_data.group) do
|
||||||
|
end --if ((type(obj_type_data) == 'table') and obj_type_data.group and (type(obj_type_data.group) == 'table') and (#obj_type_data.group > 0)) then
|
||||||
|
end --if obj_type_name == "helicopter" or obj_type_name == "ship" or obj_type_name == "plane" or obj_type_name == "vehicle" or obj_type_name == "static" then
|
||||||
|
end --for obj_type_name, obj_type_data in pairs(cntry_data) do
|
||||||
|
end --for cntry_id, cntry_data in pairs(coa_data.country) do
|
||||||
|
end --if coa_data.country then --there is a country table
|
||||||
|
end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then
|
||||||
|
end --for coa_name, coa_data in pairs(mission.coalition) do
|
||||||
|
end
|
||||||
|
routines.ground.patrolRoute = function(vars)
|
||||||
|
|
||||||
|
|
||||||
|
local tempRoute = {}
|
||||||
|
local useRoute = {}
|
||||||
|
local gpData = vars.gpData
|
||||||
|
if type(gpData) == 'string' then
|
||||||
|
gpData = Group.getByName(gpData)
|
||||||
|
end
|
||||||
|
|
||||||
|
local useGroupRoute
|
||||||
|
if not vars.useGroupRoute then
|
||||||
|
useGroupRoute = vars.gpData
|
||||||
|
else
|
||||||
|
useGroupRoute = vars.useGroupRoute
|
||||||
|
end
|
||||||
|
local routeProvided = false
|
||||||
|
if not vars.route then
|
||||||
|
if useGroupRoute then
|
||||||
|
tempRoute = routines.getGroupRoute(useGroupRoute)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
useRoute = vars.route
|
||||||
|
local posStart = routines.getLeadPos(gpData)
|
||||||
|
useRoute[1] = routines.ground.buildWP(posStart, useRoute[1].action, useRoute[1].speed)
|
||||||
|
routeProvided = true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local overRideSpeed = vars.speed or 'default'
|
||||||
|
local pType = vars.pType
|
||||||
|
local offRoadForm = vars.offRoadForm or 'default'
|
||||||
|
local onRoadForm = vars.onRoadForm or 'default'
|
||||||
|
|
||||||
|
if routeProvided == false and #tempRoute > 0 then
|
||||||
|
local posStart = routines.getLeadPos(gpData)
|
||||||
|
|
||||||
|
|
||||||
|
useRoute[#useRoute + 1] = routines.ground.buildWP(posStart, offRoadForm, overRideSpeed)
|
||||||
|
for i = 1, #tempRoute do
|
||||||
|
local tempForm = tempRoute[i].action
|
||||||
|
local tempSpeed = tempRoute[i].speed
|
||||||
|
|
||||||
|
if offRoadForm == 'default' then
|
||||||
|
tempForm = tempRoute[i].action
|
||||||
|
end
|
||||||
|
if onRoadForm == 'default' then
|
||||||
|
onRoadForm = 'On Road'
|
||||||
|
end
|
||||||
|
if (string.lower(tempRoute[i].action) == 'on road' or string.lower(tempRoute[i].action) == 'onroad' or string.lower(tempRoute[i].action) == 'on_road') then
|
||||||
|
tempForm = onRoadForm
|
||||||
|
else
|
||||||
|
tempForm = offRoadForm
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(overRideSpeed) == 'number' then
|
||||||
|
tempSpeed = overRideSpeed
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
useRoute[#useRoute + 1] = routines.ground.buildWP(tempRoute[i], tempForm, tempSpeed)
|
||||||
|
end
|
||||||
|
|
||||||
|
if pType and string.lower(pType) == 'doubleback' then
|
||||||
|
local curRoute = routines.utils.deepCopy(useRoute)
|
||||||
|
for i = #curRoute, 2, -1 do
|
||||||
|
useRoute[#useRoute + 1] = routines.ground.buildWP(curRoute[i], curRoute[i].action, curRoute[i].speed)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
useRoute[1].action = useRoute[#useRoute].action -- make it so the first WP matches the last WP
|
||||||
|
end
|
||||||
|
|
||||||
|
local cTask3 = {}
|
||||||
|
local newPatrol = {}
|
||||||
|
newPatrol.route = useRoute
|
||||||
|
newPatrol.gpData = gpData:getName()
|
||||||
|
cTask3[#cTask3 + 1] = 'routines.ground.patrolRoute('
|
||||||
|
cTask3[#cTask3 + 1] = routines.utils.oneLineSerialize(newPatrol)
|
||||||
|
cTask3[#cTask3 + 1] = ')'
|
||||||
|
cTask3 = table.concat(cTask3)
|
||||||
|
local tempTask = {
|
||||||
|
id = 'WrappedAction',
|
||||||
|
params = {
|
||||||
|
action = {
|
||||||
|
id = 'Script',
|
||||||
|
params = {
|
||||||
|
command = cTask3,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
useRoute[#useRoute].task = tempTask
|
||||||
|
routines.goRoute(gpData, useRoute)
|
||||||
|
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
routines.ground.patrol = function(gpData, pType, form, speed)
|
||||||
|
local vars = {}
|
||||||
|
|
||||||
|
if type(gpData) == 'table' and gpData:getName() then
|
||||||
|
gpData = gpData:getName()
|
||||||
|
end
|
||||||
|
|
||||||
|
vars.useGroupRoute = gpData
|
||||||
|
vars.gpData = gpData
|
||||||
|
vars.pType = pType
|
||||||
|
vars.offRoadForm = form
|
||||||
|
vars.speed = speed
|
||||||
|
|
||||||
|
routines.ground.patrolRoute(vars)
|
||||||
|
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Su34Status = { status = {} }
|
Su34Status = { status = {} }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user