Compare commits
1 commit
main
...
renovate/s
Author | SHA1 | Date | |
---|---|---|---|
7d4ab9811a |
30 changed files with 3732 additions and 3663 deletions
|
@ -1,99 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2023 Johannes Loher
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Bug Report
|
|
||||||
about: File a bug report
|
|
||||||
labels: ['bug', 'to be confirmed']
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Your issue may already have been reported! Please search on the [issue tracker](https://git.f3l.de/dungeonslayers/tickwerk/issues) before submitting a new one.
|
|
||||||
|
|
||||||
Thanks for taking the time to fill out this bug report! In order to make it effective, please provide the following information.
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
## Issue Description
|
|
||||||
- type: textarea
|
|
||||||
id: expected
|
|
||||||
attributes:
|
|
||||||
label: Expected Behavior
|
|
||||||
description: What is the behavior that you expected?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: current
|
|
||||||
attributes:
|
|
||||||
label: Current Behavior
|
|
||||||
description: What is the current behavior, i.e., what happens actually?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: steps
|
|
||||||
attributes:
|
|
||||||
label: Steps to Reproduce
|
|
||||||
description: What are the steps to reproduce the problem?
|
|
||||||
placeholder: |
|
|
||||||
1.
|
|
||||||
2.
|
|
||||||
3.
|
|
||||||
4.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: context
|
|
||||||
attributes:
|
|
||||||
label: Context
|
|
||||||
description: Please provide any additional context that might be helpful, e.g. log messages, screenshots, videos, or exports of problematic scenes or worlds.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
## Environment Details
|
|
||||||
- type: input
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: Version
|
|
||||||
description: Which version(s) of Tickwerk are you seeing the problem on?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: foundry-version
|
|
||||||
attributes:
|
|
||||||
label: Foundry VTT Version
|
|
||||||
description: Which version(s) and build of Foundry VTT are you seeing the problem on?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: os
|
|
||||||
attributes:
|
|
||||||
label: Operating System
|
|
||||||
description: Which operating system are you using? (Windows, OS X, Linux (which distro))
|
|
||||||
placeholder: Windows
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
id: browser
|
|
||||||
attributes:
|
|
||||||
label: Browser / App
|
|
||||||
description: Are you using a Browser or the native Electron application? (Select all that apply)
|
|
||||||
multiple: true
|
|
||||||
options:
|
|
||||||
- Native Electron App
|
|
||||||
- Chrome
|
|
||||||
- Firefox
|
|
||||||
- Microsoft Edge
|
|
||||||
- Safari
|
|
||||||
- Other
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: modules
|
|
||||||
attributes:
|
|
||||||
label: Relevant Modules
|
|
||||||
description: Please list any other active modules (including their versions) that you think might be relevant.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
|
@ -1,5 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2023 Johannes Loher
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
blank_issues_enabled: false
|
|
|
@ -1,28 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2023 Johannes Loher
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Feature Request
|
|
||||||
description: Submit a feature request
|
|
||||||
labels: ['feature']
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Your issue may already have been reported! Please search on the [issue tracker](https://git.f3l.de/dungeonslayers/tickwerk/issues) before submitting a new one.
|
|
||||||
|
|
||||||
In order to submit an effective feature request, please provide the following information.
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: Description
|
|
||||||
description: Please describe the proposal in as much detail as you feel is necessary.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: context
|
|
||||||
attributes:
|
|
||||||
label: Context
|
|
||||||
description: Is there anything else you can add about the proposal? You might want to link to related issues here if you haven't already.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
173
.gitlab-ci.yml
Normal file
173
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
# SPDX-FileCopyrightText: 2021 Johannes Loher
|
||||||
|
# SPDX-FileCopyrightText: 2021 Oliver Rümpelein
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
workflow:
|
||||||
|
rules:
|
||||||
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||||
|
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
||||||
|
when: never
|
||||||
|
- if: $CI_COMMIT_BRANCH
|
||||||
|
- if: $CI_COMMIT_TAG
|
||||||
|
|
||||||
|
variables:
|
||||||
|
PACKAGE_NAME: tickwerk
|
||||||
|
PACKAGE_TYPE: module
|
||||||
|
PACKAGE_REGISTRY_URL: $CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic/$PACKAGE_NAME
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- check
|
||||||
|
- build
|
||||||
|
- prepare-release
|
||||||
|
- release
|
||||||
|
- publish
|
||||||
|
|
||||||
|
image: node:lts
|
||||||
|
|
||||||
|
cache: &global_cache
|
||||||
|
paths:
|
||||||
|
- .yarn/cache
|
||||||
|
|
||||||
|
lint:
|
||||||
|
stage: check
|
||||||
|
before_script:
|
||||||
|
- yarn install --immutable
|
||||||
|
script:
|
||||||
|
- yarn lint
|
||||||
|
cache:
|
||||||
|
<<: *global_cache
|
||||||
|
|
||||||
|
reuse:
|
||||||
|
stage: check
|
||||||
|
image:
|
||||||
|
name: fsfe/reuse:latest
|
||||||
|
entrypoint: ['']
|
||||||
|
script:
|
||||||
|
- reuse lint
|
||||||
|
|
||||||
|
commitlint:
|
||||||
|
stage: check
|
||||||
|
before_script:
|
||||||
|
- yarn install --immutable
|
||||||
|
script:
|
||||||
|
- yarn run commitlint --from $CI_MERGE_REQUEST_DIFF_BASE_SHA
|
||||||
|
rules:
|
||||||
|
- if: "$CI_PIPELINE_SOURCE == 'merge_request_event' && $CI_MERGE_REQUEST_DIFF_BASE_SHA"
|
||||||
|
|
||||||
|
build:
|
||||||
|
stage: build
|
||||||
|
before_script:
|
||||||
|
- yarn install --immutable
|
||||||
|
- if [[ ! -z ${CI_COMMIT_TAG+x} ]]; then export NODE_ENV=production; fi
|
||||||
|
script:
|
||||||
|
- yarn build
|
||||||
|
cache:
|
||||||
|
<<: *global_cache
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- dist
|
||||||
|
expire_in: 1 week
|
||||||
|
|
||||||
|
publish-artifacts:
|
||||||
|
stage: prepare-release
|
||||||
|
image: alpine:latest
|
||||||
|
before_script:
|
||||||
|
- apk update
|
||||||
|
- apk add zip curl
|
||||||
|
script: |
|
||||||
|
cd dist
|
||||||
|
zip -r ../$PACKAGE_TYPE.zip .
|
||||||
|
cd ..
|
||||||
|
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file $PACKAGE_TYPE.zip "$PACKAGE_REGISTRY_URL/$CI_COMMIT_TAG/$PACKAGE_TYPE.zip"
|
||||||
|
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file dist/$PACKAGE_TYPE.json "$PACKAGE_REGISTRY_URL/$CI_COMMIT_TAG/$PACKAGE_TYPE.json"
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'
|
||||||
|
|
||||||
|
changelog:
|
||||||
|
stage: prepare-release
|
||||||
|
before_script:
|
||||||
|
- yarn install --immutable
|
||||||
|
script:
|
||||||
|
- yarn changelog
|
||||||
|
cache:
|
||||||
|
<<: *global_cache
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- CHANGELOG.md
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'
|
||||||
|
|
||||||
|
.release-template: &release-template
|
||||||
|
stage: release
|
||||||
|
before_script:
|
||||||
|
- yarn install
|
||||||
|
- apt update
|
||||||
|
- apt install --yes jq
|
||||||
|
- REPOSITORY_URL=$(echo "${CI_REPOSITORY_URL}" | sed -e "s|gitlab-ci-token:.*@|${RELEASE_TOKEN}:${RELEASE_TOKEN_SECRET}@|g")
|
||||||
|
- git remote set-url origin $REPOSITORY_URL
|
||||||
|
- git config user.name $GITLAB_USER_LOGIN
|
||||||
|
- git config user.email $GITLAB_USER_EMAIL
|
||||||
|
- git branch -D ci-processing || true
|
||||||
|
- git checkout -b ci-processing
|
||||||
|
cache:
|
||||||
|
<<: *global_cache
|
||||||
|
script: |
|
||||||
|
yarn bump-version --release=${RELEASE_TYPE}
|
||||||
|
RELEASE_VERSION=$(jq -r '.version' < package.json)
|
||||||
|
git add package.json module.json
|
||||||
|
git --no-pager diff
|
||||||
|
git commit -m "chore(release): ${RELEASE_VERSION}"
|
||||||
|
git tag -f ${RELEASE_VERSION}
|
||||||
|
git push origin ci-processing:${CI_BUILD_REF_NAME} -o ci.skip
|
||||||
|
git push origin ${RELEASE_VERSION}
|
||||||
|
only:
|
||||||
|
- main
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
release-patch:
|
||||||
|
variables:
|
||||||
|
RELEASE_TYPE: patch
|
||||||
|
<<: *release-template
|
||||||
|
|
||||||
|
release-minor:
|
||||||
|
variables:
|
||||||
|
RELEASE_TYPE: minor
|
||||||
|
<<: *release-template
|
||||||
|
|
||||||
|
release-major:
|
||||||
|
variables:
|
||||||
|
RELEASE_TYPE: major
|
||||||
|
<<: *release-template
|
||||||
|
|
||||||
|
release:
|
||||||
|
stage: release
|
||||||
|
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
||||||
|
script:
|
||||||
|
- echo 'release job'
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'
|
||||||
|
release:
|
||||||
|
tag_name: $CI_COMMIT_TAG
|
||||||
|
description: './CHANGELOG.md'
|
||||||
|
assets:
|
||||||
|
links:
|
||||||
|
- name: '$PACKAGE_TYPE.zip'
|
||||||
|
url: '$PACKAGE_REGISTRY_URL/$CI_COMMIT_TAG/$PACKAGE_TYPE.zip'
|
||||||
|
filepath: /$PACKAGE_TYPE.zip
|
||||||
|
link_type: package
|
||||||
|
- name: '$PACKAGE_TYPE.json'
|
||||||
|
url: '$PACKAGE_REGISTRY_URL/$CI_COMMIT_TAG/$PACKAGE_TYPE.json'
|
||||||
|
filepath: /$PACKAGE_TYPE.json
|
||||||
|
link_type: other
|
||||||
|
|
||||||
|
publish-latest-manifest:
|
||||||
|
stage: publish
|
||||||
|
image: alpine:latest
|
||||||
|
before_script:
|
||||||
|
- apk update
|
||||||
|
- apk add zip curl
|
||||||
|
script: |
|
||||||
|
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file dist/$PACKAGE_TYPE.json "$PACKAGE_REGISTRY_URL/latest/$PACKAGE_TYPE.json"
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'
|
48
.gitlab/issue_templates/Bug Report.md
Normal file
48
.gitlab/issue_templates/Bug Report.md
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
Your issue may already have been reported! Please search on the issue tracker (https://git.f3l.de/dungeonslayers/tickwerk/-/issues) before submitting a new one.
|
||||||
|
|
||||||
|
Thanks for taking the time to fill out this bug report! In order to make it effective, please provide the following information.
|
||||||
|
|
||||||
|
# Issue Description
|
||||||
|
|
||||||
|
## Expected Behavior
|
||||||
|
|
||||||
|
(What is the behavior that you expected?)
|
||||||
|
|
||||||
|
## Current Behavior
|
||||||
|
|
||||||
|
(What is the current behavior, i.e., what happens actually?)
|
||||||
|
|
||||||
|
## Steps to Reproduce
|
||||||
|
|
||||||
|
(What are the steps to reproduce the problem?)
|
||||||
|
|
||||||
|
1. ...
|
||||||
|
2. ...
|
||||||
|
3. ...
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
(Please provide any additional context that might be helpful, e.g. log messages,
|
||||||
|
screenshots, videos, or exports of problematic scenes or worlds.)
|
||||||
|
|
||||||
|
# Environment Details
|
||||||
|
|
||||||
|
## Version
|
||||||
|
|
||||||
|
(Which version(s) of Tickwerk are you seeing the problem on?)
|
||||||
|
|
||||||
|
## Foundry VTT Version
|
||||||
|
|
||||||
|
(Which version(s) and build of Foundry VTT are you seeing the problem on?)
|
||||||
|
|
||||||
|
## Operating System
|
||||||
|
|
||||||
|
(Which operating system are you using? (Windows, OS X, Linux (which distro)))
|
||||||
|
|
||||||
|
## Browser / App
|
||||||
|
|
||||||
|
(Are you using a Browser or the native Electron application?)
|
||||||
|
|
||||||
|
## Relevant Modules
|
||||||
|
|
||||||
|
(Please list any active modules (including their versions) that you think might be relevant.)
|
3
.gitlab/issue_templates/Bug Report.md.license
Normal file
3
.gitlab/issue_templates/Bug Report.md.license
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
SPDX-FileCopyrightText: 2022 Johannes Loher
|
||||||
|
|
||||||
|
SPDX-License-Identifier: MIT
|
11
.gitlab/issue_templates/Feature Request.md
Normal file
11
.gitlab/issue_templates/Feature Request.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
Your issue may already have been reported! Please search on the issue tracker (https://git.f3l.de/dungeonslayers/tickwerk/-/issues) before submitting a new one.
|
||||||
|
|
||||||
|
In order to submit an effective feature request, please provide the following information.
|
||||||
|
|
||||||
|
# Description
|
||||||
|
|
||||||
|
(Please describe the proposal in as much detail as you feel is necessary.)
|
||||||
|
|
||||||
|
# Context
|
||||||
|
|
||||||
|
(Is there anything else you can add about the proposal? You might want to link to related issues here if you haven't already.)
|
3
.gitlab/issue_templates/Feature Request.md.license
Normal file
3
.gitlab/issue_templates/Feature Request.md.license
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
SPDX-FileCopyrightText: 2022 Johannes Loher
|
||||||
|
|
||||||
|
SPDX-License-Identifier: MIT
|
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
|
@ -5,7 +5,7 @@
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"type": "chrome",
|
"type": "pwa-chrome",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"runtimeExecutable": "/usr/bin/chromium",
|
"runtimeExecutable": "/usr/bin/chromium",
|
||||||
"name": "Launch Chrome against localhost",
|
"name": "Launch Chrome against localhost",
|
||||||
|
|
8
.vscode/settings.json
vendored
8
.vscode/settings.json
vendored
|
@ -4,5 +4,11 @@
|
||||||
"**/.pnp.*": true
|
"**/.pnp.*": true
|
||||||
},
|
},
|
||||||
"eslint.nodePath": ".yarn/sdks",
|
"eslint.nodePath": ".yarn/sdks",
|
||||||
"prettier.prettierPath": ".yarn/sdks/prettier/index.js"
|
"prettier.prettierPath": ".yarn/sdks/prettier/index.js",
|
||||||
|
"importSorter.generalConfiguration.sortOnBeforeSave": true,
|
||||||
|
"importSorter.importStringConfiguration.maximumNumberOfImportExpressionsPerLine.type": "newLineEachExpressionAfterCountLimitExceptIfOnlyOne",
|
||||||
|
"importSorter.importStringConfiguration.maximumNumberOfImportExpressionsPerLine.count": 120,
|
||||||
|
"importSorter.importStringConfiguration.tabSize": 2,
|
||||||
|
"importSorter.importStringConfiguration.quoteMark": "single",
|
||||||
|
"importSorter.importStringConfiguration.trailingComma": "multiLine"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2023 Johannes Loher
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
$schema: https://raw.githubusercontent.com/woodpecker-ci/woodpecker/master/pipeline/schema/schema.json
|
|
||||||
|
|
||||||
variables:
|
|
||||||
- &node_image node:lts
|
|
||||||
|
|
||||||
when:
|
|
||||||
- event: push
|
|
||||||
branch: ${CI_REPO_DEFAULT_BRANCH}
|
|
||||||
- event: pull_request
|
|
||||||
- event: tag
|
|
||||||
- event: manual
|
|
||||||
|
|
||||||
steps:
|
|
||||||
install:
|
|
||||||
image: *node_image
|
|
||||||
commands:
|
|
||||||
- yarn install --immutable
|
|
||||||
lint:
|
|
||||||
group: check
|
|
||||||
image: *node_image
|
|
||||||
commands:
|
|
||||||
- yarn lint
|
|
||||||
reuse:
|
|
||||||
group: check
|
|
||||||
image: fsfe/reuse:latest
|
|
||||||
commands:
|
|
||||||
- reuse lint
|
|
||||||
commitlint:
|
|
||||||
group: check
|
|
||||||
image: *node_image
|
|
||||||
commands:
|
|
||||||
- git fetch
|
|
||||||
- yarn run commitlint --from origin/${CI_COMMIT_TARGET_BRANCH}
|
|
||||||
when:
|
|
||||||
event: pull_request
|
|
||||||
build:
|
|
||||||
group: build
|
|
||||||
image: *node_image
|
|
||||||
commands:
|
|
||||||
- export APPDATA=$(pwd)
|
|
||||||
- yarn build
|
|
|
@ -1,92 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2023 Johannes Loher
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
$schema: https://raw.githubusercontent.com/woodpecker-ci/woodpecker/master/pipeline/schema/schema.json
|
|
||||||
|
|
||||||
variables:
|
|
||||||
- &node_image node:lts
|
|
||||||
|
|
||||||
when:
|
|
||||||
event: tag
|
|
||||||
evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9]+)?$"
|
|
||||||
|
|
||||||
depends_on:
|
|
||||||
- checks
|
|
||||||
|
|
||||||
steps:
|
|
||||||
install:
|
|
||||||
image: *node_image
|
|
||||||
commands:
|
|
||||||
- yarn install --immutable
|
|
||||||
build:
|
|
||||||
image: *node_image
|
|
||||||
environment:
|
|
||||||
NODE_ENV: production
|
|
||||||
commands:
|
|
||||||
- export APPDATA=$(pwd)
|
|
||||||
- yarn build
|
|
||||||
package:
|
|
||||||
group: prepare-release
|
|
||||||
image: alpine:latest
|
|
||||||
commands:
|
|
||||||
- apk update
|
|
||||||
- apk add zip curl
|
|
||||||
- mv dist ${CI_REPO_NAME}
|
|
||||||
- zip -r ${CI_REPO_NAME}.zip ${CI_REPO_NAME}/*
|
|
||||||
changelog:
|
|
||||||
group: prepare-release
|
|
||||||
image: *node_image
|
|
||||||
commands:
|
|
||||||
- yarn changelog
|
|
||||||
choose-latest-channel:
|
|
||||||
group: prepare-release
|
|
||||||
image: alpine:latest
|
|
||||||
commands:
|
|
||||||
- echo latest > .RELEASE_CHANNEL
|
|
||||||
when:
|
|
||||||
evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$"
|
|
||||||
choose-beta-channel:
|
|
||||||
group: prepare-release
|
|
||||||
image: alpine:latest
|
|
||||||
commands:
|
|
||||||
- echo beta > .RELEASE_CHANNEL
|
|
||||||
when:
|
|
||||||
evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+-[0-9]+$"
|
|
||||||
release:
|
|
||||||
image: woodpeckerci/plugin-gitea-release
|
|
||||||
settings:
|
|
||||||
base_url: ${CI_FORGE_URL}
|
|
||||||
title: ${CI_COMMIT_TAG}
|
|
||||||
note: CHANGELOG.md
|
|
||||||
files:
|
|
||||||
- ${CI_REPO_NAME}.zip
|
|
||||||
- ${CI_REPO_NAME}/module.json
|
|
||||||
api_key:
|
|
||||||
from_secret: forge_token
|
|
||||||
publish-manifest:
|
|
||||||
group: publish
|
|
||||||
image: alpine:latest
|
|
||||||
commands:
|
|
||||||
- apk update
|
|
||||||
- apk add curl
|
|
||||||
- export RELEASE_CHANNEL=$(cat .RELEASE_CHANNEL)
|
|
||||||
- 'curl --header "Authorization: token $${FORGE_TOKEN}" -X "DELETE" "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/module.json"'
|
|
||||||
- 'curl --fail --header "Authorization: token $${FORGE_TOKEN}" --upload-file ${CI_REPO_NAME}/module.json "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/module.json"'
|
|
||||||
secrets:
|
|
||||||
- forge_token
|
|
||||||
publish-to-foundry-admin:
|
|
||||||
group: publish
|
|
||||||
image: johannesloher/foundry-publish:v2.4.1
|
|
||||||
environment:
|
|
||||||
FVTT_DELETE_OBSOLETE_VERSIONS: 'true'
|
|
||||||
FVTT_USE_NEW_PACKAGE_ADMINISTRATION_INTERFACE: 'true'
|
|
||||||
commands:
|
|
||||||
- export FVTT_MANIFEST_PATH=${CI_REPO_NAME}/module.json
|
|
||||||
- export FVTT_MANIFEST_URL=${CI_REPO_URL}/releases/download/${CI_COMMIT_TAG}/module.json
|
|
||||||
- foundry-publish
|
|
||||||
secrets:
|
|
||||||
- fvtt_username
|
|
||||||
- fvtt_password
|
|
||||||
when:
|
|
||||||
evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$"
|
|
|
@ -1,42 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2023 Johannes Loher
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
$schema: https://raw.githubusercontent.com/woodpecker-ci/woodpecker/master/pipeline/schema/schema.json
|
|
||||||
|
|
||||||
variables:
|
|
||||||
- &node_image node:lts
|
|
||||||
|
|
||||||
when:
|
|
||||||
event: manual
|
|
||||||
branch: ${CI_REPO_DEFAULT_BRANCH}
|
|
||||||
|
|
||||||
depends_on:
|
|
||||||
- checks
|
|
||||||
|
|
||||||
steps:
|
|
||||||
install:
|
|
||||||
image: *node_image
|
|
||||||
commands:
|
|
||||||
- yarn install --immutable
|
|
||||||
release:
|
|
||||||
image: *node_image
|
|
||||||
commands:
|
|
||||||
- apt-get update
|
|
||||||
- apt-get install --yes jq
|
|
||||||
- export REPOSITORY_URL=$(echo "${CI_REPO_CLONE_URL}" | sed -e "s|://|://$${FORGE_TOKEN_NAME}:$${FORGE_TOKEN}@|g")
|
|
||||||
- git remote set-url origin $${REPOSITORY_URL}
|
|
||||||
- git config user.name woodpecker[bot]
|
|
||||||
- git config user.email woodpecker[bot]@${CI_SYSTEM_HOST}
|
|
||||||
- yarn bump-version --release=${RELEASE_TYPE}
|
|
||||||
- export RELEASE_VERSION=$(jq -r '.version' < package.json)
|
|
||||||
- yarn prettier --write package.json module.json
|
|
||||||
- git --no-pager diff
|
|
||||||
- git add package.json module.json
|
|
||||||
- 'git commit -m "chore(release): $${RELEASE_VERSION}"'
|
|
||||||
- git tag -f $${RELEASE_VERSION}
|
|
||||||
- git push origin ${CI_COMMIT_BRANCH}
|
|
||||||
- git push origin $${RELEASE_VERSION}
|
|
||||||
secrets:
|
|
||||||
- forge_token_name
|
|
||||||
- forge_token
|
|
77
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
Normal file
77
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
874
.yarn/releases/yarn-3.6.0.cjs
vendored
Executable file
874
.yarn/releases/yarn-3.6.0.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
934
.yarn/releases/yarn-4.5.1.cjs
vendored
934
.yarn/releases/yarn-4.5.1.cjs
vendored
File diff suppressed because one or more lines are too long
20
.yarn/sdks/eslint/lib/unsupported-api.js
vendored
20
.yarn/sdks/eslint/lib/unsupported-api.js
vendored
|
@ -1,20 +0,0 @@
|
||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
const {existsSync} = require(`fs`);
|
|
||||||
const {createRequire} = require(`module`);
|
|
||||||
const {resolve} = require(`path`);
|
|
||||||
|
|
||||||
const relPnpApiPath = "../../../../.pnp.cjs";
|
|
||||||
|
|
||||||
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
|
|
||||||
const absRequire = createRequire(absPnpApiPath);
|
|
||||||
|
|
||||||
if (existsSync(absPnpApiPath)) {
|
|
||||||
if (!process.versions.pnp) {
|
|
||||||
// Setup the environment to be able to require eslint/use-at-your-own-risk
|
|
||||||
require(absPnpApiPath).setup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Defer to the real eslint/use-at-your-own-risk your application uses
|
|
||||||
module.exports = absRequire(`eslint/use-at-your-own-risk`);
|
|
12
.yarn/sdks/eslint/package.json
vendored
12
.yarn/sdks/eslint/package.json
vendored
|
@ -1,14 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "eslint",
|
"name": "eslint",
|
||||||
"version": "8.52.0-sdk",
|
"version": "8.28.0-sdk",
|
||||||
"main": "./lib/api.js",
|
"main": "./lib/api.js",
|
||||||
"type": "commonjs",
|
"type": "commonjs"
|
||||||
"bin": {
|
|
||||||
"eslint": "./bin/eslint.js"
|
|
||||||
},
|
|
||||||
"exports": {
|
|
||||||
"./package.json": "./package.json",
|
|
||||||
".": "./lib/api.js",
|
|
||||||
"./use-at-your-own-risk": "./lib/unsupported-api.js"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
20
.yarn/sdks/prettier/bin-prettier.js
vendored
20
.yarn/sdks/prettier/bin-prettier.js
vendored
|
@ -1,20 +0,0 @@
|
||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
const {existsSync} = require(`fs`);
|
|
||||||
const {createRequire} = require(`module`);
|
|
||||||
const {resolve} = require(`path`);
|
|
||||||
|
|
||||||
const relPnpApiPath = "../../../.pnp.cjs";
|
|
||||||
|
|
||||||
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
|
|
||||||
const absRequire = createRequire(absPnpApiPath);
|
|
||||||
|
|
||||||
if (existsSync(absPnpApiPath)) {
|
|
||||||
if (!process.versions.pnp) {
|
|
||||||
// Setup the environment to be able to require prettier/bin-prettier.js
|
|
||||||
require(absPnpApiPath).setup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Defer to the real prettier/bin-prettier.js your application uses
|
|
||||||
module.exports = absRequire(`prettier/bin-prettier.js`);
|
|
6
.yarn/sdks/prettier/index.js
vendored
Normal file → Executable file
6
.yarn/sdks/prettier/index.js
vendored
Normal file → Executable file
|
@ -11,10 +11,10 @@ const absRequire = createRequire(absPnpApiPath);
|
||||||
|
|
||||||
if (existsSync(absPnpApiPath)) {
|
if (existsSync(absPnpApiPath)) {
|
||||||
if (!process.versions.pnp) {
|
if (!process.versions.pnp) {
|
||||||
// Setup the environment to be able to require prettier
|
// Setup the environment to be able to require prettier/index.js
|
||||||
require(absPnpApiPath).setup();
|
require(absPnpApiPath).setup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Defer to the real prettier your application uses
|
// Defer to the real prettier/index.js your application uses
|
||||||
module.exports = absRequire(`prettier`);
|
module.exports = absRequire(`prettier/index.js`);
|
||||||
|
|
5
.yarn/sdks/prettier/package.json
vendored
5
.yarn/sdks/prettier/package.json
vendored
|
@ -1,7 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "prettier",
|
"name": "prettier",
|
||||||
"version": "2.8.8-sdk",
|
"version": "2.8.0-sdk",
|
||||||
"main": "./index.js",
|
"main": "./index.js",
|
||||||
"type": "commonjs",
|
"type": "commonjs"
|
||||||
"bin": "./bin-prettier.js"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
nodeLinker: pnp
|
nodeLinker: pnp
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-4.5.1.cjs
|
plugins:
|
||||||
|
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
||||||
|
spec: '@yarnpkg/plugin-interactive-tools'
|
||||||
|
|
||||||
enableGlobalCache: false
|
yarnPath: .yarn/releases/yarn-3.6.0.cjs
|
||||||
|
|
|
@ -7,12 +7,6 @@ SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
# Tickwerk
|
# Tickwerk
|
||||||
|
|
||||||
[![status-badge](https://ci.f3l.de/api/badges/10/status.svg)](https://ci.f3l.de/repos/10)
|
|
||||||
[![REUSE status](https://api.reuse.software/badge/git.f3l.de/dungeonslayers/tickwerk)](https://api.reuse.software/info/git.f3l.de/dungeonslayers/tickwerk)
|
|
||||||
[![Forge installs](https://img.shields.io/badge/dynamic/json?label=Forge%20Installs&query=package.installs&suffix=%25&url=https%3A%2F%2Fforge-vtt.com%2Fapi%2Fbazaar%2Fpackage%2Ftickwerk&colorB=4aa94a)](https://forge-vtt.com/bazaar#package=tickwerk)
|
|
||||||
[![Supported foundry versions](https://img.shields.io/endpoint?url=https://foundryshields.com/version?url=https://git.f3l.de/api/packages/dungeonslayers/generic/tickwerk/latest/module.json)](https://git.f3l.de/dungeonslayers/tickwerk)
|
|
||||||
[![Ko-fi](https://img.shields.io/badge/Ko--fi-ghostfvtt-00B9FE?logo=kofi)](https://ko-fi.com/ghostfvtt)
|
|
||||||
|
|
||||||
A tick based combat system for [Foundry Virtual Tabletop].
|
A tick based combat system for [Foundry Virtual Tabletop].
|
||||||
|
|
||||||
This module adjusts the combat to use ticks instead of rounds for tracking time.
|
This module adjusts the combat to use ticks instead of rounds for tracking time.
|
||||||
|
@ -25,7 +19,7 @@ To install and use the Tickwerk module for Foundry Virtual Tabletop,
|
||||||
find it in the list in the **Install Module** dialog on the Setup menu of the
|
find it in the list in the **Install Module** dialog on the Setup menu of the
|
||||||
application. Alternatively, paste the following Manifest URL in that dialog:
|
application. Alternatively, paste the following Manifest URL in that dialog:
|
||||||
|
|
||||||
https://git.f3l.de/api/packages/dungeonslayers/generic/tickwerk/latest/module.json
|
https://git.f3l.de/api/v4/projects/dungeonslayers%2Ftickwerk/packages/generic/tickwerk/latest/module.json
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"module": "es2022",
|
"module": "es2022",
|
||||||
"target": "ES2022",
|
"target": "ES2022"
|
||||||
"strict": true
|
|
||||||
},
|
},
|
||||||
"exclude": ["node_modules", "dist"],
|
"exclude": ["node_modules", "dist"],
|
||||||
"include": ["src", "client", "common"]
|
"include": ["src", "client", "common"]
|
||||||
|
|
34
module.json
34
module.json
|
@ -10,23 +10,22 @@
|
||||||
"ko-fi": "ghostfvtt"
|
"ko-fi": "ghostfvtt"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"license": "https://git.f3l.de/dungeonslayers/tickwerk/raw/tag/1.4.4/LICENSE.md",
|
"url": "https://git.f3l.de/dungeonslayers/tickwerk",
|
||||||
"readme": "https://git.f3l.de/dungeonslayers/tickwerk/raw/tag/1.4.4/README.md",
|
"license": "https://git.f3l.de/dungeonslayers/tickwerk/-/raw/1.3.0/LICENSE.md",
|
||||||
"bugs": "https://git.f3l.de/dungeonslayers/tickwerk/issues",
|
"readme": "https://git.f3l.de/dungeonslayers/tickwerk/-/raw/1.3.0/README.md",
|
||||||
"changelog": "https://git.f3l.de/dungeonslayers/tickwerk/releases/tag/1.4.4",
|
"bugs": "https://git.f3l.de/dungeonslayers/tickwerk/-/issues",
|
||||||
"version": "1.4.4",
|
"changelog": "https://git.f3l.de/dungeonslayers/tickwerk/-/releases/1.3.0",
|
||||||
"flags": {
|
"version": "1.3.0",
|
||||||
"hotReload": {
|
|
||||||
"extensions": ["css", "hbs", "json"],
|
|
||||||
"paths": ["templates", "styles", "lang"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10.290",
|
"minimum": "10.290",
|
||||||
"verified": "11"
|
"verified": "10"
|
||||||
},
|
},
|
||||||
"esmodules": ["tickwerk.js"],
|
"esmodules": [
|
||||||
"styles": ["styles/tickwerk.css"],
|
"tickwerk.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/tickwerk.css"
|
||||||
|
],
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
|
@ -39,8 +38,7 @@
|
||||||
"path": "lang/de.json"
|
"path": "lang/de.json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"manifest": "https://git.f3l.de/api/packages/dungeonslayers/generic/tickwerk/latest/module.json",
|
"manifest": "https://git.f3l.de/dungeonslayers/tickwerk/-/releases/permalink/latest/downloads/module.json",
|
||||||
"download": "https://git.f3l.de/dungeonslayers/tickwerk/releases/download/1.4.4/tickwerk.zip",
|
"download": "https://git.f3l.de/dungeonslayers/tickwerk/-/releases/1.3.0/downloads/module.zip",
|
||||||
"manifestPlusVersion": "1.2.0",
|
"manifestPlusVersion": "1.2.0"
|
||||||
"url": "https://git.f3l.de/dungeonslayers/tickwerk"
|
|
||||||
}
|
}
|
||||||
|
|
36
package.json
36
package.json
|
@ -2,7 +2,7 @@
|
||||||
"private": true,
|
"private": true,
|
||||||
"name": "tickwerk",
|
"name": "tickwerk",
|
||||||
"description": "A tick based combat system for Foundry Virtual Tabletop",
|
"description": "A tick based combat system for Foundry Virtual Tabletop",
|
||||||
"version": "1.4.4",
|
"version": "1.3.0",
|
||||||
"license": "https://git.f3l.de/dungeonslayers/tickwerk#licensing",
|
"license": "https://git.f3l.de/dungeonslayers/tickwerk#licensing",
|
||||||
"homepage": "https://git.f3l.de/dungeonslayers/tickwerk",
|
"homepage": "https://git.f3l.de/dungeonslayers/tickwerk",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
"url": "https://git.f3l.de/dungeonslayers/tickwerk"
|
"url": "https://git.f3l.de/dungeonslayers/tickwerk"
|
||||||
},
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://git.f3l.de/dungeonslayers/tickwerk/issues"
|
"url": "https://git.f3l.de/dungeonslayers/tickwerk/-/issues"
|
||||||
},
|
},
|
||||||
"contributors": [
|
"contributors": [
|
||||||
{
|
{
|
||||||
|
@ -29,30 +29,30 @@
|
||||||
"clean:link": "node ./tools/link-package.js --clean",
|
"clean:link": "node ./tools/link-package.js --clean",
|
||||||
"lint": "eslint --ext .js,.cjs,.mjs .",
|
"lint": "eslint --ext .js,.cjs,.mjs .",
|
||||||
"lint:fix": "eslint --ext .js,.cjs,.mjs --fix .",
|
"lint:fix": "eslint --ext .js,.cjs,.mjs --fix .",
|
||||||
"format": "prettier --write \"./**/*.(js|cjs|mjs|json|scss|yml|yaml)\"",
|
"format": "prettier --write \"./**/*.(js|cjs|mjs|json|scss|yml)\"",
|
||||||
"bump-version": "node ./tools/bump-version.js",
|
"bump-version": "node ./tools/bump-version.js",
|
||||||
"changelog": "conventional-changelog -p conventionalcommits -o CHANGELOG.md -r 2"
|
"changelog": "conventional-changelog -p conventionalcommits -o CHANGELOG.md -r 2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "19.5.0",
|
"@commitlint/cli": "17.6.5",
|
||||||
"@commitlint/config-conventional": "19.5.0",
|
"@commitlint/config-conventional": "17.6.5",
|
||||||
"@guanghechen/rollup-plugin-copy": "6.0.2",
|
"@guanghechen/rollup-plugin-copy": "5.0.1",
|
||||||
"@swc/core": "1.7.36",
|
"@swc/core": "1.3.62",
|
||||||
"conventional-changelog-cli": "5.0.0",
|
"conventional-changelog-cli": "2.2.2",
|
||||||
"conventional-changelog-conventionalcommits": "8.0.0",
|
"conventional-changelog-conventionalcommits": "5.0.0",
|
||||||
"eslint": "8.57.1",
|
"eslint": "8.42.0",
|
||||||
"eslint-config-prettier": "9.1.0",
|
"eslint-config-prettier": "8.8.0",
|
||||||
"eslint-plugin-prettier": "4.2.1",
|
"eslint-plugin-prettier": "4.2.1",
|
||||||
"fs-extra": "11.2.0",
|
"fs-extra": "11.1.1",
|
||||||
"npm-run-all": "4.1.5",
|
"npm-run-all": "4.1.5",
|
||||||
"prettier": "2.8.8",
|
"prettier": "2.8.8",
|
||||||
"rimraf": "6.0.1",
|
"rimraf": "5.0.1",
|
||||||
"rollup": "4.24.0",
|
"rollup": "3.23.0",
|
||||||
"rollup-plugin-styles": "4.0.0",
|
"rollup-plugin-styles": "4.0.0",
|
||||||
"rollup-plugin-swc3": "0.12.1",
|
"rollup-plugin-swc3": "0.8.2",
|
||||||
"sass": "1.62.1",
|
"sass": "1.63.2",
|
||||||
"semver": "7.6.3",
|
"semver": "7.5.1",
|
||||||
"yargs": "17.7.2"
|
"yargs": "17.7.2"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@4.5.1"
|
"packageManager": "yarn@3.6.0"
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ const CombatantMixin = (BaseCombatant) => {
|
||||||
*/
|
*/
|
||||||
toggleWaiting() {
|
toggleWaiting() {
|
||||||
const update = { [`flags.${packageId}.waiting`]: !this.waiting };
|
const update = { [`flags.${packageId}.waiting`]: !this.waiting };
|
||||||
if (this.parent?.started && this.waiting) update.initiative = this.parent?.tickValue;
|
if (this.parent?.started && this.waiting) update.initiative = this.parent?.round;
|
||||||
return this.update(update);
|
return this.update(update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,8 +66,7 @@ const CombatantMixin = (BaseCombatant) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.update({ initiative: this.initiative + ticks });
|
await this.update({ initiative: this.initiative + ticks });
|
||||||
const tickTime = CONFIG.tickwerk?.tickTime;
|
const advanceTime = ticks * CONFIG.time.roundTime;
|
||||||
const advanceTime = tickTime !== undefined ? ticks * tickTime : undefined;
|
|
||||||
if (advanceTime !== 0) {
|
if (advanceTime !== 0) {
|
||||||
await this.combat?.update(undefined, { diff: false, advanceTime });
|
await this.combat?.update(undefined, { diff: false, advanceTime });
|
||||||
}
|
}
|
||||||
|
@ -112,16 +111,14 @@ const CombatantMixin = (BaseCombatant) => {
|
||||||
* @param {object} data The data of the creation / update
|
* @param {object} data The data of the creation / update
|
||||||
*/
|
*/
|
||||||
async #updateTiebreakerData(data) {
|
async #updateTiebreakerData(data) {
|
||||||
const waiting = data.flags?.[packageId]?.waiting;
|
if ('initiative' in data) {
|
||||||
if ('initiative' in data || waiting !== undefined) {
|
|
||||||
const newInitiative = data.initiative ?? this.initiative;
|
|
||||||
const combatantsWithSameTickValue =
|
const combatantsWithSameTickValue =
|
||||||
this.parent?.combatants.filter((combatant) => {
|
this.parent?.combatants.filter((combatant) => {
|
||||||
const otherInitiative =
|
const otherInitiative =
|
||||||
combatant._newInitiative !== undefined ? combatant._newInitiative : combatant.initiative;
|
combatant._newInitiative !== undefined ? combatant._newInitiative : combatant.initiative;
|
||||||
return otherInitiative === newInitiative && combatant !== this;
|
return otherInitiative === data.initiative;
|
||||||
}) ?? [];
|
}) ?? [];
|
||||||
const tiebreaker = await this.#getTiebreaker(combatantsWithSameTickValue, waiting);
|
const tiebreaker = await this.#getTiebreaker(combatantsWithSameTickValue);
|
||||||
foundry.utils.setProperty(data, `flags.${packageId}.tiebreaker`, tiebreaker);
|
foundry.utils.setProperty(data, `flags.${packageId}.tiebreaker`, tiebreaker);
|
||||||
this._newInitiative = data.initiative;
|
this._newInitiative = data.initiative;
|
||||||
this._newTiebreaker = tiebreaker;
|
this._newTiebreaker = tiebreaker;
|
||||||
|
@ -131,12 +128,11 @@ const CombatantMixin = (BaseCombatant) => {
|
||||||
/**
|
/**
|
||||||
* Get a tiebreaker between this combatant and the given other combatants.
|
* Get a tiebreaker between this combatant and the given other combatants.
|
||||||
* @param {TickwerkCombatant[]} combatants The other combatants among which to find a tiebreaker
|
* @param {TickwerkCombatant[]} combatants The other combatants among which to find a tiebreaker
|
||||||
* @param {boolean | undefined} waiting The change of the waiting state of the combatanmt
|
|
||||||
* @returns {Promise<number>} A promise that resolves to the tiebreaker
|
* @returns {Promise<number>} A promise that resolves to the tiebreaker
|
||||||
*/
|
*/
|
||||||
async #getTiebreaker(combatants, waiting) {
|
async #getTiebreaker(combatants) {
|
||||||
const getTiebreaker = CONFIG.tickwerk?.getTiebreaker ?? defaultGetTiebreaker;
|
const getTiebreaker = CONFIG.tickwerk?.getTiebreaker ?? defaultGetTiebreaker;
|
||||||
return getTiebreaker(this, combatants, waiting);
|
return getTiebreaker(this, combatants);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
|
@ -182,14 +178,14 @@ const CombatantMixin = (BaseCombatant) => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A function to get a tiebreaker for a combatant
|
* A function to get a tiebreaker for a combatant
|
||||||
* @typedef {(combatant: TickwerkCombatant, combatants: TickwerkCombatant[], waiting: boolean | undefined) => Promise<number>} GetTiebreaker
|
* @typedef {(combatant: TickwerkCombatant, combatants: TickwerkCombatant[]) => Promise<number>} GetTiebreaker
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default implementation to get a tiebreaker for a combatant.
|
* Default implementation to get a tiebreaker for a combatant.
|
||||||
* @type {GetTiebreaker}
|
* @type {GetTiebreaker}
|
||||||
*/
|
*/
|
||||||
export const defaultGetTiebreaker = async (combatant, combatants) => {
|
const defaultGetTiebreaker = async (combatant, combatants) => {
|
||||||
if (combatants.length === 0) return 0;
|
if (combatants.length === 0) return 0;
|
||||||
const tiebreakers = combatants.map((combatant) => {
|
const tiebreakers = combatants.map((combatant) => {
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -7,14 +7,14 @@ import { getGame } from '../helpers';
|
||||||
|
|
||||||
export const registerDS4SpecificFunctionality = () => {
|
export const registerDS4SpecificFunctionality = () => {
|
||||||
if (CONFIG.tickwerk === undefined) CONFIG.tickwerk = {};
|
if (CONFIG.tickwerk === undefined) CONFIG.tickwerk = {};
|
||||||
foundry.utils.mergeObject(CONFIG.tickwerk, { getTiebreaker, getInitiativeFormula, tickTime: 0.5 });
|
foundry.utils.mergeObject(CONFIG.tickwerk, { getTiebreaker, getInitiativeFormula });
|
||||||
|
|
||||||
registerRollItemSetting();
|
registerRollItemSetting();
|
||||||
Hooks.on('ds4.rollItem', onRollItem);
|
Hooks.on('ds4.rollItem', onRollItem);
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @type {import("../data/documents/combatant").GetTiebreaker} */
|
/** @type {import("../data/documents/combatant").GetTiebreaker} */
|
||||||
const getTiebreaker = async (combatant, combatants, waiting) => {
|
const getTiebreaker = async (combatant, combatants) => {
|
||||||
if (combatants.length === 0) return 0;
|
if (combatants.length === 0) return 0;
|
||||||
|
|
||||||
/** @type {number[]} */
|
/** @type {number[]} */
|
||||||
|
@ -26,7 +26,7 @@ const getTiebreaker = async (combatant, combatants, waiting) => {
|
||||||
|
|
||||||
for (const other of combatants) {
|
for (const other of combatants) {
|
||||||
const tiebreaker = other._newTiebreaker ?? other.getFlag(packageId, 'tiebreaker') ?? 0;
|
const tiebreaker = other._newTiebreaker ?? other.getFlag(packageId, 'tiebreaker') ?? 0;
|
||||||
if (getInitiative(other) > getInitiative(combatant) || waiting === false) {
|
if (getInitiative(other) > getInitiative(combatant)) {
|
||||||
lowerBounds.push(tiebreaker);
|
lowerBounds.push(tiebreaker);
|
||||||
} else if (getInitiative(other) < getInitiative(combatant)) {
|
} else if (getInitiative(other) < getInitiative(combatant)) {
|
||||||
upperBounds.push(tiebreaker);
|
upperBounds.push(tiebreaker);
|
||||||
|
@ -71,7 +71,7 @@ const getTiebreaker = async (combatant, combatants, waiting) => {
|
||||||
const getInitiativeFormula = (combatant) => {
|
const getInitiativeFormula = (combatant) => {
|
||||||
const started = combatant.combat?.started ?? false;
|
const started = combatant.combat?.started ?? false;
|
||||||
if (!started) return '-@combatValues.initiative.total';
|
if (!started) return '-@combatValues.initiative.total';
|
||||||
const tickValue = combatant.combat?.tickValue ?? 0;
|
const tickValue = combatant.combat?.round ?? 0;
|
||||||
return `max(${tickValue} + 10 - @combatValues.initiative.total, ${tickValue})`;
|
return `max(${tickValue} + 10 - @combatValues.initiative.total, ${tickValue})`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,21 +7,15 @@ import semver from 'semver';
|
||||||
import yargs from 'yargs';
|
import yargs from 'yargs';
|
||||||
import { hideBin } from 'yargs/helpers';
|
import { hideBin } from 'yargs/helpers';
|
||||||
|
|
||||||
const packageType = 'module';
|
const repository = 'dungeonslayers/tickwerk';
|
||||||
const repositoryOwner = process.env.CI_REPO_OWNER;
|
const gitlabURL = 'https://git.f3l.de';
|
||||||
const repositoryName = process.env.CI_REPO_NAME;
|
|
||||||
const repositoryURL = process.env.CI_REPO_URL;
|
|
||||||
const forgeURL = process.env.CI_FORGE_URL;
|
|
||||||
|
|
||||||
const getManifestUrl = (channel) =>
|
const getLicenseURL = (version) => `${gitlabURL}/${repository}/-/raw/${version}/LICENSE.md`;
|
||||||
`${forgeURL}/api/packages/${repositoryOwner}/generic/${repositoryName}/${channel}/${packageType}.json`;
|
const getReadmeURL = (version) => `${gitlabURL}/${repository}/-/raw/${version}/README.md`;
|
||||||
const getDownloadURL = (version) => `${repositoryURL}/releases/download/${version}/${repositoryName}.zip`;
|
const getChangelogURL = (version) => `${gitlabURL}/${repository}/-/releases/${version}`;
|
||||||
const bugsURL = `${repositoryURL}/issues`;
|
const getDownloadURL = (version) => `${gitlabURL}/${repository}/-/releases/${version}/downloads/module.zip`;
|
||||||
const getChangelogURL = (version) => `${repositoryURL}/releases/tag/${version}`;
|
|
||||||
const getReadmeURL = (version) => `${repositoryURL}/raw/tag/${version}/README.md`;
|
|
||||||
const getLicenseURL = (version) => `${repositoryURL}/raw/tag/${version}/LICENSE.md`;
|
|
||||||
|
|
||||||
const manifestPath = `${packageType}.json`;
|
const manifestPath = './module.json';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the contents of the manifest file as object.
|
* Get the contents of the manifest file as object.
|
||||||
|
@ -47,15 +41,6 @@ function getTargetVersion(currentVersion, release) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the channel for a given version.
|
|
||||||
* @param {string} version The version for which to get the channel
|
|
||||||
* @returns {"latest" | "beta"} The channel for the version
|
|
||||||
*/
|
|
||||||
function getChannel(version) {
|
|
||||||
return version.includes('-') ? 'beta' : 'latest';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update version and download URL.
|
* Update version and download URL.
|
||||||
* @param {semver.ReleaseType | string} release Either a semver release type or a valid semver version
|
* @param {semver.ReleaseType | string} release Either a semver release type or a valid semver version
|
||||||
|
@ -82,14 +67,11 @@ function bumpVersion(release) {
|
||||||
console.log(`Bumping version number to '${targetVersion}'`);
|
console.log(`Bumping version number to '${targetVersion}'`);
|
||||||
packageJson.version = targetVersion;
|
packageJson.version = targetVersion;
|
||||||
fs.writeJSONSync('package.json', packageJson, { spaces: 2 });
|
fs.writeJSONSync('package.json', packageJson, { spaces: 2 });
|
||||||
manifest.version = targetVersion;
|
|
||||||
manifest.url = repositoryURL;
|
|
||||||
manifest.manifest = getManifestUrl(getChannel(targetVersion));
|
|
||||||
manifest.download = getDownloadURL(targetVersion);
|
|
||||||
manifest.bugs = bugsURL;
|
|
||||||
manifest.changelog = getChangelogURL(targetVersion);
|
|
||||||
manifest.readme = getReadmeURL(targetVersion);
|
|
||||||
manifest.license = getLicenseURL(targetVersion);
|
manifest.license = getLicenseURL(targetVersion);
|
||||||
|
manifest.readme = getReadmeURL(targetVersion);
|
||||||
|
manifest.changelog = getChangelogURL(targetVersion);
|
||||||
|
manifest.version = targetVersion;
|
||||||
|
manifest.download = getDownloadURL(targetVersion);
|
||||||
fs.writeJSONSync(manifestPath, manifest, { spaces: 2 });
|
fs.writeJSONSync(manifestPath, manifest, { spaces: 2 });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue