@bf6mods/sdk 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["globalConditions: Conditions","widget: mod.UIWidget | undefined","#uniqueID","#playerProfileId","#playerId"],"sources":["../../src/std/message.ts","../../src/modlib/index.ts","../../src/std/ui/countdown.ts","../../src/std/ui/index.ts","../../src/std/index.ts"],"sourcesContent":["export function MakeMessage(\n\tmessage: string,\n\t...args: (string | number | mod.Player)[]\n) {\n\tswitch (args.length) {\n\t\tcase 0:\n\t\t\treturn mod.Message(message);\n\t\tcase 1:\n\t\t\treturn mod.Message(message, args[0]);\n\t\tcase 2:\n\t\t\treturn mod.Message(message, args[0], args[1]);\n\t\tcase 3:\n\t\t\treturn mod.Message(message, args[0], args[1], args[2]);\n\t\tdefault:\n\t\t\tthrow new Error(\"Invalid number of arguments\");\n\t}\n}\n","// export * from './store';\n\nexport function Concat(s1: string, s2: string) {\n return s1 + s2;\n}\n\nexport function And(...rest: boolean[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const cond = rest[i];\n if (!cond) return false;\n }\n return true;\n}\n\ntype ConditionFunction = () => boolean;\n\nexport function AndFn(...rest: ConditionFunction[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const condFn = rest[i];\n if (!condFn()) return false;\n }\n return true;\n}\n\nexport function getPlayerId(player: mod.Player): number {\n return mod.GetObjId(player);\n}\n\nexport function getTeamId(team: mod.Team): number {\n return mod.GetObjId(team);\n}\n\nexport function ConvertArray(array: mod.Array): any[] {\n let v = [];\n let n = mod.CountOf(array);\n for (let i = 0; i < n; i++) {\n let currentElement = mod.ValueInArray(array, i);\n v.push(currentElement);\n }\n return v;\n}\n\nexport function FilteredArray(array: mod.Array, cond: (currentElement: any) => boolean): mod.Array {\n const arr = ConvertArray(array);\n let v = mod.EmptyArray();\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentElement = arr[i];\n if (cond(currentElement)) v = mod.AppendToArray(v, currentElement);\n }\n return v;\n}\n\nexport function IndexOfFirstTrue(array: mod.Array, cond: (element: any, arg: any) => boolean, arg: any = null): number {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (cond(currentArrayElement, arg)) return i;\n }\n return -1;\n}\n\nexport function IfThenElse<T>(condition: boolean, ifTrue: () => T, ifFalse: () => T) {\n if (condition) return ifTrue();\n else return ifFalse();\n}\n\nexport function IsTrueForAll(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (!condition(currentArrayElement, arg)) return false;\n }\n return true;\n}\n\nexport function IsTrueForAny(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (condition(currentArrayElement, arg)) return true;\n }\n return false;\n}\n\nexport function SortedArray(array: any[], compare: (a: any, b: any) => number) {\n let v1 = array.slice();\n v1.sort(compare);\n let v2 = [];\n for (let e of v1) v2.push(e);\n return v2;\n}\n\nexport function Equals(a: any, b: any) {\n if (a == null || b == null) debugger;\n return mod.Equals(a, b);\n}\n\n// Waits for a provided number of seconds or if the provided condition evaluates to true during that interval.\nexport async function WaitUntil(delay: number, cond: () => boolean) {\n // rush hack. this will likely wait too long and other problems.\n const interval = 0.2; // seconds\n const checks = Math.ceil(delay / interval);\n for (let t = 0; t < checks; t++) {\n if (cond()) break;\n await mod.Wait(interval);\n }\n}\n\nexport class ConditionState {\n lastState: boolean;\n\n constructor() {\n this.lastState = false;\n }\n\n update(newState: boolean): boolean {\n // if the new state is false then reset last state and don't trigger action\n if (!newState) {\n this.lastState = false;\n return false;\n }\n // if last state was already true then don't trigger\n if (this.lastState) return false;\n // if the state just transitioned to true then trigger\n this.lastState = true;\n return true;\n }\n}\n\nclass Conditions {\n constructor() {\n this.conditionStates = [];\n }\n\n conditionStates: ConditionState[];\n\n getConditionState(n: number): ConditionState {\n while (n >= this.conditionStates.length) {\n this.conditionStates.push(new ConditionState());\n }\n return this.conditionStates[n];\n }\n}\n\nlet playerConditions: Conditions[] = [];\nlet teamConditions: Conditions[] = [];\nlet capturePointConditions: Conditions[] = [];\nlet mcomConditions: Conditions[] = [];\nlet vehicleConditions: Conditions[] = [];\nlet globalConditions: Conditions = new Conditions();\n\nfunction getObjectCondition(id: number, objectConditions: Conditions[], n: number) {\n while (id >= objectConditions.length) {\n objectConditions.push(new Conditions());\n }\n let conditions = objectConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getPlayerCondition(obj: mod.Player, n: number) {\n let id = getPlayerId(obj);\n while (id >= playerConditions.length) {\n playerConditions.push(new Conditions());\n }\n let conditions = playerConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getTeamCondition(team: mod.Team, n: number) {\n let id = getTeamId(team);\n while (id >= teamConditions.length) {\n teamConditions.push(new Conditions());\n }\n let conditions = teamConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getCapturePointCondition(obj: mod.CapturePoint, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, capturePointConditions, n);\n}\n\nexport function getMCOMCondition(obj: mod.MCOM, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, mcomConditions, n);\n}\n\nexport function getVehicleCondition(obj: mod.Vehicle, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, vehicleConditions, n);\n}\n\nexport function getGlobalCondition(n: number) {\n return globalConditions.getConditionState(n);\n}\n\nexport function getPlayersInTeam(teamObj: mod.Team) {\n const team = mod.GetObjId(teamObj);\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n let teamMembers = [];\n\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n if (mod.GetObjId(mod.GetTeam(player)) == team) {\n teamMembers.push(player);\n }\n }\n return teamMembers;\n}\n\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n// Helper functions to create UI from a JSON object tree:\n//-----------------------------------------------------------------------------------------------//\n\ntype UIVector = mod.Vector | number[];\n\ninterface UIParams {\n name: string;\n type: string;\n position: any;\n size: any;\n anchor: mod.UIAnchor;\n parent: mod.UIWidget;\n visible: boolean;\n textLabel: string;\n textColor: UIVector;\n textAlpha: number;\n textSize: number;\n textAnchor: mod.UIAnchor;\n padding: number;\n bgColor: UIVector;\n bgAlpha: number;\n bgFill: mod.UIBgFill;\n imageType: mod.UIImageType;\n imageColor: UIVector;\n imageAlpha: number;\n teamId?: mod.Team;\n playerId?: mod.Player;\n children?: any[];\n buttonEnabled: boolean;\n buttonColorBase: UIVector;\n buttonAlphaBase: number;\n buttonColorDisabled: UIVector;\n buttonAlphaDisabled: number;\n buttonColorPressed: UIVector;\n buttonAlphaPressed: number;\n buttonColorHover: UIVector;\n buttonAlphaHover: number;\n buttonColorFocused: UIVector;\n buttonAlphaFocused: number;\n}\n\nfunction __asModVector(param: number[] | mod.Vector) {\n if (Array.isArray(param)) return mod.CreateVector(param[0], param[1], param.length == 2 ? 0 : param[2]);\n else return param;\n}\n\nfunction __asModMessage(param: string | mod.Message) {\n if (typeof param === 'string') return mod.Message(param);\n return param;\n}\n\nfunction __fillInDefaultArgs(params: UIParams) {\n if (!params.hasOwnProperty('name')) params.name = '';\n if (!params.hasOwnProperty('position')) params.position = mod.CreateVector(0, 0, 0);\n if (!params.hasOwnProperty('size')) params.size = mod.CreateVector(100, 100, 0);\n if (!params.hasOwnProperty('anchor')) params.anchor = mod.UIAnchor.TopLeft;\n if (!params.hasOwnProperty('parent')) params.parent = mod.GetUIRoot();\n if (!params.hasOwnProperty('visible')) params.visible = true;\n if (!params.hasOwnProperty('padding')) params.padding = params.type == 'Container' ? 0 : 8;\n if (!params.hasOwnProperty('bgColor')) params.bgColor = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('bgAlpha')) params.bgAlpha = 0.5;\n if (!params.hasOwnProperty('bgFill')) params.bgFill = mod.UIBgFill.Solid;\n}\n\nfunction __setNameAndGetWidget(uniqueName: any, params: any) {\n let widget = mod.FindUIWidgetWithName(uniqueName) as mod.UIWidget;\n mod.SetUIWidgetName(widget, params.name);\n return widget;\n}\n\nconst __cUniqueName = '----uniquename----';\n\nfunction __addUIContainer(params: UIParams) {\n __fillInDefaultArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n restrict\n );\n } else {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill\n );\n }\n let widget = __setNameAndGetWidget(__cUniqueName, params);\n if (params.children) {\n params.children.forEach((childParams: any) => {\n childParams.parent = widget;\n __addUIWidget(childParams);\n });\n }\n return widget;\n}\n\nfunction __fillInDefaultTextArgs(params: UIParams) {\n if (!params.hasOwnProperty('textLabel')) params.textLabel = '';\n if (!params.hasOwnProperty('textSize')) params.textSize = 0;\n if (!params.hasOwnProperty('textColor')) params.textColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('textAlpha')) params.textAlpha = 1;\n if (!params.hasOwnProperty('textAnchor')) params.textAnchor = mod.UIAnchor.CenterLeft;\n}\n\nfunction __addUIText(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultTextArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor,\n restrict\n );\n } else {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultImageArgs(params: any) {\n if (!params.hasOwnProperty('imageType')) params.imageType = mod.UIImageType.None;\n if (!params.hasOwnProperty('imageColor')) params.imageColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('imageAlpha')) params.imageAlpha = 1;\n}\n\nfunction __addUIImage(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultImageArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha,\n restrict\n );\n } else {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultArg(params: any, argName: any, defaultValue: any) {\n if (!params.hasOwnProperty(argName)) params[argName] = defaultValue;\n}\n\nfunction __fillInDefaultButtonArgs(params: any) {\n if (!params.hasOwnProperty('buttonEnabled')) params.buttonEnabled = true;\n if (!params.hasOwnProperty('buttonColorBase')) params.buttonColorBase = mod.CreateVector(0.7, 0.7, 0.7);\n if (!params.hasOwnProperty('buttonAlphaBase')) params.buttonAlphaBase = 1;\n if (!params.hasOwnProperty('buttonColorDisabled')) params.buttonColorDisabled = mod.CreateVector(0.2, 0.2, 0.2);\n if (!params.hasOwnProperty('buttonAlphaDisabled')) params.buttonAlphaDisabled = 0.5;\n if (!params.hasOwnProperty('buttonColorPressed')) params.buttonColorPressed = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('buttonAlphaPressed')) params.buttonAlphaPressed = 1;\n if (!params.hasOwnProperty('buttonColorHover')) params.buttonColorHover = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaHover')) params.buttonAlphaHover = 1;\n if (!params.hasOwnProperty('buttonColorFocused')) params.buttonColorFocused = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaFocused')) params.buttonAlphaFocused = 1;\n}\n\nfunction __addUIButton(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultButtonArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused,\n restrict\n );\n } else {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __addUIWidget(params: UIParams) {\n if (params == null) return undefined;\n if (params.type == 'Container') return __addUIContainer(params);\n else if (params.type == 'Text') return __addUIText(params);\n else if (params.type == 'Image') return __addUIImage(params);\n else if (params.type == 'Button') return __addUIButton(params);\n return undefined;\n}\n\nexport function ParseUI(...params: any[]) {\n let widget: mod.UIWidget | undefined;\n for (let a = 0; a < params.length; a++) {\n widget = __addUIWidget(params[a] as UIParams);\n }\n return widget;\n}\n\nexport function DisplayCustomNotificationMessage(msg: mod.Message, custom: mod.CustomNotificationSlots, duration: number, target?: mod.Player | mod.Team) {\n const CreateHeader = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(50, 250 + slot * (40 + 5), 0),\n mod.CreateVector(250, 60, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const CreateSubText = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(85, 270 + slot * (40 + 3), 0),\n mod.CreateVector(125, 40, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 20,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const createNotificationFunction = custom < 1 ? CreateHeader : CreateSubText;\n\n if (target) {\n // if target is player, fill message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n const widgetId = custom + String(target);\n createNotificationFunction(widgetId, msg, target as mod.Player, custom);\n }\n // if target is team, fill message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMates = getPlayersInTeam(target as mod.Team);\n teamMates.forEach((player) => {\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n });\n }\n } else {\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n }\n }\n}\n\nexport function ShowEventGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n //TODO: restore these once DisplayGameModeMessage is fixed\n // if (target) {\n // mod.DisplayGameModeMessage(event, target as mod.Player );\n // } else{\n // mod.DisplayGameModeMessage(event);\n // }\n\n const MakeShiftDisplayGameModeMessage = async (message: mod.Message, target?: mod.Player | mod.Team) => {\n const widgetId = 'GameModeMessage';\n if (target) {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n target as mod.Player\n );\n } else {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center\n );\n }\n\n await mod.Wait(6);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n };\n\n if (target) {\n MakeShiftDisplayGameModeMessage(event, target as mod.Player);\n } else {\n MakeShiftDisplayGameModeMessage(event);\n }\n}\n\nexport function ShowHighlightedGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayHighlightedWorldLogMessage(event, target as mod.Player);\n } else {\n mod.DisplayHighlightedWorldLogMessage(event);\n }\n}\n\nexport function ShowNotificationMessage(msg: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayNotificationMessage(msg, target as mod.Player);\n } else {\n mod.DisplayNotificationMessage(msg);\n }\n}\n\nexport function ClearAllCustomNotificationMessages(target: mod.Player) {\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.HeaderText, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText1, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText2, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText3, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText4, target);\n } catch {}\n}\n\nexport function ClearCustomNotificationMessage(custom: mod.CustomNotificationSlots, target?: mod.Player | mod.Team) {\n try {\n if (target) {\n // if target is player, just delete message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(target as mod.Player)));\n }\n // if target is team, delete message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMembers = getPlayersInTeam(target as mod.Team);\n for (let i = 0; i < teamMembers.length; i++) {\n let player = teamMembers[i];\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } else {\n // if no target, delete for all players\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } catch {\n console.error('Could not clear custom message for specified target(s)');\n }\n}\n","import { ParseUI } from \"../../modlib/index.ts\";\nimport { MakeMessage } from \"../message.ts\";\n\nexport class CountdownUI {\n\tstatic #uniqueID = 0;\n\t#playerId: mod.Player;\n\t#playerProfileId: number;\n\n\theaderWidget: mod.UIWidget | undefined;\n\ttextWidget: mod.UIWidget | undefined;\n\n\tconstructor(playerId: mod.Player) {\n\t\tthis.#playerProfileId = CountdownUI.#uniqueID++;\n\t\tthis.#playerId = playerId;\n\n\t\tconst bfBlueColor = [0.678, 0.753, 0.8];\n\t\tconst height = 125;\n\t\tthis.headerWidget = ParseUI({\n\t\t\ttype: \"Container\",\n\t\t\tsize: [150, height],\n\t\t\tposition: [0, 50],\n\t\t\tname: `countdown_${this.#playerProfileId}`,\n\t\t\tanchor: mod.UIAnchor.TopCenter,\n\t\t\tbgFill: mod.UIBgFill.Blur,\n\t\t\tbgColor: [0.2, 0.2, 0.3],\n\t\t\tbgAlpha: 0.9,\n\t\t\tplayerId: this.#playerId,\n\t\t\tvisible: false,\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"Container\",\n\t\t\t\t\tname: `countdown_line_right_${this.#playerProfileId}`,\n\t\t\t\t\tsize: [2, height],\n\t\t\t\t\tposition: [75, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.Solid,\n\t\t\t\t\tbgColor: bfBlueColor,\n\t\t\t\t\tbgAlpha: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"Container\",\n\t\t\t\t\tname: `countdown_line_left_${this.#playerProfileId}`,\n\t\t\t\t\tsize: [2, height],\n\t\t\t\t\tposition: [-75, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.Solid,\n\t\t\t\t\tbgColor: bfBlueColor,\n\t\t\t\t\tbgAlpha: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"Text\",\n\t\t\t\t\tname: `countdown_text${this.#playerProfileId}`,\n\t\t\t\t\tsize: [100, height],\n\t\t\t\t\tposition: [0, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.None,\n\t\t\t\t\ttextColor: bfBlueColor,\n\t\t\t\t\ttextAnchor: mod.UIAnchor.Center,\n\t\t\t\t\ttextLabel: MakeMessage(mod.stringkeys.__sdk__CountdownUI),\n\t\t\t\t\ttextSize: 85,\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\t\tthis.textWidget = mod.FindUIWidgetWithName(\n\t\t\t`countdown_text${this.#playerProfileId}`,\n\t\t);\n\t}\n\n\tdelete() {\n\t\tthis.headerWidget && mod.DeleteUIWidget(this.headerWidget);\n\t\t//this.textWidget && mod.DeleteUIWidget(this.textWidget)\n\t}\n\n\topen(text: string, countdowntime: number) {\n\t\tthis.headerWidget && mod.SetUIWidgetVisible(this.headerWidget, true);\n\t\tthis.textWidget &&\n\t\t\tmod.SetUITextLabel(this.textWidget, MakeMessage(text, countdowntime));\n\t}\n\n\tupdate(text: string, countdowntime: number) {\n\t\tthis.textWidget &&\n\t\t\tmod.SetUITextLabel(this.textWidget, MakeMessage(text, countdowntime));\n\t}\n\n\tasync close(delayclose: number = 0) {\n\t\tawait mod.Wait(delayclose);\n\t\tthis.headerWidget && mod.SetUIWidgetVisible(this.headerWidget, false);\n\t}\n}\n\nexport const bf6Strings = {\n\t__sdk__CountdownUI: \"{}\",\n};\n","import * as countdown from \"./countdown.ts\";\n\nexport * from \"./countdown.ts\";\n\nexport default {\n\tcountdown,\n};\n","import * as message from \"./message.ts\";\n\nexport * from \"./message.ts\";\n\nimport * as ui from \"./ui/index.ts\";\n\nexport * from \"./ui/index.ts\";\n\nexport default {\n\tmessage,\n\tui,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/std/message.ts","../../src/modlib/index.ts","../../src/std/ui/countdown.ts","../../src/std/ui/index.ts","../../src/std/index.ts"],"sourcesContent":["export function MakeMessage(\n\tmessage: string,\n\t...args: (string | number | mod.Player)[]\n) {\n\tswitch (args.length) {\n\t\tcase 0:\n\t\t\treturn mod.Message(message);\n\t\tcase 1:\n\t\t\treturn mod.Message(message, args[0]);\n\t\tcase 2:\n\t\t\treturn mod.Message(message, args[0], args[1]);\n\t\tcase 3:\n\t\t\treturn mod.Message(message, args[0], args[1], args[2]);\n\t\tdefault:\n\t\t\tthrow new Error(\"Invalid number of arguments\");\n\t}\n}\n","// export * from './store';\n\nexport function Concat(s1: string, s2: string) {\n return s1 + s2;\n}\n\nexport function And(...rest: boolean[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const cond = rest[i];\n if (!cond) return false;\n }\n return true;\n}\n\ntype ConditionFunction = () => boolean;\n\nexport function AndFn(...rest: ConditionFunction[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const condFn = rest[i];\n if (!condFn()) return false;\n }\n return true;\n}\n\nexport function getPlayerId(player: mod.Player): number {\n return mod.GetObjId(player);\n}\n\nexport function getTeamId(team: mod.Team): number {\n return mod.GetObjId(team);\n}\n\nexport function ConvertArray(array: mod.Array): any[] {\n let v = [];\n let n = mod.CountOf(array);\n for (let i = 0; i < n; i++) {\n let currentElement = mod.ValueInArray(array, i);\n v.push(currentElement);\n }\n return v;\n}\n\nexport function FilteredArray(array: mod.Array, cond: (currentElement: any) => boolean): mod.Array {\n const arr = ConvertArray(array);\n let v = mod.EmptyArray();\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentElement = arr[i];\n if (cond(currentElement)) v = mod.AppendToArray(v, currentElement);\n }\n return v;\n}\n\nexport function IndexOfFirstTrue(array: mod.Array, cond: (element: any, arg: any) => boolean, arg: any = null): number {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (cond(currentArrayElement, arg)) return i;\n }\n return -1;\n}\n\nexport function IfThenElse<T>(condition: boolean, ifTrue: () => T, ifFalse: () => T) {\n if (condition) return ifTrue();\n else return ifFalse();\n}\n\nexport function IsTrueForAll(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (!condition(currentArrayElement, arg)) return false;\n }\n return true;\n}\n\nexport function IsTrueForAny(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (condition(currentArrayElement, arg)) return true;\n }\n return false;\n}\n\nexport function SortedArray(array: any[], compare: (a: any, b: any) => number) {\n let v1 = array.slice();\n v1.sort(compare);\n let v2 = [];\n for (let e of v1) v2.push(e);\n return v2;\n}\n\nexport function Equals(a: any, b: any) {\n if (a == null || b == null) debugger;\n return mod.Equals(a, b);\n}\n\n// Waits for a provided number of seconds or if the provided condition evaluates to true during that interval.\nexport async function WaitUntil(delay: number, cond: () => boolean) {\n // rush hack. this will likely wait too long and other problems.\n const interval = 0.2; // seconds\n const checks = Math.ceil(delay / interval);\n for (let t = 0; t < checks; t++) {\n if (cond()) break;\n await mod.Wait(interval);\n }\n}\n\nexport class ConditionState {\n lastState: boolean;\n\n constructor() {\n this.lastState = false;\n }\n\n update(newState: boolean): boolean {\n // if the new state is false then reset last state and don't trigger action\n if (!newState) {\n this.lastState = false;\n return false;\n }\n // if last state was already true then don't trigger\n if (this.lastState) return false;\n // if the state just transitioned to true then trigger\n this.lastState = true;\n return true;\n }\n}\n\nexport class SimpleConditionState {\n update(newState: boolean): boolean {\n // no edge detection\n return newState;\n }\n}\n\nclass Conditions {\n constructor() {\n this.conditionStates = [];\n }\n\n conditionStates: ConditionState[];\n\n getConditionState(n: number): ConditionState {\n while (n >= this.conditionStates.length) {\n this.conditionStates.push(new ConditionState());\n }\n return this.conditionStates[n];\n }\n}\n\nlet playerConditions: Conditions[] = [];\nlet teamConditions: Conditions[] = [];\nlet capturePointConditions: Conditions[] = [];\nlet mcomConditions: Conditions[] = [];\nlet vehicleConditions: Conditions[] = [];\nlet hqConditions: Conditions[] = [];\nlet sectorConditions: Conditions[] = [];\nlet vehicleSpawnerConditions: Conditions[] = [];\n\nlet globalConditions: Conditions = new Conditions();\nlet simpleCondition: SimpleConditionState = new SimpleConditionState();\n\nfunction getObjectCondition(id: number, objectConditions: Conditions[], n: number) {\n while (id >= objectConditions.length) {\n objectConditions.push(new Conditions());\n }\n let conditions = objectConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getPlayerCondition(obj: mod.Player, n: number) {\n let id = getPlayerId(obj);\n while (id >= playerConditions.length) {\n playerConditions.push(new Conditions());\n }\n let conditions = playerConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getTeamCondition(team: mod.Team, n: number) {\n let id = getTeamId(team);\n while (id >= teamConditions.length) {\n teamConditions.push(new Conditions());\n }\n let conditions = teamConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getCapturePointCondition(obj: mod.CapturePoint, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, capturePointConditions, n);\n}\n\nexport function getMCOMCondition(obj: mod.MCOM, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, mcomConditions, n);\n}\n\nexport function getVehicleCondition(obj: mod.Vehicle, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, vehicleConditions, n);\n}\n\nexport function getHQCondition(obj: mod.HQ, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, hqConditions, n);\n}\n\nexport function getSectorCondition(obj: mod.Sector, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, sectorConditions, n);\n}\n\nexport function getVehicleSpawnerCondition(obj: mod.VehicleSpawner, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, vehicleSpawnerConditions, n);\n}\n\nexport function getGlobalCondition(n: number) {\n return globalConditions.getConditionState(n);\n}\n\nexport function getSimpleCondition() {\n return simpleCondition;\n}\n\nexport function getPlayersInTeam(teamObj: mod.Team) {\n const team = mod.GetObjId(teamObj);\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n let teamMembers = [];\n\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n if (mod.GetObjId(mod.GetTeam(player)) == team) {\n teamMembers.push(player);\n }\n }\n return teamMembers;\n}\n\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n// Helper functions to create UI from a JSON object tree:\n//-----------------------------------------------------------------------------------------------//\n\ntype UIVector = mod.Vector | number[];\n\ninterface UIParams {\n name: string;\n type: string;\n position: any;\n size: any;\n anchor: mod.UIAnchor;\n parent: mod.UIWidget;\n visible: boolean;\n textLabel: string;\n textColor: UIVector;\n textAlpha: number;\n textSize: number;\n textAnchor: mod.UIAnchor;\n padding: number;\n bgColor: UIVector;\n bgAlpha: number;\n bgFill: mod.UIBgFill;\n imageType: mod.UIImageType;\n imageColor: UIVector;\n imageAlpha: number;\n teamId?: mod.Team;\n playerId?: mod.Player;\n children?: any[];\n buttonEnabled: boolean;\n buttonColorBase: UIVector;\n buttonAlphaBase: number;\n buttonColorDisabled: UIVector;\n buttonAlphaDisabled: number;\n buttonColorPressed: UIVector;\n buttonAlphaPressed: number;\n buttonColorHover: UIVector;\n buttonAlphaHover: number;\n buttonColorFocused: UIVector;\n buttonAlphaFocused: number;\n}\n\nfunction __asModVector(param: number[] | mod.Vector) {\n if (Array.isArray(param)) return mod.CreateVector(param[0], param[1], param.length == 2 ? 0 : param[2]);\n else return param;\n}\n\nfunction __asModMessage(param: string | mod.Message) {\n if (typeof param === 'string') return mod.Message(param);\n return param;\n}\n\nfunction __fillInDefaultArgs(params: UIParams) {\n if (!params.hasOwnProperty('name')) params.name = '';\n if (!params.hasOwnProperty('position')) params.position = mod.CreateVector(0, 0, 0);\n if (!params.hasOwnProperty('size')) params.size = mod.CreateVector(100, 100, 0);\n if (!params.hasOwnProperty('anchor')) params.anchor = mod.UIAnchor.TopLeft;\n if (!params.hasOwnProperty('parent')) params.parent = mod.GetUIRoot();\n if (!params.hasOwnProperty('visible')) params.visible = true;\n if (!params.hasOwnProperty('padding')) params.padding = params.type == 'Container' ? 0 : 8;\n if (!params.hasOwnProperty('bgColor')) params.bgColor = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('bgAlpha')) params.bgAlpha = 0.5;\n if (!params.hasOwnProperty('bgFill')) params.bgFill = mod.UIBgFill.Solid;\n}\n\nfunction __setNameAndGetWidget(uniqueName: any, params: any) {\n let widget = mod.FindUIWidgetWithName(uniqueName) as mod.UIWidget;\n mod.SetUIWidgetName(widget, params.name);\n return widget;\n}\n\nconst __cUniqueName = '----uniquename----';\n\nfunction __addUIContainer(params: UIParams) {\n __fillInDefaultArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n restrict\n );\n } else {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill\n );\n }\n let widget = __setNameAndGetWidget(__cUniqueName, params);\n if (params.children) {\n params.children.forEach((childParams: any) => {\n childParams.parent = widget;\n __addUIWidget(childParams);\n });\n }\n return widget;\n}\n\nfunction __fillInDefaultTextArgs(params: UIParams) {\n if (!params.hasOwnProperty('textLabel')) params.textLabel = '';\n if (!params.hasOwnProperty('textSize')) params.textSize = 0;\n if (!params.hasOwnProperty('textColor')) params.textColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('textAlpha')) params.textAlpha = 1;\n if (!params.hasOwnProperty('textAnchor')) params.textAnchor = mod.UIAnchor.CenterLeft;\n}\n\nfunction __addUIText(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultTextArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor,\n restrict\n );\n } else {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultImageArgs(params: any) {\n if (!params.hasOwnProperty('imageType')) params.imageType = mod.UIImageType.None;\n if (!params.hasOwnProperty('imageColor')) params.imageColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('imageAlpha')) params.imageAlpha = 1;\n}\n\nfunction __addUIImage(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultImageArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha,\n restrict\n );\n } else {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultArg(params: any, argName: any, defaultValue: any) {\n if (!params.hasOwnProperty(argName)) params[argName] = defaultValue;\n}\n\nfunction __fillInDefaultButtonArgs(params: any) {\n if (!params.hasOwnProperty('buttonEnabled')) params.buttonEnabled = true;\n if (!params.hasOwnProperty('buttonColorBase')) params.buttonColorBase = mod.CreateVector(0.7, 0.7, 0.7);\n if (!params.hasOwnProperty('buttonAlphaBase')) params.buttonAlphaBase = 1;\n if (!params.hasOwnProperty('buttonColorDisabled')) params.buttonColorDisabled = mod.CreateVector(0.2, 0.2, 0.2);\n if (!params.hasOwnProperty('buttonAlphaDisabled')) params.buttonAlphaDisabled = 0.5;\n if (!params.hasOwnProperty('buttonColorPressed')) params.buttonColorPressed = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('buttonAlphaPressed')) params.buttonAlphaPressed = 1;\n if (!params.hasOwnProperty('buttonColorHover')) params.buttonColorHover = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaHover')) params.buttonAlphaHover = 1;\n if (!params.hasOwnProperty('buttonColorFocused')) params.buttonColorFocused = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaFocused')) params.buttonAlphaFocused = 1;\n}\n\nfunction __addUIButton(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultButtonArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused,\n restrict\n );\n } else {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __addUIWidget(params: UIParams) {\n if (params == null) return undefined;\n if (params.type == 'Container') return __addUIContainer(params);\n else if (params.type == 'Text') return __addUIText(params);\n else if (params.type == 'Image') return __addUIImage(params);\n else if (params.type == 'Button') return __addUIButton(params);\n return undefined;\n}\n\nexport function ParseUI(...params: any[]) {\n let widget: mod.UIWidget | undefined;\n for (let a = 0; a < params.length; a++) {\n widget = __addUIWidget(params[a] as UIParams);\n }\n return widget;\n}\n\nexport function DisplayCustomNotificationMessage(msg: mod.Message, custom: mod.CustomNotificationSlots, duration: number, target?: mod.Player | mod.Team) {\n const CreateHeader = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(50, 250 + slot * (40 + 5), 0),\n mod.CreateVector(250, 60, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const CreateSubText = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(85, 270 + slot * (40 + 3), 0),\n mod.CreateVector(125, 40, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 20,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const createNotificationFunction = custom < 1 ? CreateHeader : CreateSubText;\n\n if (target) {\n // if target is player, fill message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n const widgetId = custom + String(target);\n createNotificationFunction(widgetId, msg, target as mod.Player, custom);\n }\n // if target is team, fill message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMates = getPlayersInTeam(target as mod.Team);\n teamMates.forEach((player) => {\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n });\n }\n } else {\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n }\n }\n}\n\nexport function ShowEventGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n //TODO: restore these once DisplayGameModeMessage is fixed\n // if (target) {\n // mod.DisplayGameModeMessage(event, target as mod.Player );\n // } else{\n // mod.DisplayGameModeMessage(event);\n // }\n\n const MakeShiftDisplayGameModeMessage = async (message: mod.Message, target?: mod.Player | mod.Team) => {\n const widgetId = 'GameModeMessage';\n if (target) {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n target as mod.Player\n );\n } else {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center\n );\n }\n\n await mod.Wait(6);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n };\n\n if (target) {\n MakeShiftDisplayGameModeMessage(event, target as mod.Player);\n } else {\n MakeShiftDisplayGameModeMessage(event);\n }\n}\n\nexport function ShowHighlightedGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayHighlightedWorldLogMessage(event, target as mod.Player);\n } else {\n mod.DisplayHighlightedWorldLogMessage(event);\n }\n}\n\nexport function ShowNotificationMessage(msg: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayNotificationMessage(msg, target as mod.Player);\n } else {\n mod.DisplayNotificationMessage(msg);\n }\n}\n\nexport function ClearAllCustomNotificationMessages(target: mod.Player) {\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.HeaderText, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText1, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText2, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText3, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText4, target);\n } catch {}\n}\n\nexport function ClearCustomNotificationMessage(custom: mod.CustomNotificationSlots, target?: mod.Player | mod.Team) {\n try {\n if (target) {\n // if target is player, just delete message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(target as mod.Player)));\n }\n // if target is team, delete message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMembers = getPlayersInTeam(target as mod.Team);\n for (let i = 0; i < teamMembers.length; i++) {\n let player = teamMembers[i];\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } else {\n // if no target, delete for all players\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } catch {\n console.error('Could not clear custom message for specified target(s)');\n }\n}\n","import { ParseUI } from \"../../modlib/index.ts\";\nimport { MakeMessage } from \"../message.ts\";\n\nexport class CountdownUI {\n\tstatic #uniqueID = 0;\n\t#playerId: mod.Player;\n\t#playerProfileId: number;\n\n\theaderWidget: mod.UIWidget | undefined;\n\ttextWidget: mod.UIWidget | undefined;\n\n\tconstructor(playerId: mod.Player) {\n\t\tthis.#playerProfileId = CountdownUI.#uniqueID++;\n\t\tthis.#playerId = playerId;\n\n\t\tconst bfBlueColor = [0.678, 0.753, 0.8];\n\t\tconst height = 125;\n\t\tthis.headerWidget = ParseUI({\n\t\t\ttype: \"Container\",\n\t\t\tsize: [150, height],\n\t\t\tposition: [0, 50],\n\t\t\tname: `countdown_${this.#playerProfileId}`,\n\t\t\tanchor: mod.UIAnchor.TopCenter,\n\t\t\tbgFill: mod.UIBgFill.Blur,\n\t\t\tbgColor: [0.2, 0.2, 0.3],\n\t\t\tbgAlpha: 0.9,\n\t\t\tplayerId: this.#playerId,\n\t\t\tvisible: false,\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"Container\",\n\t\t\t\t\tname: `countdown_line_right_${this.#playerProfileId}`,\n\t\t\t\t\tsize: [2, height],\n\t\t\t\t\tposition: [75, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.Solid,\n\t\t\t\t\tbgColor: bfBlueColor,\n\t\t\t\t\tbgAlpha: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"Container\",\n\t\t\t\t\tname: `countdown_line_left_${this.#playerProfileId}`,\n\t\t\t\t\tsize: [2, height],\n\t\t\t\t\tposition: [-75, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.Solid,\n\t\t\t\t\tbgColor: bfBlueColor,\n\t\t\t\t\tbgAlpha: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"Text\",\n\t\t\t\t\tname: `countdown_text${this.#playerProfileId}`,\n\t\t\t\t\tsize: [100, height],\n\t\t\t\t\tposition: [0, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.None,\n\t\t\t\t\ttextColor: bfBlueColor,\n\t\t\t\t\ttextAnchor: mod.UIAnchor.Center,\n\t\t\t\t\ttextLabel: MakeMessage(mod.stringkeys.__sdk__CountdownUI),\n\t\t\t\t\ttextSize: 85,\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\t\tthis.textWidget = mod.FindUIWidgetWithName(\n\t\t\t`countdown_text${this.#playerProfileId}`,\n\t\t);\n\t}\n\n\tdelete() {\n\t\tthis.headerWidget && mod.DeleteUIWidget(this.headerWidget);\n\t\t//this.textWidget && mod.DeleteUIWidget(this.textWidget)\n\t}\n\n\topen(text: string, countdowntime: number) {\n\t\tthis.headerWidget && mod.SetUIWidgetVisible(this.headerWidget, true);\n\t\tthis.textWidget &&\n\t\t\tmod.SetUITextLabel(this.textWidget, MakeMessage(text, countdowntime));\n\t}\n\n\tupdate(text: string, countdowntime: number) {\n\t\tthis.textWidget &&\n\t\t\tmod.SetUITextLabel(this.textWidget, MakeMessage(text, countdowntime));\n\t}\n\n\tasync close(delayclose: number = 0) {\n\t\tawait mod.Wait(delayclose);\n\t\tthis.headerWidget && mod.SetUIWidgetVisible(this.headerWidget, false);\n\t}\n}\n\nexport const bf6Strings = {\n\t__sdk__CountdownUI: \"{}\",\n};\n","import * as countdown from \"./countdown.ts\";\n\nexport * from \"./countdown.ts\";\n\nexport default {\n\tcountdown,\n};\n","import * as message from \"./message.ts\";\n\nexport * from \"./message.ts\";\n\nimport * as ui from \"./ui/index.ts\";\n\nexport * from \"./ui/index.ts\";\n\nexport default {\n\tmessage,\n\tui,\n};\n"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- //#region rolldown:runtime
1
+ //#region \0rolldown/runtime.js
2
2
  var __defProp = Object.defineProperty;
3
- var __export = (all) => {
3
+ var __exportAll = (all, no_symbols) => {
4
4
  let target = {};
5
5
  for (var name in all) __defProp(target, name, {
6
6
  get: all[name],
7
7
  enumerable: true
8
8
  });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
9
10
  return target;
10
11
  };
11
-
12
12
  //#endregion
13
- export { __export as t };
13
+ export { __exportAll as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bf6mods/sdk",
3
- "version": "1.6.0",
3
+ "version": "1.8.0",
4
4
  "description": "TypeScript definitions for the BF6 modding API",
5
5
  "type": "module",
6
6
  "license": "MIT",