mirror of
https://github.com/Xevion/RimWorld-Hydroponics-Expanded.git
synced 2025-12-06 03:16:18 -06:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fab9e610a7 | |||
| 20bb5738f0 | |||
| 55b6feee4b | |||
| 9b13326fb7 | |||
| f80d87dc6d | |||
| 26565b05dc | |||
| 13250057dc | |||
| 3acb6f1d2c | |||
| ef5608dc0c | |||
| 84adf2f666 | |||
| a8df95acce | |||
| ee38dbeccf | |||
| 9a084bd237 | |||
| 4a98d6aa83 | |||
| a8b7ba4496 | |||
| acbc440d10 | |||
| 9cbbc0a823 | |||
| c14d9ad840 | |||
| ff16bd7a08 | |||
| 6774a121ce | |||
| 8cd1ae7caf | |||
| 7f97c26916 | |||
| 8facf38ab2 | |||
| d64e18207e | |||
| 275c524a30 | |||
| bc7308749b | |||
| d53a7f2763 | |||
| 85eeec32e3 | |||
|
|
2486dd2e7c | ||
| d3321ececb | |||
| 9e86262e5d | |||
| 1e6a60b996 | |||
| 7f5c1884fc | |||
| 6cc3d59f8d | |||
| d2a019997c |
|
Before Width: | Height: | Size: 333 KiB After Width: | Height: | Size: 333 KiB |
|
Before Width: | Height: | Size: 718 KiB After Width: | Height: | Size: 718 KiB |
47
.github/workflows/build.yml
vendored
Normal file
47
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
name: Build
|
||||
|
||||
env:
|
||||
SLN_PATH: Source/HydroponicsExpanded/
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'README.md'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Dotnet
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 8.0.x
|
||||
|
||||
- name: Install Mod Dependencies
|
||||
run: dotnet restore ${{ env.SLN_PATH }}
|
||||
|
||||
- name: Build Mod
|
||||
run: dotnet build ${{ env.SLN_PATH }} --configuration Release --no-restore
|
||||
|
||||
- name: Get Version
|
||||
id: get_version
|
||||
run: |
|
||||
curl -sf https://gobinaries.com/sibprogrammer/xq@latest | sh
|
||||
VERSION=$(xq ./About/About.xml -x "/ModMetaData/modVersion")
|
||||
echo "result=$VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Move files
|
||||
run: |
|
||||
mkdir -p output/HydroponicsExpanded
|
||||
mv About/ Assemblies/ Defs/ Languages/ Textures/ output/HydroponicsExpanded
|
||||
|
||||
- name: Upload Mod Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: HydroponicsExpanded-${{ steps.get_version.outputs.result }}
|
||||
path: output/
|
||||
38
.github/workflows/go.mod
vendored
Normal file
38
.github/workflows/go.mod
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
module github.com/Xevion/RimWorld-Hydroponics-Expanded
|
||||
|
||||
go 1.21.6
|
||||
|
||||
require (
|
||||
github.com/PuerkitoBio/goquery v1.8.1 // indirect
|
||||
github.com/andybalholm/cascadia v1.3.2 // indirect
|
||||
github.com/antchfx/xmlquery v1.3.18 // indirect
|
||||
github.com/antchfx/xpath v1.2.4 // indirect
|
||||
github.com/fatih/color v1.16.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/magiconair/properties v1.8.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
||||
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
||||
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||
github.com/sibprogrammer/xq v1.2.4 // indirect
|
||||
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||
github.com/spf13/afero v1.11.0 // indirect
|
||||
github.com/spf13/cast v1.6.0 // indirect
|
||||
github.com/spf13/cobra v1.8.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/spf13/viper v1.18.2 // indirect
|
||||
github.com/subosito/gotenv v1.6.0 // indirect
|
||||
go.uber.org/atomic v1.9.0 // indirect
|
||||
go.uber.org/multierr v1.9.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
|
||||
golang.org/x/net v0.19.0 // indirect
|
||||
golang.org/x/sys v0.15.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
120
.github/workflows/go.sum
vendored
Normal file
120
.github/workflows/go.sum
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM=
|
||||
github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ=
|
||||
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
|
||||
github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
|
||||
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
|
||||
github.com/antchfx/xmlquery v1.3.18 h1:FSQ3wMuphnPPGJOFhvc+cRQ2CT/rUj4cyQXkJcjOwz0=
|
||||
github.com/antchfx/xmlquery v1.3.18/go.mod h1:Afkq4JIeXut75taLSuI31ISJ/zeq+3jG7TunF7noreA=
|
||||
github.com/antchfx/xpath v1.2.4 h1:dW1HB/JxKvGtJ9WyVGJ0sIoEcqftV3SqIstujI+B9XY=
|
||||
github.com/antchfx/xpath v1.2.4/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
|
||||
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
|
||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
|
||||
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
|
||||
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
|
||||
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
|
||||
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
|
||||
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
|
||||
github.com/sibprogrammer/xq v1.2.4 h1:56FcvbzUlZ3bjB4B3xU2Zw8G8tpQlynIkb/17NB1I2Y=
|
||||
github.com/sibprogrammer/xq v1.2.4/go.mod h1:C62kkWd2f02kcC756Mlt2BS1084jPDpeOxEnC+bwlp0=
|
||||
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
|
||||
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
|
||||
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
|
||||
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
|
||||
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
|
||||
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
|
||||
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
|
||||
github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
|
||||
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
|
||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
|
||||
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
|
||||
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
.idea
|
||||
/Assemblies/*.dll
|
||||
/Assemblies/*.pdb
|
||||
Assemblies/*.dll
|
||||
Assemblies/*.pdb
|
||||
build/
|
||||
@@ -5,8 +5,8 @@
|
||||
<author>Xevion</author>
|
||||
<description>Provides simple but powerful hydroponics that store plants underground at the cost of expensive components, lots of power, and research.</description>
|
||||
<supportedVersions>
|
||||
<li>1.4</li>
|
||||
<li>1.5</li>
|
||||
</supportedVersions>
|
||||
<modVersion>0.1</modVersion>
|
||||
<modVersion>0.2.3</modVersion>
|
||||
<url>https://github.com/Xevion/RimWorld-Hydroponics-Expanded</url>
|
||||
</ModMetaData>
|
||||
1
About/PublishedFileId.txt
Normal file
1
About/PublishedFileId.txt
Normal file
@@ -0,0 +1 @@
|
||||
3005196131
|
||||
@@ -38,6 +38,9 @@
|
||||
<capacity>12</capacity>
|
||||
</li>
|
||||
</modExtensions>
|
||||
<researchPrerequisites>
|
||||
<li>HE_HighDensityHydroponics</li>
|
||||
</researchPrerequisites>
|
||||
</ThingDef>
|
||||
|
||||
</Defs>
|
||||
@@ -6,4 +6,5 @@
|
||||
<HydroponicsExpanded.HarvestStage>Waiting for all plants to be harvested.</HydroponicsExpanded.HarvestStage>
|
||||
<HydroponicsExpanded.OccupiedBays>Occupied Plant Bays</HydroponicsExpanded.OccupiedBays>
|
||||
<HydroponicsExpanded.Growth>Growth</HydroponicsExpanded.Growth>
|
||||
<HydroponicsExpanded.Resting>resting</HydroponicsExpanded.Resting>
|
||||
</LanguageData>
|
||||
16
README.md
16
README.md
@@ -8,6 +8,9 @@
|
||||
</sub>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
[![badge-workshop-subscribers]][workshop-link] [![badge-workshop-favorites]][workshop-link] [![badge-version]][workshop-link]
|
||||
|
||||
Provides simple but powerful hydroponics that store plants underground at the cost of expensive components, lots of
|
||||
power, and research.
|
||||
@@ -24,7 +27,7 @@ expensive both in resources & power usage.
|
||||
- Compact Hydroponics for growing many plants in a small space.
|
||||
- Balanced recipes with absurd power/recipe requirements for absurd density.
|
||||
- Simple usage with relatively no changes compared to traditional Hydroponics.
|
||||
- Strong compatability with few changes to Vanilla RimWorld.
|
||||
- Strong compatibility with few changes to Vanilla RimWorld.
|
||||
|
||||
## Compatibility
|
||||
|
||||
@@ -32,8 +35,9 @@ This mod does not modify any core vanilla code or Defs, and only builds off of t
|
||||
Therefore, other mods should have no problem with Hydroponics Expanded.
|
||||
|
||||
That said, mods that add custom crops may have issues - especially if they have custom growth mechanics.
|
||||
A good example is a crop that, when harvested, does not get deleted. Typical hydroponic-grown crops in Vanilla RimWorld
|
||||
get deleted when harvested, and thus work fine. Trees however, are not, and do not get deleted once harvested.
|
||||
Harvestable plants (like Ambrosia) have custom interactions setup to allow them to be harvested _once_ instead of
|
||||
multiple times.
|
||||
The way the hydroponics are coded is not conducive to multi-harvest plants.
|
||||
|
||||
You can expect any crops like this to not work well within the basins added by Hydroponics Expanded.
|
||||
|
||||
@@ -65,6 +69,12 @@ preventing the crop from being sown in the hydroponics in the first place (there
|
||||
|
||||
[workshop-link]: https://steamcommunity.com/sharedfiles/filedetails/?id=3005196131
|
||||
|
||||
[badge-version]: https://img.shields.io/badge/built_for-RimWorld_1.5-blue
|
||||
|
||||
[badge-workshop-subscribers]: https://img.shields.io/endpoint.svg?url=https://shieldsio-steam-workshop.jross.me/3005196131/subscriptions-text
|
||||
|
||||
[badge-workshop-favorites]: https://img.shields.io/endpoint.svg?url=https://shieldsio-steam-workshop.jross.me/3005196131/favourites-text
|
||||
|
||||
[hydroponics-basin]: https://rimworldwiki.com/wiki/Hydroponics_basin
|
||||
|
||||
[rimworld]: https://store.steampowered.com/app/294100/RimWorld/
|
||||
@@ -7,6 +7,7 @@ using HydroponicsExpanded.Utility;
|
||||
using RimWorld;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
using Verse.Sound;
|
||||
|
||||
namespace HydroponicsExpanded {
|
||||
@@ -73,11 +74,22 @@ namespace HydroponicsExpanded {
|
||||
|
||||
// If the maximum capacity is reached, then we should move to the growing stage.
|
||||
if (capacityReached) {
|
||||
Stage = HydroponicsStage.Grow;
|
||||
|
||||
// Some plants might have been skipped, so go back and kill anything still on top.
|
||||
foreach (Plant plant in PlantsOnMe)
|
||||
plant.Destroy();
|
||||
|
||||
// Play the sound effect to signal the transition to the grow stage.
|
||||
SoundDefOf.CryptosleepCasket_Accept.PlayOneShot(new TargetInfo(Position, Map));
|
||||
Stage = HydroponicsStage.Grow;
|
||||
|
||||
// Set the highest growth to the tracked plant's growth, to ensure the bar is accurate.
|
||||
_highestGrowth = ((Plant)_innerContainer[0]).Growth;
|
||||
|
||||
// Some active sowing jobs may be in progress for pathing, and thus will sow plants AFTER the stage
|
||||
// transition is made. This results in some weird looking random plants very rarely.
|
||||
// In order to fix this, we'll just remove all pending sowing jobs that relate to THIS hydroponics.
|
||||
CancelActiveJobs();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,8 +114,7 @@ namespace HydroponicsExpanded {
|
||||
}
|
||||
|
||||
// Temperature & time of day check.
|
||||
float temperature = Position.GetTemperature(Map);
|
||||
if (temperature.Between(10f, 42f) && GenLocalDate.DayPercent(this).Between(0.25f, 0.8f)) {
|
||||
if (IsResting() == false) {
|
||||
float growthAmount = 1f / (60_000f * growthTrackingPlant.def.plant.growDays) * 250f;
|
||||
|
||||
// Debug gizmo can set growth to 100%, thus Math.min check here.
|
||||
@@ -117,10 +128,16 @@ namespace HydroponicsExpanded {
|
||||
Stage = HydroponicsStage.Harvest;
|
||||
}
|
||||
|
||||
private void HarvestTick() {
|
||||
// var plantsLeft = _innerContainer.Count;
|
||||
// var potentialCellCount = this.OccupiedRect().Area;
|
||||
/// <summary>
|
||||
/// Determines whether the hydroponics basin is in a resting state.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> if the hydroponics basin is in a resting state; otherwise, <c>false</c>.</returns>
|
||||
private bool IsResting() {
|
||||
float temperature = Position.GetTemperature(Map);
|
||||
return !(temperature.Between(10f, 42f) && GenLocalDate.DayPercent(this).Between(0.25f, 0.8f));
|
||||
}
|
||||
|
||||
private void HarvestTick() {
|
||||
// Try to place every plant in the container in any cell.
|
||||
foreach (Thing nextInnerThing in _innerContainer) {
|
||||
var nextPlant = (Plant)nextInnerThing;
|
||||
@@ -145,6 +162,17 @@ namespace HydroponicsExpanded {
|
||||
break;
|
||||
}
|
||||
|
||||
// Re-harvestable plants will be destroyed if we think they've been harvested recently.
|
||||
foreach (Plant plant in PlantsOnMe) {
|
||||
if (plant.def.plant.HarvestDestroys) continue;
|
||||
|
||||
// Only consider re-harvestable plants eligible if they're still within 20% of their harvest growth level,
|
||||
// up to 90%. This may need tuning if there are harvestable plants that go to 90% growth.
|
||||
var minGrowth = plant.def.plant.harvestAfterGrowth;
|
||||
if (plant.Growth.Between(minGrowth, Math.Min(0.9f, minGrowth + 0.2f), inclusive: true))
|
||||
plant.Destroy();
|
||||
}
|
||||
|
||||
// All plants have been harvested. Switch back to sowing stage.
|
||||
if (_innerContainer.Count == 0)
|
||||
Stage = HydroponicsStage.Sowing;
|
||||
@@ -169,17 +197,43 @@ namespace HydroponicsExpanded {
|
||||
|
||||
public override void TickRare() {
|
||||
// Tick the current stage.
|
||||
HydroponicsStage initialStage = _stage;
|
||||
TickStage(_stage);
|
||||
HydroponicsStage initialStage = Stage;
|
||||
TickStage(Stage);
|
||||
|
||||
// If the stage changed, re-run the next tick. This can allow for instant Grow -> Harvest transition.
|
||||
if (_stage != initialStage)
|
||||
TickStage(_stage);
|
||||
TickStage(Stage);
|
||||
|
||||
// Apply rotting damage to all plants while power is cut.
|
||||
if (!base.CanAcceptSowNow())
|
||||
if (!base.CanAcceptSowNow()) {
|
||||
foreach (Thing thing in _innerContainer)
|
||||
((Plant)thing).TakeDamage(new DamageInfo(DamageDefOf.Rotting, 1f));
|
||||
foreach (Plant plant in PlantsOnMe)
|
||||
plant.TakeDamage(new DamageInfo(DamageDefOf.Rotting, 1f));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method cancels all active sowing jobs that interact with this given hydroponics' growing zone.
|
||||
*/
|
||||
private void CancelActiveJobs() {
|
||||
CellRect region = this.OccupiedRect();
|
||||
foreach (Pawn pawn in Map.mapPawns.AllPawnsSpawned) {
|
||||
// Prisoners can't do sow jobs (slaves could though)
|
||||
if (pawn.IsPrisoner) continue;
|
||||
|
||||
foreach (Job job in pawn.jobs.AllJobs()) {
|
||||
// Only worry about sowing jobs
|
||||
if (job.def != JobDefOf.Sow) continue;
|
||||
// Only care if it's in our hydroponics region
|
||||
if (!region.Contains(job.targetA.Cell)) continue;
|
||||
|
||||
Log.Message($"Canceled a Sow Job at {job.targetA.Cell} for {pawn.NameFullColored}");
|
||||
|
||||
// Cancel the job, make sure it doesn't get regenerated
|
||||
pawn.jobs.EndCurrentOrQueuedJob(job, JobCondition.Incompletable, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly Material HydroponicPoweredFillMaterial =
|
||||
@@ -191,13 +245,13 @@ namespace HydroponicsExpanded {
|
||||
private static readonly Material HydroponicUnfilledMaterial =
|
||||
SolidColorMaterials.SimpleSolidColorMaterial(new Color(0.3f, 0.3f, 0.3f));
|
||||
|
||||
public override void Draw() {
|
||||
base.Draw();
|
||||
protected override void DrawAt(Vector3 drawLoc, bool flip=false) {
|
||||
base.DrawAt(drawLoc, flip);
|
||||
|
||||
// Only draw growth percentage bar during Sowing stage
|
||||
if (_stage == HydroponicsStage.Grow) {
|
||||
var bar = new GenDraw.FillableBarRequest {
|
||||
center = DrawPos + Vector3.up * 0.1f,
|
||||
center = drawLoc + Vector3.up * 0.1f,
|
||||
size = new Vector2(DrawSize.y - 0.4f, DrawSize.x - 0.4f),
|
||||
margin = 0.15f,
|
||||
fillPercent = _highestGrowth,
|
||||
@@ -242,6 +296,10 @@ namespace HydroponicsExpanded {
|
||||
if (_innerContainer.Count > 0) {
|
||||
inspectString += "\n";
|
||||
inspectString += "HydroponicsExpanded.Growth".Translate() + $": {_highestGrowth * 100f:#0}%";
|
||||
|
||||
if (IsResting()) {
|
||||
inspectString += " (" + "HydroponicsExpanded.Resting".Translate() + ")";
|
||||
}
|
||||
}
|
||||
|
||||
return inspectString;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<!-- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> -->
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
@@ -9,8 +9,9 @@
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>HydroponicsExpanded</RootNamespace>
|
||||
<AssemblyName>HydroponicsExpanded</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -31,7 +32,7 @@
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<!-- <ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
@@ -45,15 +46,18 @@
|
||||
<Reference Include="UnityEngine.CoreModule">
|
||||
<HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</ItemGroup> -->
|
||||
<ItemGroup>
|
||||
<Compile Include="Buildings\Building_DenseHydroponicsBasin.cs" />
|
||||
<!-- <Compile Include="Buildings\Building_DenseHydroponicsBasin.cs" />
|
||||
<Compile Include="Enums\HydroponicsStage.cs" />
|
||||
<Compile Include="ModExtension\CapacityExtension.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Utility\BetweenExtension.cs" />
|
||||
<Compile Include="Utility\BetweenExtension.cs" /> -->
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Krafs.Rimworld.Ref" Version="1.5.4085" />
|
||||
</ItemGroup>
|
||||
<!-- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> -->
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
@@ -9,7 +9,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("HydroponicsExpanded")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2023")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2023")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
||||
84
build.py
84
build.py
@@ -1,84 +0,0 @@
|
||||
import glob
|
||||
import logging
|
||||
import shutil
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from shutil import rmtree
|
||||
from typing import List
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
PROJECT_DIRECTORY: Path = Path(__file__).parent
|
||||
|
||||
|
||||
def main(output_directory: Path) -> None:
|
||||
# Check that output directory exists properly.
|
||||
if not output_directory.exists():
|
||||
# If the parent doesn't exist, we aren't going to create the folder.
|
||||
if not output_directory.parent.exists():
|
||||
raise RuntimeError("Cannot create more than one directory. Please check the output")
|
||||
|
||||
output_directory.mkdir(parents=False, exist_ok=False)
|
||||
|
||||
output_mod_directory: Path = output_directory / "HydroponicsExpanded"
|
||||
|
||||
# Folders that we need to be removed from the output directory if they contain any files.
|
||||
pertinents_folders: List[str] = ["Defs", "Assemblies", "About", "Textures", "Languages"]
|
||||
if output_mod_directory.exists():
|
||||
logger.debug('Checking for folders to clear in destination.')
|
||||
|
||||
for folder in pertinents_folders:
|
||||
destination_folder_path: Path = output_mod_directory / folder
|
||||
|
||||
# Ignore folders that don't exist.
|
||||
if not destination_folder_path.exists():
|
||||
continue
|
||||
|
||||
has_children: bool = any(destination_folder_path.iterdir())
|
||||
logger.debug('Clearing "{}" folder.'.format(folder))
|
||||
if has_children:
|
||||
rmtree(destination_folder_path)
|
||||
# destination_folder_path.rmdir()
|
||||
else:
|
||||
output_mod_directory.mkdir(parents=False)
|
||||
|
||||
patterns: List[str] = [
|
||||
"About/",
|
||||
"About/About.xml",
|
||||
"About/Preview.png",
|
||||
"Assemblies/",
|
||||
"Assemblies/HydroponicsExpanded.dll",
|
||||
"Defs/**",
|
||||
"Languages/**",
|
||||
"Textures/**"
|
||||
]
|
||||
|
||||
for pattern in patterns:
|
||||
paths: List[Path] = list(map(Path, glob.glob(str(PROJECT_DIRECTORY / pattern), recursive=True)))
|
||||
|
||||
for source_path in paths:
|
||||
relative_path: Path = source_path.relative_to(PROJECT_DIRECTORY)
|
||||
destination_path: Path = output_mod_directory / relative_path
|
||||
|
||||
logger.debug("Copying from {} to {}".format(source_path, destination_path))
|
||||
if source_path.is_dir():
|
||||
destination_path.mkdir(exist_ok=True)
|
||||
elif source_path.is_file():
|
||||
shutil.copyfile(source_path, destination_path)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
output_directory: Path = PROJECT_DIRECTORY / "build"
|
||||
if len(sys.argv) > 1:
|
||||
output_directory = Path(sys.argv[1])
|
||||
else:
|
||||
logger.warning('Output directory automatically chosen.')
|
||||
|
||||
logger.debug('Project Directory: {}'.format(PROJECT_DIRECTORY))
|
||||
logger.debug('Output Directory: {}'.format(output_directory))
|
||||
|
||||
main(output_directory)
|
||||
except BaseException as e:
|
||||
logger.error("Build script failed", exc_info=e)
|
||||
Reference in New Issue
Block a user