-
Notifications
You must be signed in to change notification settings - Fork 29
Airplane Group Spawning #77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 4 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -19,4 +19,5 @@ read_globals = { | |
| "trigger", | ||
| "Unit", | ||
| "world", | ||
| "Airbase", | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -21,13 +21,158 @@ local skill = { | |
| Player = 5 | ||
| } | ||
|
|
||
| -- types for aircraft taking off | ||
| local takeoffTypes = { | ||
| [1] = "TakeOff", | ||
| [2] = "TakeOffParking", | ||
| [3] = "TakeOffParkingHot", | ||
| [4] = "Turning Point", | ||
| runway = "TakeOff", | ||
| cold = "TakeOffParking", | ||
| hot = "TakeOffParkingHot", | ||
| air = "Turning Point" | ||
Wizxrd marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
|
|
||
| -- actiions for aircraft taking off | ||
| local takeoffActions = { | ||
Wizxrd marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| [1] = "From Runway", | ||
| [2] = "From Parking Area", | ||
| [3] = "From Parking Area Hot", | ||
| [4] = "Turning Point", | ||
| runway = "From Runway", | ||
| cold = "From Parking Area", | ||
| hot = "From Parking Area Hot", | ||
| air = "Turning Point", | ||
Wizxrd marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
|
|
||
| --local altitudeType = { | ||
| -- [1] = "BARO", | ||
| -- [2] = "RADIO", | ||
| -- BARO = 1, | ||
| -- RADIO = 2 | ||
| --} | ||
|
|
||
| local buildAirplanePoints = function(points) | ||
| local builtPoints = {} | ||
| for _, pointData in pairs(points) do | ||
| local pointVec3 | ||
| if type(pointData.place) == "string" then | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll think about if we can do this in a different way by having gRPC types. No need to change this for the moment, just an FYI. If may be that we do not allow clients to specify anything other than a Lat/Lon/Alt point since the client can get the information on airfield locations and zones themselves and send us that data instead of making us find it server-side.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On reflection I think we should only allow Lat/Lon/alt using the |
||
| if Airbase.getByName(pointData.place) then | ||
| pointVec3 = Airbase.getByName(pointData.place):getPoint() | ||
| env.info("ab point type") | ||
Wizxrd marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| elseif trigger.misc.getZone(pointData.place) then | ||
| pointVec3 = trigger.misc.getZone(pointData.place).point | ||
| env.info("zone point type") | ||
Wizxrd marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| end | ||
| elseif type(pointData.place) == "table" then | ||
| pointVec3 = coord.LLtoLO(pointData.place.lat, pointData.place.lon) | ||
| end | ||
| builtPoints[#builtPoints+1] = { | ||
| alt = pointData.alt, | ||
| x = pointVec3.x, | ||
| y = pointVec3.z, | ||
| type = pointData.type or takeoffTypes.air, | ||
| eta = 0, | ||
| eta_locked = true, | ||
| alt_type = pointData.alt_type or "BARO", | ||
Wizxrd marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| formation_template = "", | ||
| speed = pointData.speed, | ||
| action = pointData.action or takeoffActions.air, | ||
| task = { | ||
| id = "ComboTask", | ||
| params = { | ||
| tasks = {} | ||
| } | ||
| } | ||
| } | ||
| end | ||
| -- here we ammend the first point to allow for spawns from airbases if it isn't an airspawn | ||
| if Airbase.getByName(points[1].place) then | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Again as an FYI this bit may change, but nothing to do yet. |
||
| if points[1].type ~= "Turning Point" and points[1].action ~= "Turning Point" then | ||
| local ab = Airbase.getByName(points[1].place) | ||
| local abId = Airbase.getID(ab) | ||
| local abCat = Airbase.getDesc(ab).category | ||
| if abCat == 0 then -- Airbase.Category.AIRDROME | ||
| builtPoints[1].airdromeId = abId | ||
| elseif abCat == 2 then -- Airbase.Category.HELIPAD | ||
| builtPoints[1].linkUnit = abId | ||
| builtPoints[1].helipadId = abId -- why its named helipad i dont know | ||
| end | ||
| end | ||
| end | ||
| return builtPoints | ||
| end | ||
|
|
||
| local createPlaneGroupUnitsTemplate = function(unitListTemplate) | ||
| local units = {} | ||
| for i, unitTemplate in pairs(unitListTemplate) do | ||
| local pointVec3 | ||
| if type(unitListTemplate.place) == "string" then | ||
| if Airbase.getByName(unitListTemplate.place) then | ||
| pointVec3 = Airbase.getByName(unitListTemplate.place):getPoint() | ||
| env.info("ab point type") | ||
| elseif trigger.misc.getZone(unitListTemplate.place) then | ||
| pointVec3 = trigger.misc.getZone(unitListTemplate.place).point | ||
| env.info("zone point type") | ||
| end | ||
| elseif type(unitListTemplate.place) == "table" then | ||
| pointVec3 = coord.LLtoLO(unitListTemplate.place.lat, unitListTemplate.place.lon) | ||
| end | ||
| local fuel = Unit.getDescByName(unitListTemplate.type).fuelMassMax -- needed incase no payload table is applied | ||
| if type(unitTemplate) == "table" then | ||
Wizxrd marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| units[i] = { | ||
| name = unitTemplate.unitName, -- or unitTemplate.name.."-"..i | ||
| type = unitListTemplate.type, | ||
| x = pointVec3.x, | ||
| y = pointVec3.z, | ||
| alt = unitListTemplate.alt, | ||
| alt_type = unitListTemplate.alt_type or "BARO", | ||
| speed = unitListTemplate.speed, | ||
| payload = unitTemplate.payload or { | ||
| ["pylons"] = {}, | ||
| ["fuel"] = fuel, | ||
| ["flare"] = 0, | ||
| ["chaff"] = 0, | ||
| ["gun"] = 0, | ||
| }, | ||
| parking = unitTemplate.parking or nil, | ||
| parking_id = unitTemplate.parking_id or nil, | ||
| callsign = unitTemplate.callsign or nil, | ||
| skill = unitTemplate.skill or skill.Random, | ||
Wizxrd marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| livery_id = unitTemplate.livery_id or nil, | ||
| } | ||
| end | ||
| end | ||
| return units | ||
| end | ||
|
|
||
| local createPlaneGroupTemplate = function(planeGroupTemplate) | ||
| local groupTable = { | ||
| name = planeGroupTemplate.groupName, | ||
| task = planeGroupTemplate.task, | ||
| route = { | ||
| points = buildAirplanePoints(planeGroupTemplate.points) | ||
| } | ||
| } | ||
| groupTable.units = createPlaneGroupUnitsTemplate(planeGroupTemplate.units) | ||
| if planeGroupTemplate.group_id ~= nil then | ||
| groupTable['groupId'] = planeGroupTemplate.group_id | ||
| end | ||
| if planeGroupTemplate.hidden ~= nil then | ||
| groupTable['hidden'] = planeGroupTemplate.hidden | ||
| end | ||
| if planeGroupTemplate.late_activation ~= nil then | ||
| groupTable['lateActivation'] = planeGroupTemplate.late_activation | ||
| end | ||
| if planeGroupTemplate.start_time ~= nil and planeGroupTemplate.start_time > 0 then | ||
| groupTable['start_time'] = planeGroupTemplate.start_time | ||
| end | ||
| if planeGroupTemplate.visible ~= nil then | ||
| groupTable['visible'] = planeGroupTemplate.visible | ||
| end | ||
| return groupTable | ||
| end | ||
|
|
||
| local createGroundUnitsTemplate = function(unitListTemplate) | ||
| local units = {} | ||
|
|
||
|
|
@@ -109,9 +254,12 @@ GRPC.methods.addGroup = function(params) | |
| if params.country_id == 0 or params.country_id == 15 then | ||
| return GRPC.errorInvalidArgument("invalid country code") | ||
| end | ||
|
|
||
| local template = createGroundGroupTemplate(params.template.groundTemplate) | ||
|
|
||
| local template | ||
| if params.template.type == "Airplane" then | ||
| template = createPlaneGroupTemplate(params.template.airplaneTemplate) | ||
| elseif params.template.type == "Ground" then | ||
| template = createGroundGroupTemplate(params.template.groundTemplate) | ||
| end | ||
| coalition.addGroup(params.country - 1, params.groupCategory, template) -- Decrement for non zero-indexed gRPC enum | ||
|
|
||
| return GRPC.success({group = GRPC.exporters.group(Group.getByName(template.name))}) | ||
|
|
@@ -154,4 +302,4 @@ GRPC.methods.getPlayers = function(params) | |
| result[i] = GRPC.exporters.unit(unit) | ||
| end | ||
| return GRPC.success({units = result}) | ||
| end | ||
| end | ||
Uh oh!
There was an error while loading. Please reload this page.