Skip to content

Commit

Permalink
Merge pull request #9 from Courseplay/Gui-Additions
Browse files Browse the repository at this point in the history
WIP using new overlay manager for sprites
  • Loading branch information
Tensuko authored Dec 15, 2024
2 parents 85a7776 + 6f2bb80 commit 2b70e90
Show file tree
Hide file tree
Showing 16 changed files with 402 additions and 223 deletions.
3 changes: 3 additions & 0 deletions Courseplay.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ function Courseplay:init()
createFolder(self.baseDir)
--- Base cp folder
self.cpFilePath = self.baseDir.."courseplay.xml"

g_overlayManager:addTextureConfigFile(Utils.getFilename("img/iconSprite.xml", self.BASE_DIRECTORY), "cpIconSprite")
g_overlayManager:addTextureConfigFile(Utils.getFilename("img/ui_courseplay.xml", self.BASE_DIRECTORY), "cpUi")
end

function Courseplay:registerXmlSchema()
Expand Down
72 changes: 61 additions & 11 deletions config/gui/pages/CourseGeneratorFrame.xml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@
<Bitmap profile="fs25_aiCreateJobParameterInvalid" name="invalid" />
</Button>
<Button profile="fs25_aiCreateJobParameterButton"
id="createPositionRotationTemplate" text="172a"
id="createPositionRotationTemplate"
onClick="onClickPositionRotationParameter">
<ThreePartBitmap profile="fs25_aiCreateJobParameterBg" />
<Bitmap profile="fs25_aiCreateJobParameterIcon" />
Expand Down Expand Up @@ -141,14 +141,25 @@
</Bitmap>
</GuiElement>
<GuiElement profile="cpMenuContainer">
<GuiElement profile="fs25_menuHeaderPanel">
<!-- <RoundCorner profile="fs25_mapMoneyBoxBg" id="shopMoneyBoxBg" />
<BoxLayout profile="fs25_shopMoneyBox" id="shopMoneyBox">
<Text profile="fs25_shopBalance" text="$l10n_ui_balance:" />
<Text profile="fs25_shopMoney" id="currentBalanceText" />
</BoxLayout> -->
<Text profile="fs25_ingameMenuAIStatusText" id="statusMessage" />
<GuiElement id="infoTextHud">
<GuiElement profile="cpInfoTextHeaderPanel">
<Bitmap profile="cpInfoTextHeaderBg"/>
<Text profile="cpInfoTextHeaderTitle" text="$l10n_CP_help_title"/>
</GuiElement>
<SmoothList profile="cpInfoTextList" id="infoTextList" onClick="onClickList">
<ListItem profile="cpInfoTextListElement">
<Bitmap profile="cpInfoTextListElementBg" />
<Text profile="cpInfoTextListElementText" name="text" />
<Button profile="cpInfoTextListElementIcon" name="icon"/>
</ListItem>
</SmoothList>
</GuiElement>
<!-- <RoundCorner profile="fs25_mapMoneyBoxBg" id="shopMoneyBoxBg" />
<BoxLayout profile="fs25_shopMoneyBox" id="shopMoneyBox">
<Text profile="fs25_shopBalance" text="$l10n_ui_balance:" />
<Text profile="fs25_shopMoney" id="currentBalanceText" />
</BoxLayout> -->
<Text profile="fs25_ingameMenuAIStatusText" id="statusMessage" />
</GuiElement>
<GuiElement profile="fs25_mapContextBoxContainer" newLayer="true">
<GuiElement profile="fs25_mapContextBox" id="contextBox">
Expand Down Expand Up @@ -256,10 +267,49 @@
<width value="100%"/>
<height value="80px" />
</Profile>
<Profile name="cpMenuContainer" extends="fs25_menuContainer">
<position value="0px 0px"/>
<absoluteSizeOffset value="10px 10px" />
<Profile name="cpMenuContainer" extends="fs25_menuContainer" with="anchorTopRight">
<position value="20px 0px"/>
<!-- <position value="0px 92px" /> -->
</Profile>
<Profile name="cpInfoTextHeaderPanel" extends="emptyPanel" with="anchorTopRight">

