Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84afc199fa | ||
|
|
fecbefc15c | ||
|
|
a9e546a121 | ||
|
|
98220921bd | ||
|
|
42750356b5 | ||
|
|
753a34abd5 | ||
|
|
020ede82b6 | ||
|
|
25de3bf08e | ||
|
|
67573fad26 | ||
|
|
1b7d6af7f5 | ||
|
|
ff1ebef34f | ||
|
|
d4b780229d | ||
|
|
c718fb343d | ||
|
|
bed8e91bc0 | ||
|
|
2bed6aae4f | ||
|
|
94473ab1b0 | ||
|
|
454001cca8 | ||
|
|
58f32e3f51 | ||
|
|
a283969e4c | ||
|
|
a8db66b93e | ||
|
|
aa99788268 | ||
|
|
bca8e3374a | ||
|
|
c596b760cf | ||
|
|
f90de8a98b | ||
|
|
c5e692c051 | ||
|
|
525f9442c3 | ||
|
|
038981d7b1 | ||
|
|
8ce6a05710 | ||
|
|
1320e0a0ac | ||
|
|
b8ce13f1d2 | ||
|
|
69ff204c5d | ||
|
|
0fc023b75c | ||
|
|
52a76625a3 | ||
|
|
82e4ae8a81 | ||
|
|
1aefd5ba88 | ||
|
|
0b15fb02d2 |
@@ -0,0 +1,40 @@
|
|||||||
|
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||||
|
* text=auto
|
||||||
|
# Explicitly declare text files you want to always be normalized and converted
|
||||||
|
# to native line endings on checkout.
|
||||||
|
*.cs text diff=csharp
|
||||||
|
*.gd text
|
||||||
|
*.tscn text
|
||||||
|
*.tres text
|
||||||
|
*.json text
|
||||||
|
*.md text
|
||||||
|
*.xml text
|
||||||
|
*.yml text
|
||||||
|
*.yaml text
|
||||||
|
*.csproj text
|
||||||
|
*.sln text
|
||||||
|
# Declare files that will always have CRLF line endings on checkout.
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.ps1 text eol=crlf
|
||||||
|
# Denote all files that are truly binary and should not be modified.
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.ico binary
|
||||||
|
*.mov binary
|
||||||
|
*.mp4 binary
|
||||||
|
*.mp3 binary
|
||||||
|
*.wav binary
|
||||||
|
*.ogg binary
|
||||||
|
*.ttf binary
|
||||||
|
*.otf binary
|
||||||
|
*.woff binary
|
||||||
|
*.woff2 binary
|
||||||
|
*.eot binary
|
||||||
|
*.pdf binary
|
||||||
|
*.zip binary
|
||||||
|
*.7z binary
|
||||||
|
*.import binary
|
||||||
|
*.uid binary
|
||||||
|
*.glb filter=lfs diff=lfs merge=lfs -text
|
||||||
@@ -1,80 +1,80 @@
|
|||||||
name: Deploy Promiscuity Auth API
|
name: Deploy Promiscuity Auth API
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
workflow_dispatch: {}
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
|
|
||||||
env:
|
env:
|
||||||
IMAGE_NAME: promiscuity-auth:latest
|
IMAGE_NAME: promiscuity-auth:latest
|
||||||
IMAGE_TAR: /tmp/promiscuity-auth.tar
|
IMAGE_TAR: /tmp/promiscuity-auth.tar
|
||||||
# All nodes that might run the pod (control-plane + workers)
|
# All nodes that might run the pod (control-plane + workers)
|
||||||
NODES: "192.168.86.72 192.168.86.73 192.168.86.74"
|
NODES: "192.168.86.72 192.168.86.73 192.168.86.74"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Build Docker image
|
# Build Docker image
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Build Docker image
|
- name: Build Docker image
|
||||||
run: |
|
run: |
|
||||||
cd microservices/AuthApi
|
cd microservices/AuthApi
|
||||||
docker build -t "${IMAGE_NAME}" .
|
docker build -t "${IMAGE_NAME}" .
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Save image as TAR on runner
|
# Save image as TAR on runner
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Save Docker image to TAR
|
- name: Save Docker image to TAR
|
||||||
run: |
|
run: |
|
||||||
docker save "${IMAGE_NAME}" -o "${IMAGE_TAR}"
|
docker save "${IMAGE_NAME}" -o "${IMAGE_TAR}"
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Copy TAR to each Kubernetes node
|
# Copy TAR to each Kubernetes node
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Copy TAR to nodes
|
- name: Copy TAR to nodes
|
||||||
run: |
|
run: |
|
||||||
for node in ${NODES}; do
|
for node in ${NODES}; do
|
||||||
echo "Copying image tar to $node ..."
|
echo "Copying image tar to $node ..."
|
||||||
scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/promiscuity-auth.tar
|
scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/promiscuity-auth.tar
|
||||||
done
|
done
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Import image into containerd on each node
|
# Import image into containerd on each node
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Import image on nodes
|
- name: Import image on nodes
|
||||||
run: |
|
run: |
|
||||||
for node in ${NODES}; do
|
for node in ${NODES}; do
|
||||||
echo "Importing image on $node ..."
|
echo "Importing image on $node ..."
|
||||||
ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/promiscuity-auth.tar"
|
ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/promiscuity-auth.tar"
|
||||||
done
|
done
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# CLEANUP: delete TAR from nodes
|
# CLEANUP: delete TAR from nodes
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Clean TAR from nodes
|
- name: Clean TAR from nodes
|
||||||
run: |
|
run: |
|
||||||
for node in ${NODES}; do
|
for node in ${NODES}; do
|
||||||
echo "Removing image tar on $node ..."
|
echo "Removing image tar on $node ..."
|
||||||
ssh -o StrictHostKeyChecking=no hz@"$node" "rm -f /tmp/promiscuity-auth.tar"
|
ssh -o StrictHostKeyChecking=no hz@"$node" "rm -f /tmp/promiscuity-auth.tar"
|
||||||
done
|
done
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# CLEANUP: delete TAR from runner
|
# CLEANUP: delete TAR from runner
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Clean TAR on runner
|
- name: Clean TAR on runner
|
||||||
run: |
|
run: |
|
||||||
rm -f "${IMAGE_TAR}"
|
rm -f "${IMAGE_TAR}"
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Write kubeconfig from secret
|
# Write kubeconfig from secret
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Write kubeconfig from secret
|
- name: Write kubeconfig from secret
|
||||||
env:
|
env:
|
||||||
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
||||||
@@ -95,19 +95,19 @@ jobs:
|
|||||||
# Apply Kubernetes manifests
|
# Apply Kubernetes manifests
|
||||||
# (You create these files in your repo)
|
# (You create these files in your repo)
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Apply Auth deployment & service
|
- name: Apply Auth deployment & service
|
||||||
env:
|
env:
|
||||||
KUBECONFIG: /tmp/kube/config
|
KUBECONFIG: /tmp/kube/config
|
||||||
run: |
|
run: |
|
||||||
kubectl apply -f microservices/AuthApi/k8s/deployment.yaml -n promiscuity-auth
|
kubectl apply -f microservices/AuthApi/k8s/deployment.yaml -n promiscuity-auth
|
||||||
kubectl apply -f microservices/AuthApi/k8s/service.yaml -n promiscuity-auth
|
kubectl apply -f microservices/AuthApi/k8s/service.yaml -n promiscuity-auth
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Rollout restart & wait
|
# Rollout restart & wait
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Restart Auth deployment
|
- name: Restart Auth deployment
|
||||||
env:
|
env:
|
||||||
KUBECONFIG: /tmp/kube/config
|
KUBECONFIG: /tmp/kube/config
|
||||||
run: |
|
run: |
|
||||||
kubectl rollout restart deployment/promiscuity-auth -n promiscuity-auth
|
kubectl rollout restart deployment/promiscuity-auth -n promiscuity-auth
|
||||||
kubectl rollout status deployment/promiscuity-auth -n promiscuity-auth
|
kubectl rollout status deployment/promiscuity-auth -n promiscuity-auth
|
||||||
|
|||||||
@@ -1,80 +1,80 @@
|
|||||||
name: Deploy Promiscuity Character API
|
name: Deploy Promiscuity Character API
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
workflow_dispatch: {}
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
|
|
||||||
env:
|
env:
|
||||||
IMAGE_NAME: promiscuity-character:latest
|
IMAGE_NAME: promiscuity-character:latest
|
||||||
IMAGE_TAR: /tmp/promiscuity-character.tar
|
IMAGE_TAR: /tmp/promiscuity-character.tar
|
||||||
# All nodes that might run the pod (control-plane + workers)
|
# All nodes that might run the pod (control-plane + workers)
|
||||||
NODES: "192.168.86.72 192.168.86.73 192.168.86.74"
|
NODES: "192.168.86.72 192.168.86.73 192.168.86.74"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Build Docker image
|
# Build Docker image
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Build Docker image
|
- name: Build Docker image
|
||||||
run: |
|
run: |
|
||||||
cd microservices/CharacterApi
|
cd microservices/CharacterApi
|
||||||
docker build -t "${IMAGE_NAME}" .
|
docker build -t "${IMAGE_NAME}" .
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Save image as TAR on runner
|
# Save image as TAR on runner
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Save Docker image to TAR
|
- name: Save Docker image to TAR
|
||||||
run: |
|
run: |
|
||||||
docker save "${IMAGE_NAME}" -o "${IMAGE_TAR}"
|
docker save "${IMAGE_NAME}" -o "${IMAGE_TAR}"
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Copy TAR to each Kubernetes node
|
# Copy TAR to each Kubernetes node
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Copy TAR to nodes
|
- name: Copy TAR to nodes
|
||||||
run: |
|
run: |
|
||||||
for node in ${NODES}; do
|
for node in ${NODES}; do
|
||||||
echo "Copying image tar to $node ..."
|
echo "Copying image tar to $node ..."
|
||||||
scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/promiscuity-character.tar
|
scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/promiscuity-character.tar
|
||||||
done
|
done
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Import image into containerd on each node
|
# Import image into containerd on each node
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Import image on nodes
|
- name: Import image on nodes
|
||||||
run: |
|
run: |
|
||||||
for node in ${NODES}; do
|
for node in ${NODES}; do
|
||||||
echo "Importing image on $node ..."
|
echo "Importing image on $node ..."
|
||||||
ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/promiscuity-character.tar"
|
ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/promiscuity-character.tar"
|
||||||
done
|
done
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# CLEANUP: delete TAR from nodes
|
# CLEANUP: delete TAR from nodes
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Clean TAR from nodes
|
- name: Clean TAR from nodes
|
||||||
run: |
|
run: |
|
||||||
for node in ${NODES}; do
|
for node in ${NODES}; do
|
||||||
echo "Removing image tar on $node ..."
|
echo "Removing image tar on $node ..."
|
||||||
ssh -o StrictHostKeyChecking=no hz@"$node" "rm -f /tmp/promiscuity-character.tar"
|
ssh -o StrictHostKeyChecking=no hz@"$node" "rm -f /tmp/promiscuity-character.tar"
|
||||||
done
|
done
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# CLEANUP: delete TAR from runner
|
# CLEANUP: delete TAR from runner
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Clean TAR on runner
|
- name: Clean TAR on runner
|
||||||
run: |
|
run: |
|
||||||
rm -f "${IMAGE_TAR}"
|
rm -f "${IMAGE_TAR}"
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Write kubeconfig from secret
|
# Write kubeconfig from secret
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Write kubeconfig from secret
|
- name: Write kubeconfig from secret
|
||||||
env:
|
env:
|
||||||
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
||||||
@@ -94,19 +94,19 @@ jobs:
|
|||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Apply Kubernetes manifests
|
# Apply Kubernetes manifests
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Apply Character deployment & service
|
- name: Apply Character deployment & service
|
||||||
env:
|
env:
|
||||||
KUBECONFIG: /tmp/kube/config
|
KUBECONFIG: /tmp/kube/config
|
||||||
run: |
|
run: |
|
||||||
kubectl apply -f microservices/CharacterApi/k8s/deployment.yaml -n promiscuity-character
|
kubectl apply -f microservices/CharacterApi/k8s/deployment.yaml -n promiscuity-character
|
||||||
kubectl apply -f microservices/CharacterApi/k8s/service.yaml -n promiscuity-character
|
kubectl apply -f microservices/CharacterApi/k8s/service.yaml -n promiscuity-character
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Rollout restart & wait
|
# Rollout restart & wait
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
- name: Restart Character deployment
|
- name: Restart Character deployment
|
||||||
env:
|
env:
|
||||||
KUBECONFIG: /tmp/kube/config
|
KUBECONFIG: /tmp/kube/config
|
||||||
run: |
|
run: |
|
||||||
kubectl rollout restart deployment/promiscuity-character -n promiscuity-character
|
kubectl rollout restart deployment/promiscuity-character -n promiscuity-character
|
||||||
kubectl rollout status deployment/promiscuity-character -n promiscuity-character
|
kubectl rollout status deployment/promiscuity-character -n promiscuity-character
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
name: Deploy Promiscuity Crafting API
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: self-hosted
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: promiscuity-crafting:latest
|
||||||
|
IMAGE_TAR: /tmp/promiscuity-crafting.tar
|
||||||
|
NODES: "192.168.86.72 192.168.86.73 192.168.86.74"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build Docker image
|
||||||
|
run: |
|
||||||
|
cd microservices/CraftingApi
|
||||||
|
docker build -t "${IMAGE_NAME}" .
|
||||||
|
|
||||||
|
- name: Save Docker image to TAR
|
||||||
|
run: |
|
||||||
|
docker save "${IMAGE_NAME}" -o "${IMAGE_TAR}"
|
||||||
|
|
||||||
|
- name: Copy TAR to nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/promiscuity-crafting.tar
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Import image on nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/promiscuity-crafting.tar"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Clean TAR from nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
ssh -o StrictHostKeyChecking=no hz@"$node" "rm -f /tmp/promiscuity-crafting.tar"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Clean TAR on runner
|
||||||
|
run: |
|
||||||
|
rm -f "${IMAGE_TAR}"
|
||||||
|
|
||||||
|
- name: Write kubeconfig from secret
|
||||||
|
env:
|
||||||
|
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/kube
|
||||||
|
printf '%s\n' "$KUBECONFIG_CONTENT" > /tmp/kube/config
|
||||||
|
|
||||||
|
- name: Create namespace if missing
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl create namespace promiscuity-crafting --dry-run=client -o yaml | kubectl apply -f -
|
||||||
|
|
||||||
|
- name: Apply Crafting deployment & service
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl apply -f microservices/CraftingApi/k8s/deployment.yaml -n promiscuity-crafting
|
||||||
|
kubectl apply -f microservices/CraftingApi/k8s/service.yaml -n promiscuity-crafting
|
||||||
|
|
||||||
|
- name: Restart Crafting deployment
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl rollout restart deployment/promiscuity-crafting -n promiscuity-crafting
|
||||||
|
kubectl rollout status deployment/promiscuity-crafting -n promiscuity-crafting
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
name: Deploy Promiscuity Mail API
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: self-hosted
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: promiscuity-mail:latest
|
||||||
|
IMAGE_TAR: /tmp/promiscuity-mail.tar
|
||||||
|
NODES: "192.168.86.72 192.168.86.73 192.168.86.74"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build Docker image
|
||||||
|
run: |
|
||||||
|
cd microservices/MailApi
|
||||||
|
docker build -t "${IMAGE_NAME}" .
|
||||||
|
|
||||||
|
- name: Save Docker image to TAR
|
||||||
|
run: |
|
||||||
|
docker save "${IMAGE_NAME}" -o "${IMAGE_TAR}"
|
||||||
|
|
||||||
|
- name: Copy TAR to nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/promiscuity-mail.tar
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Import image on nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/promiscuity-mail.tar"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Clean TAR from nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
ssh -o StrictHostKeyChecking=no hz@"$node" "rm -f /tmp/promiscuity-mail.tar"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Clean TAR on runner
|
||||||
|
run: |
|
||||||
|
rm -f "${IMAGE_TAR}"
|
||||||
|
|
||||||
|
- name: Write kubeconfig from secret
|
||||||
|
env:
|
||||||
|
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/kube
|
||||||
|
printf '%s\n' "$KUBECONFIG_CONTENT" > /tmp/kube/config
|
||||||
|
|
||||||
|
- name: Create namespace if missing
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl create namespace promiscuity-mail --dry-run=client -o yaml | kubectl apply -f -
|
||||||
|
|
||||||
|
- name: Apply Mail deployment & service
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl apply -f microservices/MailApi/k8s/deployment.yaml -n promiscuity-mail
|
||||||
|
kubectl apply -f microservices/MailApi/k8s/service.yaml -n promiscuity-mail
|
||||||
|
|
||||||
|
- name: Restart Mail deployment
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl rollout restart deployment/promiscuity-mail -n promiscuity-mail
|
||||||
|
kubectl rollout status deployment/promiscuity-mail -n promiscuity-mail
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
name: Deploy Promiscuity World API
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: self-hosted
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: promiscuity-world:latest
|
||||||
|
IMAGE_TAR: /tmp/promiscuity-world.tar
|
||||||
|
NODES: "192.168.86.72 192.168.86.73 192.168.86.74"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build Docker image
|
||||||
|
run: |
|
||||||
|
cd microservices/WorldApi
|
||||||
|
docker build -t "${IMAGE_NAME}" .
|
||||||
|
|
||||||
|
- name: Save Docker image to TAR
|
||||||
|
run: |
|
||||||
|
docker save "${IMAGE_NAME}" -o "${IMAGE_TAR}"
|
||||||
|
|
||||||
|
- name: Copy TAR to nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
echo "Copying image tar to $node ..."
|
||||||
|
scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/promiscuity-world.tar
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Import image on nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
echo "Importing image on $node ..."
|
||||||
|
ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/promiscuity-world.tar"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Clean TAR from nodes
|
||||||
|
run: |
|
||||||
|
for node in ${NODES}; do
|
||||||
|
echo "Removing image tar on $node ..."
|
||||||
|
ssh -o StrictHostKeyChecking=no hz@"$node" "rm -f /tmp/promiscuity-world.tar"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Clean TAR on runner
|
||||||
|
run: |
|
||||||
|
rm -f "${IMAGE_TAR}"
|
||||||
|
|
||||||
|
- name: Write kubeconfig from secret
|
||||||
|
env:
|
||||||
|
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/kube
|
||||||
|
printf '%s\n' "$KUBECONFIG_CONTENT" > /tmp/kube/config
|
||||||
|
|
||||||
|
- name: Create namespace if missing
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl create namespace promiscuity-world --dry-run=client -o yaml | kubectl apply -f -
|
||||||
|
|
||||||
|
- name: Apply World deployment & service
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl apply -f microservices/WorldApi/k8s/deployment.yaml -n promiscuity-world
|
||||||
|
kubectl apply -f microservices/WorldApi/k8s/service.yaml -n promiscuity-world
|
||||||
|
|
||||||
|
- name: Restart World deployment
|
||||||
|
env:
|
||||||
|
KUBECONFIG: /tmp/kube/config
|
||||||
|
run: |
|
||||||
|
kubectl rollout restart deployment/promiscuity-world -n promiscuity-world
|
||||||
|
kubectl rollout status deployment/promiscuity-world -n promiscuity-world
|
||||||
@@ -1,27 +1,27 @@
|
|||||||
name: k8s smoke test
|
name: k8s smoke test
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Write kubeconfig from secret
|
- name: Write kubeconfig from secret
|
||||||
env:
|
env:
|
||||||
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
|
||||||
run: |
|
run: |
|
||||||
mkdir -p /tmp/kube
|
mkdir -p /tmp/kube
|
||||||
printf '%s\n' "$KUBECONFIG_CONTENT" > /tmp/kube/config
|
printf '%s\n' "$KUBECONFIG_CONTENT" > /tmp/kube/config
|
||||||
|
|
||||||
- name: Test kubectl connectivity
|
- name: Test kubectl connectivity
|
||||||
env:
|
env:
|
||||||
KUBECONFIG: /tmp/kube/config
|
KUBECONFIG: /tmp/kube/config
|
||||||
run: |
|
run: |
|
||||||
kubectl get nodes --kubeconfig "${KUBECONFIG}"
|
kubectl get nodes --kubeconfig "${KUBECONFIG}"
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
.aider*
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# Promiscuity - Project Overview
|
||||||
|
|
||||||
|
This project is a multi-layered application consisting of a Godot-based game and a backend powered by .NET microservices and MongoDB.
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
- `game/`: The Godot 4.5 game project.
|
||||||
|
- `microservices/`: ASP.NET Core 8.0 microservices providing backend logic (Auth, Character, Inventory, Locations, etc.).
|
||||||
|
- `.gitea/workflows/`: CI/CD pipelines for deploying microservices to Kubernetes.
|
||||||
|
|
||||||
|
## Core Mandates
|
||||||
|
|
||||||
|
- **Godot Development**: Follow guidelines in `game/GEMINI.md`.
|
||||||
|
- **Microservices Development**: Follow guidelines in `microservices/GEMINI.md`.
|
||||||
|
- **Infrastructure**: Deployment is handled via K8s. Dockerfiles are located in each microservice directory.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
- **Microservices**: Each microservice can be run individually or via the `micro-services.sln` solution file. They require a MongoDB instance (default: `mongodb://127.0.0.1:27017`).
|
||||||
|
- **Game**: Open `game/project.godot` in Godot Engine 4.5+.
|
||||||
|
|
||||||
|
## Shared Conventions
|
||||||
|
|
||||||
|
- **Naming**: Use PascalCase for C# (microservices) and snake_case for GDScript (game), as is idiomatic for each platform.
|
||||||
|
- **Documentation**: Maintain `DOCUMENTS.md` in microservice directories for API shapes and document models.
|
||||||
|
- **Communication**: The game communicates with microservices via HTTP/REST.
|
||||||
@@ -18,5 +18,7 @@
|
|||||||
- Sprint: Shift
|
- Sprint: Shift
|
||||||
- Interact (enter/exit car): E
|
- Interact (enter/exit car): E
|
||||||
- Flashlight: F
|
- Flashlight: F
|
||||||
|
- Radial command menu: Q
|
||||||
|
- Fireball: Shift + B
|
||||||
- Phone: Tab
|
- Phone: Tab
|
||||||
- Pause menu: Esc
|
- Pause menu: Esc
|
||||||
|
|||||||
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
@@ -0,0 +1,41 @@
|
|||||||
|
# Godot Game Development - GEMINI.md
|
||||||
|
|
||||||
|
This directory contains the Godot 4.5 game project for "Promiscuity".
|
||||||
|
|
||||||
|
## Core Mandates
|
||||||
|
|
||||||
|
- **Engine Version**: Godot 4.5 (Forward Plus).
|
||||||
|
- **Language**: GDScript is the primary scripting language. C# is enabled but used only when performance or specific library needs arise.
|
||||||
|
- **Naming Conventions**:
|
||||||
|
- Files/Folders: `snake_case.gd`, `snake_case.tscn`.
|
||||||
|
- Variables/Functions: `snake_case`.
|
||||||
|
- Constants: `SCREAMING_SNAKE_CASE`.
|
||||||
|
- Classes: `PascalCase`.
|
||||||
|
- **Autoloads**: Use the established singletons for global state and services:
|
||||||
|
- `AuthState`: JWT authentication and session.
|
||||||
|
- `CharacterService`: API calls for character management.
|
||||||
|
- `QuestManager`: Game quest progression.
|
||||||
|
- `DialogSystem`: UI dialog and interaction.
|
||||||
|
- **Node Paths**: Prefer `unique names` (%NodeName) or `@onready` variables for node references. Avoid fragile string paths.
|
||||||
|
|
||||||
|
## Asset Pipeline
|
||||||
|
|
||||||
|
- **Models**: Blender files (`.blend`) and GLB files are supported. Blender integration is preferred for easy editing.
|
||||||
|
- **Audio**: Use `.ogg` for music/loops and `.wav` for short sound effects.
|
||||||
|
- **UI**: Themes are stored in `themes/`. Adhere to established UI patterns.
|
||||||
|
|
||||||
|
## Project Organization
|
||||||
|
|
||||||
|
- `scenes/`: Scene files and associated scripts.
|
||||||
|
- `Characters/`: Player and NPC scenes.
|
||||||
|
- `Levels/`: Game world/environments.
|
||||||
|
- `UI/`: Menus, HUDs, and UI components.
|
||||||
|
- `assets/`: Raw assets (textures, models, audio).
|
||||||
|
- `addons/`: Third-party plugins (e.g., `simplegrasstextured`).
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
- **Signals**: Use signals for decoupled communication between nodes.
|
||||||
|
- **Resources**: Encapsulate data in custom `Resource` scripts for modularity.
|
||||||
|
- **Tool Scripts**: Use `@tool` carefully for editor-side logic.
|
||||||
|
- **Physics**: Use `_physics_process` for movement and interaction logic.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://mcipi7y664aq
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[plugin]
|
||||||
|
|
||||||
|
name="Godot MCP"
|
||||||
|
description="A plugin to enable communication between Godot Editor and Model Context Protocol (MCP) clients."
|
||||||
|
author="Your Name"
|
||||||
|
version="0.1.0"
|
||||||
|
script="plugin.gd"
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
# Structure for addons/godot_mcp/plugin.gd
|
||||||
|
@tool
|
||||||
|
extends EditorPlugin
|
||||||
|
|
||||||
|
const SERVER_PORT = 6400
|
||||||
|
var server: TCPServer = null
|
||||||
|
var active_connections = []
|
||||||
|
var command_handler
|
||||||
|
|
||||||
|
func _enter_tree():
|
||||||
|
# Initialize the plugin
|
||||||
|
print("Godot MCP Plugin activated")
|
||||||
|
|
||||||
|
# Create command handler
|
||||||
|
command_handler = preload("res://addons/godot_mcp/command_handler.gd").new()
|
||||||
|
command_handler.set_editor_plugin(self)
|
||||||
|
|
||||||
|
# Start the TCP server
|
||||||
|
server = TCPServer.new()
|
||||||
|
var error = server.listen(SERVER_PORT)
|
||||||
|
if error != OK:
|
||||||
|
push_error("Failed to start Godot MCP Server on port %d: %s" % [SERVER_PORT, error])
|
||||||
|
return
|
||||||
|
|
||||||
|
print("Godot MCP Server listening on port %d" % SERVER_PORT)
|
||||||
|
|
||||||
|
# Add UI
|
||||||
|
add_control_to_bottom_panel(
|
||||||
|
preload("res://addons/godot_mcp/ui/mcp_panel.tscn").instantiate(),
|
||||||
|
"MCP"
|
||||||
|
)
|
||||||
|
|
||||||
|
func _exit_tree():
|
||||||
|
# Clean up the plugin when disabled
|
||||||
|
if server:
|
||||||
|
server.stop()
|
||||||
|
server = null
|
||||||
|
|
||||||
|
for connection in active_connections:
|
||||||
|
if connection.get_status() == StreamPeerTCP.STATUS_CONNECTED:
|
||||||
|
connection.disconnect_from_host()
|
||||||
|
|
||||||
|
active_connections.clear()
|
||||||
|
|
||||||
|
# Remove UI
|
||||||
|
remove_control_from_bottom_panel(get_editor_interface().get_base_control().get_node("MCPPanel"))
|
||||||
|
print("Godot MCP Plugin deactivated")
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
# Check for new connections
|
||||||
|
if server and server.is_connection_available():
|
||||||
|
var connection = server.take_connection()
|
||||||
|
if connection:
|
||||||
|
active_connections.append(connection)
|
||||||
|
print("New MCP connection established")
|
||||||
|
|
||||||
|
# Process existing connections
|
||||||
|
var i = 0
|
||||||
|
while i < active_connections.size():
|
||||||
|
var connection = active_connections[i]
|
||||||
|
|
||||||
|
# Check connection status
|
||||||
|
if connection.get_status() != StreamPeerTCP.STATUS_CONNECTED:
|
||||||
|
active_connections.remove_at(i)
|
||||||
|
print("MCP connection closed")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Check for incoming messages
|
||||||
|
if connection.get_available_bytes() > 0:
|
||||||
|
var data = _read_message(connection)
|
||||||
|
if data.size() > 0:
|
||||||
|
# Process the command
|
||||||
|
var response = _process_command(data)
|
||||||
|
|
||||||
|
# Send the response
|
||||||
|
_send_message(connection, response)
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
func _read_message(connection):
|
||||||
|
# Read data from the connection
|
||||||
|
var data = PackedByteArray()
|
||||||
|
var bytes_available = connection.get_available_bytes()
|
||||||
|
|
||||||
|
if bytes_available > 0:
|
||||||
|
data = connection.get_data(bytes_available)[1]
|
||||||
|
|
||||||
|
# Attempt to parse as JSON
|
||||||
|
var json_string = data.get_string_from_utf8()
|
||||||
|
var json = JSON.new()
|
||||||
|
var error = json.parse(json_string)
|
||||||
|
|
||||||
|
if error == OK:
|
||||||
|
return json.get_data()
|
||||||
|
else:
|
||||||
|
print("Failed to parse JSON: ", json.get_error_message())
|
||||||
|
|
||||||
|
return {}
|
||||||
|
|
||||||
|
func _send_message(connection, data):
|
||||||
|
# Convert to JSON and send
|
||||||
|
var json_string = JSON.stringify(data)
|
||||||
|
connection.put_data(json_string.to_utf8_buffer())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _process_command(data):
|
||||||
|
# Process the command and return a response
|
||||||
|
if data == null or typeof(data) != TYPE_DICTIONARY:
|
||||||
|
return {
|
||||||
|
"status": "error",
|
||||||
|
"error": "Invalid command format. Expected a dictionary."
|
||||||
|
}
|
||||||
|
|
||||||
|
if not data.has("type") or not data.has("params"):
|
||||||
|
return {
|
||||||
|
"status": "error",
|
||||||
|
"error": "Invalid command format. Expected 'type' and 'params' fields."
|
||||||
|
}
|
||||||
|
|
||||||
|
var command_type = data["type"]
|
||||||
|
var params = data["params"]
|
||||||
|
|
||||||
|
if command_type == "ping":
|
||||||
|
return {"status": "success", "result": {"message": "pong"}}
|
||||||
|
|
||||||
|
# Forward to command handler
|
||||||
|
var result = command_handler.handle_command(command_type, params)
|
||||||
|
|
||||||
|
# Check if result is valid
|
||||||
|
if result == null:
|
||||||
|
return {
|
||||||
|
"status": "error",
|
||||||
|
"error": "Command handler returned null result"
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.has("error"):
|
||||||
|
return {"status": "error", "error": result.error}
|
||||||
|
else:
|
||||||
|
return {"status": "success", "result": result}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://ddfhkiyge45tn
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
# addons/godot_mcp/ui/mcp_panel.gd
|
||||||
|
@tool
|
||||||
|
extends Control
|
||||||
|
|
||||||
|
var status_label: Label
|
||||||
|
var port_field: SpinBox
|
||||||
|
var start_button: Button
|
||||||
|
var stop_button: Button
|
||||||
|
var log_display: TextEdit
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
# Set up references to UI elements
|
||||||
|
status_label = $VBoxContainer/StatusPanel/StatusLabel
|
||||||
|
port_field = $VBoxContainer/ConfigPanel/PortField
|
||||||
|
start_button = $VBoxContainer/ButtonPanel/StartButton
|
||||||
|
stop_button = $VBoxContainer/ButtonPanel/StopButton
|
||||||
|
log_display = $VBoxContainer/LogPanel/LogDisplay
|
||||||
|
|
||||||
|
# Initialize UI
|
||||||
|
port_field.value = 6400 # Default port
|
||||||
|
start_button.disabled = false
|
||||||
|
stop_button.disabled = true
|
||||||
|
|
||||||
|
# Connect signals
|
||||||
|
start_button.pressed.connect(_on_start_button_pressed)
|
||||||
|
stop_button.pressed.connect(_on_stop_button_pressed)
|
||||||
|
|
||||||
|
# Set initial status
|
||||||
|
update_status("Not running")
|
||||||
|
add_log_message("Godot MCP Plugin initialized")
|
||||||
|
|
||||||
|
func update_status(status_text: String, is_error: bool = false):
|
||||||
|
status_label.text = "Status: " + status_text
|
||||||
|
if is_error:
|
||||||
|
status_label.add_theme_color_override("font_color", Color(1, 0.3, 0.3))
|
||||||
|
else:
|
||||||
|
status_label.remove_theme_color_override("font_color")
|
||||||
|
|
||||||
|
func add_log_message(message: String):
|
||||||
|
var timestamp = Time.get_datetime_string_from_system()
|
||||||
|
log_display.text += "[" + timestamp + "] " + message + "\n"
|
||||||
|
log_display.scroll_vertical = log_display.get_line_count()
|
||||||
|
|
||||||
|
func _on_start_button_pressed():
|
||||||
|
# This function will be called from the plugin.gd script
|
||||||
|
# when the server is actually started
|
||||||
|
update_status("Running on port " + str(port_field.value))
|
||||||
|
start_button.disabled = true
|
||||||
|
stop_button.disabled = false
|
||||||
|
add_log_message("MCP Server started on port " + str(port_field.value))
|
||||||
|
|
||||||
|
func _on_stop_button_pressed():
|
||||||
|
# This function will be called from the plugin.gd script
|
||||||
|
# when the server is actually stopped
|
||||||
|
update_status("Stopped")
|
||||||
|
start_button.disabled = false
|
||||||
|
stop_button.disabled = true
|
||||||
|
add_log_message("MCP Server stopped")
|
||||||
|
|
||||||
|
# Function to be called from plugin.gd when a client connects
|
||||||
|
func on_client_connected():
|
||||||
|
add_log_message("Client connected")
|
||||||
|
update_status("Client connected")
|
||||||
|
|
||||||
|
# Function to be called from plugin.gd when a client disconnects
|
||||||
|
func on_client_disconnected():
|
||||||
|
add_log_message("Client disconnected")
|
||||||
|
update_status("Running (no clients)")
|
||||||
|
|
||||||
|
# Function to be called from plugin.gd when a command is received
|
||||||
|
func on_command_received(command_type, params):
|
||||||
|
add_log_message("Command received: " + command_type)
|
||||||
|
|
||||||
|
# Function to be called from plugin.gd when a response is sent
|
||||||
|
func on_response_sent(command_type, success):
|
||||||
|
var status = "Success" if success else "Failed"
|
||||||
|
add_log_message("Response sent for " + command_type + ": " + status)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://bqabyd7ce60u0
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://dxvt86ck6b2a4"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://addons/godot_mcp/ui/mcp_panel.gd" id="1_4g23r"]
|
||||||
|
|
||||||
|
[node name="MCPPanel" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_4g23r")
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="StatusPanel" type="PanelContainer" parent="VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="StatusLabel" type="Label" parent="VBoxContainer/StatusPanel"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Status: Not running"
|
||||||
|
|
||||||
|
[node name="ConfigPanel" type="PanelContainer" parent="VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/ConfigPanel"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="PortLabel" type="Label" parent="VBoxContainer/ConfigPanel/HBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Port:"
|
||||||
|
|
||||||
|
[node name="PortField" type="SpinBox" parent="VBoxContainer/ConfigPanel"]
|
||||||
|
layout_mode = 2
|
||||||
|
min_value = 1024.0
|
||||||
|
max_value = 65535.0
|
||||||
|
value = 6400.0
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="ButtonPanel" type="PanelContainer" parent="VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/ButtonPanel"]
|
||||||
|
layout_mode = 2
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="StartButton" type="Button" parent="VBoxContainer/ButtonPanel"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Start Server"
|
||||||
|
|
||||||
|
[node name="StopButton" type="Button" parent="VBoxContainer/ButtonPanel"]
|
||||||
|
layout_mode = 2
|
||||||
|
disabled = true
|
||||||
|
text = "Stop Server"
|
||||||
|
|
||||||
|
[node name="LogPanel" type="PanelContainer" parent="VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
|
||||||
|
[node name="LogDisplay" type="TextEdit" parent="VBoxContainer/LogPanel"]
|
||||||
|
layout_mode = 2
|
||||||
|
editable = false
|
||||||
|
wrap_mode = 1
|
||||||
@@ -12,4 +12,4 @@ _surfaces = [{
|
|||||||
"vertex_count": 8,
|
"vertex_count": 8,
|
||||||
"vertex_data": PackedByteArray("AAAAvwAAgD8AAAAAAAAAPwAAAAAAAAAAAAAAvwAAAAAAAAAAAAAAPwAAgD8AAAAAAAAAAAAAgD8AAAC/AAAAAAAAAAAAAAA/AAAAAAAAAAAAAAC/AAAAAAAAgD8AAAA//3//f////7//f/9/////v/9//3////+//3//f////78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//vw==")
|
"vertex_data": PackedByteArray("AAAAvwAAgD8AAAAAAAAAPwAAAAAAAAAAAAAAvwAAAAAAAAAAAAAAPwAAgD8AAAAAAAAAAAAAgD8AAAC/AAAAAAAAAAAAAAA/AAAAAAAAAAAAAAC/AAAAAAAAgD8AAAA//3//f////7//f/9/////v/9//3////+//3//f////78AAP9//3//vwAA/3//f/+/AAD/f/9//78AAP9//3//vw==")
|
||||||
}]
|
}]
|
||||||
metadata/GodotVersion = "4.5-stable (official)"
|
metadata/GodotVersion = "4.6.2-stable (official)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://deh0tfs84csxo
|
uid://deh0tfs84csxo
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://2juaclm8gc1n
|
uid://2juaclm8gc1n
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://cu72rjuvdnnx
|
uid://cu72rjuvdnnx
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://wckg68rm05vd
|
uid://wckg68rm05vd
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://dmpm4vrmag0ru
|
uid://dmpm4vrmag0ru
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://b1ddeyowx86m3
|
uid://b1ddeyowx86m3
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://usxgr64t746m
|
uid://usxgr64t746m
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://bk4wcnwns36qk
|
uid://bk4wcnwns36qk
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://cdfq5jjtnlcwg
|
uid://cdfq5jjtnlcwg
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://60a3gi7u2kf
|
uid://60a3gi7u2kf
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://cp54123dwlv7j
|
uid://cp54123dwlv7j
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://dii7jpdyaypc6
|
uid://dii7jpdyaypc6
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://ct0c3akkhiaf
|
uid://ct0c3akkhiaf
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://h3cmhcmf6wwy
|
uid://h3cmhcmf6wwy
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://bi3o8elbtqoni
|
uid://bi3o8elbtqoni
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://cvdyxro7g1dic
|
uid://cvdyxro7g1dic
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://bdx4su8bw3dmw
|
uid://bdx4su8bw3dmw
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://ch7elftpoqayg
|
uid://ch7elftpoqayg
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://c56hanl0enhx2
|
uid://c56hanl0enhx2
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://bdgbdmw2hh77q
|
uid://bdgbdmw2hh77q
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://c4damqkvtgm4i
|
uid://c4damqkvtgm4i
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://cdooqj4aiumdm
|
uid://cdooqj4aiumdm
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://cuplxuwag3dnn
|
uid://cuplxuwag3dnn
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://bpnki8vkbrrer
|
uid://bpnki8vkbrrer
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://brbm3okyt3jwq
|
uid://brbm3okyt3jwq
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://c4hxrek5kx6bn
|
uid://c4hxrek5kx6bn
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://brellka4w2k2s
|
uid://brellka4w2k2s
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
uid://bcnq5eix75v5b
|
uid://bcnq5eix75v5b
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
# weapon.gd
|
# weapon.gd
|
||||||
extends Resource
|
extends Resource
|
||||||
class_name iWeapon
|
class_name iWeapon
|
||||||
# This acts as an interface base class.
|
# This acts as an interface base class.
|
||||||
|
|
||||||
# --- Common Stats ---
|
# --- Common Stats ---
|
||||||
@export var weapon_name: String = "Unnamed Weapon"
|
@export var weapon_name: String = "Unnamed Weapon"
|
||||||
@export var damage: float = 10.0
|
@export var damage: float = 10.0
|
||||||
@export var attack_speed: float = 1.0 # attacks per second
|
@export var attack_speed: float = 1.0 # attacks per second
|
||||||
@export var range: float = 1.5 # meters; melee = short, ranged = long
|
@export var range: float = 1.5 # meters; melee = short, ranged = long
|
||||||
@export var knockback: float = 0.0
|
@export var knockback: float = 0.0
|
||||||
@export var stamina_cost: float = 5.0
|
@export var stamina_cost: float = 5.0
|
||||||
|
|
||||||
# --- Ranged‑specific Stats ---
|
# --- Ranged‑specific Stats ---
|
||||||
@export var projectile_scene: PackedScene # null for melee
|
@export var projectile_scene: PackedScene # null for melee
|
||||||
@export var projectile_speed: float = 20.0
|
@export var projectile_speed: float = 20.0
|
||||||
@export var ammo_type: String = "" # e.g. "arrows", "bullets"
|
@export var ammo_type: String = "" # e.g. "arrows", "bullets"
|
||||||
@export var ammo_per_shot: int = 1
|
@export var ammo_per_shot: int = 1
|
||||||
|
|
||||||
# --- Melee‑specific Stats ---
|
# --- Melee‑specific Stats ---
|
||||||
@export var swing_arc: float = 90.0 # degrees
|
@export var swing_arc: float = 90.0 # degrees
|
||||||
@export var hitbox_size: float = 1.0
|
@export var hitbox_size: float = 1.0
|
||||||
|
|
||||||
# --- Interface Methods ---
|
# --- Interface Methods ---
|
||||||
func attack(user):
|
func attack(user):
|
||||||
push_error("Weapon.attack() not implemented in subclass")
|
push_error("Weapon.attack() not implemented in subclass")
|
||||||
return null
|
return null
|
||||||
|
|
||||||
func can_attack(user) -> bool:
|
func can_attack(user) -> bool:
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
importer="scene"
|
importer="scene"
|
||||||
importer_version=1
|
importer_version=1
|
||||||
type="PackedScene"
|
type="PackedScene"
|
||||||
uid="uid://cpuebxqhtv72i"
|
uid="uid://bi13nqi11oqhx"
|
||||||
path="res://.godot/imported/humanFemale.glb-45dfb97e0f5fa98244d8cb6255565c65.scn"
|
path="res://.godot/imported/AshlingSwarmer.glb-69896cc28ddf5352ad63aa98f43893d5.scn"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://assets/models/humanFemale.glb"
|
source_file="res://assets/models/AshlingSwarmer.glb"
|
||||||
dest_files=["res://.godot/imported/humanFemale.glb-45dfb97e0f5fa98244d8cb6255565c65.scn"]
|
dest_files=["res://.godot/imported/AshlingSwarmer.glb-69896cc28ddf5352ad63aa98f43893d5.scn"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
@@ -48,6 +48,7 @@ blender/meshes/colors=false
|
|||||||
blender/meshes/uvs=true
|
blender/meshes/uvs=true
|
||||||
blender/meshes/normals=true
|
blender/meshes/normals=true
|
||||||
blender/meshes/export_geometry_nodes_instances=false
|
blender/meshes/export_geometry_nodes_instances=false
|
||||||
|
blender/meshes/gpu_instances=false
|
||||||
blender/meshes/tangents=true
|
blender/meshes/tangents=true
|
||||||
blender/meshes/skins=2
|
blender/meshes/skins=2
|
||||||
blender/meshes/export_bones_deforming_mesh_only=false
|
blender/meshes/export_bones_deforming_mesh_only=false
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
[gd_scene format=3 uid="uid://cuyws13lbkmxb"]
|
[gd_scene format=3 uid="uid://cuyws13lbkmxb"]
|
||||||
|
|
||||||
[node name="Test" type="Node2D"]
|
[node name="Test" type="Node2D"]
|
||||||
|
|||||||
|
After Width: | Height: | Size: 399 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bpcj2xno5aykg"
|
||||||
|
path="res://.godot/imported/ashling_swarmer_palette.png-c771be7c592755dce8c857fa3b76a603.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/textures/ashling_swarmer/ashling_swarmer_palette.png"
|
||||||
|
dest_files=["res://.godot/imported/ashling_swarmer_palette.png-c771be7c592755dce8c857fa3b76a603.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 280 KiB |
@@ -0,0 +1,41 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b2dmnrm3ubjon"
|
||||||
|
path.s3tc="res://.godot/imported/stolenFire.png-9d435c9f9f90cf5d2f3cecd0f57488a3.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/textures/stolenFire.png"
|
||||||
|
dest_files=["res://.godot/imported/stolenFire.png-9d435c9f9f90cf5d2f3cecd0f57488a3.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="font_data_dynamic"
|
||||||
|
type="FontFile"
|
||||||
|
uid="uid://dkyytyjkitgo1"
|
||||||
|
path="res://.godot/imported/Kenney Future Narrow.ttf-57fbfbed0b9138f4029d056011c6b8f6.fontdata"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/Font/Kenney Future Narrow.ttf"
|
||||||
|
dest_files=["res://.godot/imported/Kenney Future Narrow.ttf-57fbfbed0b9138f4029d056011c6b8f6.fontdata"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
Rendering=null
|
||||||
|
antialiasing=1
|
||||||
|
generate_mipmaps=false
|
||||||
|
disable_embedded_bitmaps=true
|
||||||
|
multichannel_signed_distance_field=false
|
||||||
|
msdf_pixel_range=8
|
||||||
|
msdf_size=48
|
||||||
|
allow_system_fallback=true
|
||||||
|
force_autohinter=false
|
||||||
|
modulate_color_glyphs=false
|
||||||
|
hinting=1
|
||||||
|
subpixel_positioning=4
|
||||||
|
keep_rounding_remainders=true
|
||||||
|
oversampling=0.0
|
||||||
|
Fallbacks=null
|
||||||
|
fallbacks=[]
|
||||||
|
Compress=null
|
||||||
|
compress=true
|
||||||
|
preload=[]
|
||||||
|
language_support={}
|
||||||
|
script_support={}
|
||||||
|
opentype_features={}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="font_data_dynamic"
|
||||||
|
type="FontFile"
|
||||||
|
uid="uid://bcyh4kjfid1q8"
|
||||||
|
path="res://.godot/imported/Kenney Future.ttf-15561a7257676cdae5ac337187c6d5e7.fontdata"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/Font/Kenney Future.ttf"
|
||||||
|
dest_files=["res://.godot/imported/Kenney Future.ttf-15561a7257676cdae5ac337187c6d5e7.fontdata"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
Rendering=null
|
||||||
|
antialiasing=1
|
||||||
|
generate_mipmaps=false
|
||||||
|
disable_embedded_bitmaps=true
|
||||||
|
multichannel_signed_distance_field=false
|
||||||
|
msdf_pixel_range=8
|
||||||
|
msdf_size=48
|
||||||
|
allow_system_fallback=true
|
||||||
|
force_autohinter=false
|
||||||
|
modulate_color_glyphs=false
|
||||||
|
hinting=1
|
||||||
|
subpixel_positioning=4
|
||||||
|
keep_rounding_remainders=true
|
||||||
|
oversampling=0.0
|
||||||
|
Fallbacks=null
|
||||||
|
fallbacks=[]
|
||||||
|
Compress=null
|
||||||
|
compress=true
|
||||||
|
preload=[]
|
||||||
|
language_support={}
|
||||||
|
script_support={}
|
||||||
|
opentype_features={}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
|
||||||
|
UI Pack (2.0)
|
||||||
|
|
||||||
|
Created/distributed by Kenney (www.kenney.nl)
|
||||||
|
Creation date: 12-06-2024
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
License: (Creative Commons Zero, CC0)
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
This content is free to use in personal, educational and commercial projects.
|
||||||
|
|
||||||
|
Support us by crediting Kenney or www.kenney.nl (this is not mandatory)
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Donate: http://support.kenney.nl
|
||||||
|
Patreon: http://patreon.com/kenney/
|
||||||
|
|
||||||
|
Follow on Twitter for updates:
|
||||||
|
After Width: | Height: | Size: 422 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://d0ooqyg6bluif"
|
||||||
|
path="res://.godot/imported/arrow_basic_e.png-e95f7d304ded3c1b7a3c7bede0962e41.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_basic_e.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_basic_e.png-e95f7d304ded3c1b7a3c7bede0962e41.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 378 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://w5xy4ju4vrcg"
|
||||||
|
path="res://.godot/imported/arrow_basic_e_small.png-0472a7f486a1b519b3002ea2b8e4561e.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_basic_e_small.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_basic_e_small.png-0472a7f486a1b519b3002ea2b8e4561e.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 391 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c3r7hd7e7htp7"
|
||||||
|
path="res://.godot/imported/arrow_basic_n.png-e33d204a68437f7453c2655728ee9aa7.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_basic_n.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_basic_n.png-e33d204a68437f7453c2655728ee9aa7.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 302 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b5g1jkhb3esa5"
|
||||||
|
path="res://.godot/imported/arrow_basic_n_small.png-618596af703a39472a2497fe7e926f31.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_basic_n_small.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_basic_n_small.png-618596af703a39472a2497fe7e926f31.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 414 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dq15fjscecvxb"
|
||||||
|
path="res://.godot/imported/arrow_basic_s.png-da72182431f06c46fb0e127ae105d553.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_basic_s.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_basic_s.png-da72182431f06c46fb0e127ae105d553.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 332 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bs1rxn3nsd55a"
|
||||||
|
path="res://.godot/imported/arrow_basic_s_small.png-5216153507fb39cbb855d8011b1be235.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_basic_s_small.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_basic_s_small.png-5216153507fb39cbb855d8011b1be235.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 402 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://yhpgtstmdcde"
|
||||||
|
path="res://.godot/imported/arrow_basic_w.png-5e9614c09e9ed9648f32f9dffe83c018.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_basic_w.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_basic_w.png-5e9614c09e9ed9648f32f9dffe83c018.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 399 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c8vne2f78mfb2"
|
||||||
|
path="res://.godot/imported/arrow_basic_w_small.png-b495cf34cc2402247fb56e412ea43c36.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_basic_w_small.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_basic_w_small.png-b495cf34cc2402247fb56e412ea43c36.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 566 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bdqn02p00fdkm"
|
||||||
|
path="res://.godot/imported/arrow_decorative_e.png-547157123387172990904202df3e3c12.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_decorative_e.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_decorative_e.png-547157123387172990904202df3e3c12.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 459 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://chcg5sac5pqmy"
|
||||||
|
path="res://.godot/imported/arrow_decorative_e_small.png-ae8aad6331c98f04ecad4c84b0e5730a.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_decorative_e_small.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_decorative_e_small.png-ae8aad6331c98f04ecad4c84b0e5730a.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 511 B |
@@ -0,0 +1,40 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://53bgcnfeww2p"
|
||||||
|
path="res://.godot/imported/arrow_decorative_n.png-1b89c12b4c81bcc0b315b91f963ee6be.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/ui/kenney_ui_pack/PNG/Blue/Default/arrow_decorative_n.png"
|
||||||
|
dest_files=["res://.godot/imported/arrow_decorative_n.png-1b89c12b4c81bcc0b315b91f963ee6be.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
|
After Width: | Height: | Size: 405 B |