</Profile>
<Profile name="cpInfoTextHeaderBg" extends="baseReference" with="anchorTopRight">
<size value="250px 20px"/>
<imageSliceId value="gui.button_middle" />
<imageColor value="$preset_fs25_colorMainHighlight"/>
</Profile>
<Profile name="cpInfoTextHeaderTitle" extends="fs25_textDefault" with="anchorTopRight">
<textOffset value="10px 0px" />
</Profile>
<Profile name="cpInfoTextList" extends="emptyPanel" with="anchorTopRight">
<size value="250px 300px"/>
<position value="0 -20px" />
<listItemSpacing value="3px" />
<!-- <position value="0px -200px" /> -->
</Profile>
<Profile name="cpInfoTextListElement" extends="emptyPanel" with="anchorTopStretchingX">
<height value="26px" />
</Profile>
<Profile name="cpInfoTextListElementText" extends="fs25_textDefault" with="anchorTopStretchingX">
<width value="100%" />
<textSize value="12px" />
<textOffset value="30px -2px" />
<textSelectedColor value="$preset_fs25_colorMainHighlight" />
<textFocusedColor value="$preset_fs25_colorMainHighlight" />
<textHighlightedColor value="$preset_fs25_colorMainHighlight" />
</Profile>
<Profile name="cpInfoTextListElementIcon" extends="emptyPanel" with="anchorTopLeft">
<size value="26px 26px"/>
<absoluteSizeOffset value="3px 3px"/>
<iconSliceId value="cpIconSprite.white_vehicle" />
<iconSize value="20px 20px" />
<iconColor value="$preset_fs25_colorGrey" />
<iconSelectedColor value="$preset_fs25_colorMainHighlight" />
</Profile>
<Profile name="cpInfoTextListElementBg" extends="baseReference" with="anchorTopStretchingX">
<imageSliceId value="gui.animalScreen_left" />
<!-- <imageSelectedColor value="$preset_colorBlack80" /> -->
</Profile>
</GUIProfiles>
</GUI>
79 changes: 79 additions & 0 deletions img/iconSprite.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<texture>
<meta>
<filename>iconSprite.dds</filename>
<size width="256" height="512" />
</meta>
<slices>
<slice id="white_harvesterExclamationmark" uvs="4px 4px 32px 32px"/>
<slice id="white_playStopPauseRecord" uvs="40px 4px 32px 32px"/>
<slice id="white_globe" uvs="76px 4px 32px 32px"/>
<slice id="white_sliders" uvs="112px 4px 32px 32px"/>
<slice id="white_harvesterMagnifyingGlass" uvs="148px 4px 32px 32px"/>
<slice id="white_cruiseControl" uvs="184px 4px 32px 32px"/>
<slice id="white_cogwheel" uvs="220px 4px 32px 32px"/>
<slice id="white_vehicle" uvs="4px 40px 32px 32px"/>
<slice id="white_fieldCourse" uvs="40px 40px 32px 32px"/>
<slice id="white_shovel" uvs="76px 40px 32px 32px"/>
<slice id="white_refillCourse" uvs="112px 40px 32px 32px"/>
<slice id="white_refillCourseCombine" uvs="148px 40px 32px 32px"/>
<slice id="white_refillCourseCombinePlate" uvs="184px 40px 32px 32px"/>
<slice id="white_refillCourseSpreader" uvs="220px 40px 32px 32px"/>
<slice id="white_driveToCourse" uvs="4px 76px 32px 32px"/>
<slice id="white_fieldworkCourse" uvs="40px 76px 32px 32px"/>
<slice id="white_bale" uvs="76px 76px 32px 32px"/>
<slice id="white_refillCourseTank" uvs="112px 76px 32px 32px"/>
<slice id="refillCourse" uvs="184px 76px 32px 32px"/>
<slice id="refillCourseCombine" uvs="220px 76px 32px 32px"/>
<slice id="refillCourseCombinePlate" uvs="4px 112px 32px 32px"/>
<slice id="refillCourseSpreader" uvs="40px 112px 32px 32px"/>
<slice id="driveToCourse" uvs="76px 112px 32px 32px"/>
<slice id="fieldworkCourse" uvs="112px 112px 32px 32px"/>
<slice id="bale" uvs="148px 112px 32px 32px"/>
<slice id="refillCourseTank" uvs="184px 112px 32px 32px"/>
<slice id="shovel" uvs="220px 112px 32px 32px"/>
<slice id="waypoint" uvs="4px 148px 32px 32px"/>
<slice id="parking" uvs="40px 148px 32px 32px"/>
<slice id="triangleCross" uvs="76px 148px 32px 32px"/>
<slice id="infoCircle" uvs="112px 148px 32px 32px"/>
<slice id="eye" uvs="148px 148px 32px 32px"/>
<slice id="copy" uvs="184px 148px 32px 32px"/>
<slice id="save" uvs="220px 148px 32px 32px"/>
<slice id="leftArrow" uvs="4px 184px 32px 32px"/>
<slice id="rightArrow" uvs="40px 184px 32px 32px"/>
<slice id="upArrow" uvs="76px 184px 32px 32px"/>
<slice id="downArrow" uvs="112px 184px 32px 32px"/>
<slice id="crossCircle" uvs="148px 184px 32px 32px"/>
<slice id="trashcan" uvs="184px 184px 32px 32px"/>
<slice id="favoriteFolder" uvs="220px 184px 32px 32px"/>
<slice id="folder" uvs="4px 220px 32px 32px"/>
<slice id="plusFolder" uvs="40px 220px 32px 32px"/>
<slice id="upFolder" uvs="76px 220px 32px 32px"/>
<slice id="downFolder" uvs="112px 220px 32px 32px"/>
<slice id="plusCircle" uvs="148px 220px 32px 32px"/>
<slice id="minusCircle" uvs="184px 220px 32px 32px"/>
<slice id="refresh" uvs="220px 220px 32px 32px"/>
<slice id="magnifyingGlass" uvs="4px 256px 32px 32px"/>
<slice id="clear" uvs="40px 256px 32px 32px"/>
<slice id="calculator" uvs="76px 256px 32px 32px"/>
<slice id="rightArrowCourse" uvs="112px 256px 64px 32px"/>
<slice id="leftArrowCourse" uvs="184px 256px 64px 32px"/>
<slice id="rightTurn" uvs="4px 292px 32px 32px"/>
<slice id="leftTurn" uvs="40px 292px 32px 32px"/>
<slice id="loadingShovel" uvs="76px 292px 32px 32px"/>
<slice id="unloadingShovel" uvs="112px 292px 32px 32px"/>
<slice id="preUnloadShovel" uvs="148px 292px 32px 32px"/>
<slice id="transportShovel" uvs="184px 292px 32px 32px"/>
<slice id="play" uvs="220px 292px 32px 32px"/>
<slice id="uturn" uvs="4px 328px 32px 32px"/>
<slice id="pause" uvs="40px 328px 32px 32px"/>
<slice id="stop" uvs="76px 328px 32px 32px"/>
<slice id="reverse" uvs="112px 328px 32px 32px"/>
<slice id="trashcanDownArrow" uvs="148px 328px 32px 32px"/>
<slice id="exit" uvs="184px 328px 32px 32px"/>
<slice id="waypointBroken" uvs="220px 328px 32px 32px"/>
<slice id="circle" uvs="4px 367px 26px 26px"/>
<slice id="silo" uvs="220px 364px 26px 26px"/>
<slice id="unload" uvs="4px 400px 26px 26px"/>
<slice id="white_silo" uvs="220px 400px 26px 26px"/>
</slices>
</texture>
Binary file modified img/ui_courseplay.dds
Binary file not shown.
57 changes: 57 additions & 0 deletions img/ui_courseplay.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<texture>
<meta>
<filename>ui_courseplay.dds</filename>
<size width="1024" height="1024" />
</meta>
<slices>
<slice id="harvesterExclamationmark" uvs="0px 0px 128px 128px"/>
<slice id="navigation" uvs="128px 0px 128px 128px"/>
<slice id="navigationPath" uvs="256px 0px 128px 128px"/>
<slice id="slider" uvs="384px 0px 128px 128px"/>
<slice id="harvesterSearch" uvs="512px 0px 128px 128px"/>
<slice id="cruiseControl" uvs="640px 0px 128px 128px"/>
<slice id="cogwheel" uvs="768px 0px 128px 128px"/>
<slice id="vehicleCogwheel" uvs="896px 0px 128px 128px"/>
<!-- <slice id="todo" uvs="0px 128px 128px 128px"/> -->
<!-- <slice id="todo" uvs="128px 128px 128px 128px"/> -->
<!-- <slice id="todo" uvs="256px 128px 128px 128px"/> -->
<!-- <slice id="todo" uvs="384px 128px 128px 128px"/> -->
<!-- <slice id="todo" uvs="512px 128px 128px 128px"/> -->
<!-- <slice id="todo" uvs="640px 128px 128px 128px"/> -->
<!-- <slice id="todo" uvs="768px 128px 128px 128px"/> -->
<!-- <slice id="todo" uvs="896px 128px 128px 128px"/> -->
<!-- <slice id="todo" uvs="0px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="128px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="256px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="384px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="512px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="640px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="768px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="896px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="0px 384px 128px 128px"/> -->
<!-- <slice id="todo" uvs="128px 384px 128px 128px"/> -->
<!-- <slice id="todo" uvs="256px 384px 128px 128px"/> -->
<!-- <slice id="todo" uvs="384px 384px 128px 128px"/> -->
<!-- <slice id="todo" uvs="512px 384px 128px 128px"/> -->
<!-- <slice id="todo" uvs="640px 384px 128px 128px"/> -->
<!-- <slice id="todo" uvs="768px 384px 128px 128px"/> -->
<!-- <slice id="todo" uvs="896px 384px 128px 128px"/> -->
<slice id="plus" uvs="0px 512px 128px 128px"/>
<slice id="minus" uvs="128px 512px 128px 128px"/>
<slice id="exit" uvs="256px 512px 128px 128px"/>
<slice id="leftArrow" uvs="384px 512px 128px 128px"/>
<slice id="rightArrow" uvs="512px 512px 128px 128px"/>
<slice id="upArrow" uvs="640px 512px 128px 128px"/>
<slice id="downArrow" uvs="768px 512px 128px 128px"/>
<slice id="trashcan" uvs="896px 512px 128px 128px"/>
<slice id="trailer" uvs="0px 640px 128px 128px"/>
<slice id="copy" uvs="128px 640px 128px 128px"/>
<slice id="paste" uvs="256px 640px 128px 128px"/>
<!-- <slice id="todo" uvs="384px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="512px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="640px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="768px 256px 128px 128px"/> -->
<!-- <slice id="todo" uvs="896px 256px 128px 128px"/> -->
<slice id="skip" uvs="0px 768px 128px 128px"/>
</slices>
</texture>
2 changes: 2 additions & 0 deletions scripts/ai/InfoTextsManager.lua
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ function CpInfoTextElement:init(name, text, id, hasFinished, event, aiMessageCla
if aiMessageClass then
self.aiMessageClass = CpUtil.getClassObject(aiMessageClass)
end
MessageType.CP_INFO_TEXT_CHANGED = nextMessageTypeId()
end

function CpInfoTextElement:__tostring()
Expand Down Expand Up @@ -204,6 +205,7 @@ function InfoTextManager:changeNumActiveTexts()
if InfoTextManager.numActiveTexts > 10 then
InfoTextManager.numActiveTexts = -1
end
g_messageCenter:publishDelayed(MessageType.CP_INFO_TEXT_CHANGED)
end

g_infoTextManager = InfoTextManager()
3 changes: 2 additions & 1 deletion scripts/field/CustomField.lua
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ function CustomField:draw(map)
if not self.fieldHotspot then
-- add hotspot when draw first called. Can't create in the constructor as on game load
-- when the custom fields are loaded there's no player yet
self:addHotspot()
-- TODO_25
-- self:addHotspot()
end
self.fieldPlot:draw(map)
end
Expand Down
50 changes: 30 additions & 20 deletions scripts/gui/CpGuiUtil.lua
Original file line number Diff line number Diff line change
Expand Up @@ -300,20 +300,30 @@ end
---@param iconData table filename, uvs
---@param color table r, g, b, alpha
---@param alignment table vertical, horizontal alignments
---@param sliceId string|nil slice id
function CpGuiUtil.createOverlay(size, iconData, color, alignment, sliceId)
---@return table
function CpGuiUtil.createOverlay(size, iconData, color, alignment)
local filename, uvs = unpack(iconData)
local overlay = Overlay.new(filename, 0, 0, unpack(size))
if sliceId then
overlay:setSliceId(sliceId)
else
overlay:setUVs(uvs)
end
overlay:setUVs(uvs)
overlay:setColor(unpack(color))
overlay:setAlignment(unpack(alignment))
return overlay
end

--- Creates a new overlay with the overlay manager
---@param sliceId string slice id
---@param size table x, y
---@param color table r, g, b, alpha
---@param alignment table vertical, horizontal alignments
---@return table
function CpGuiUtil.createOverlayFromSlice(sliceId, size, color, alignment)
local overlay = g_overlayManager:createOverlay(sliceId, 0, 0, unpack(size))
overlay:setColor(unpack(color))
overlay:setAlignment(unpack(alignment))
return overlay
end


--- Enable/disable camera rotation when a vehicle is selected. We want to disable camera rotation per mouse
--- when we enable the mouse cursor so it can be used click controls on a GUI
---@param vehicle table
Expand Down Expand Up @@ -349,26 +359,26 @@ end
---@param hMargin number
---@param line number
function CpGuiUtil.addCopyAndPasteButtons(layout, baseHud, vehicle, lines, wMargin, hMargin, line)
local imageFilename = Utils.getFilename('img/ui_courseplay.dds', g_Courseplay.BASE_DIRECTORY)
local imageFilename2 = Utils.getFilename('img/iconSprite.dds', g_Courseplay.BASE_DIRECTORY)

local leftX, leftY = unpack(lines[line].left)
local rightX, rightY = unpack(lines[line].right)
local btnYOffset = hMargin/3
local width, height = getNormalizedScreenValues(22, 22)

local copyOverlay = CpGuiUtil.createOverlay({width, height},
{imageFilename, GuiUtils.getUVs(unpack(CpBaseHud.uvs.copySymbol))},
CpBaseHud.OFF_COLOR,
CpBaseHud.alignments.bottomRight)

local pasteOverlay = CpGuiUtil.createOverlay({width, height},
{imageFilename, GuiUtils.getUVs(unpack(CpBaseHud.uvs.pasteSymbol))},
local copyOverlay = CpGuiUtil.createOverlayFromSlice(
"cpUi.copy",
{width, height},
CpBaseHud.OFF_COLOR,
CpBaseHud.alignments.bottomRight)

local clearCourseOverlay = CpGuiUtil.createOverlay({width, height},
{imageFilename2, GuiUtils.getUVs(unpack(CpBaseHud.uvs.clearCourseSymbol))},

local pasteOverlay = CpGuiUtil.createOverlayFromSlice(
"cpUi.paste",
{width, height},
CpBaseHud.OFF_COLOR,
CpBaseHud.alignments.bottomRight)

local clearCourseOverlay = CpGuiUtil.createOverlayFromSlice(
"cpIconSprite.clear",
{width, height},
CpBaseHud.OFF_COLOR,
CpBaseHud.alignments.bottomRight)

Expand Down
Loading

0 comments on commit 2b70e90

Please sign in to comment.