Added notifications to actions

This commit is contained in:
thepaperpilot 2021-08-27 00:18:34 -05:00
parent 9313748f21
commit 029cd534b1
5 changed files with 49 additions and 16 deletions

15
package-lock.json generated
View file

@ -16,6 +16,7 @@
"vue-panzoom": "^1.1.6", "vue-panzoom": "^1.1.6",
"vue-sortable": "github:Netbel/vue-sortable#master-fix", "vue-sortable": "github:Netbel/vue-sortable#master-fix",
"vue-textarea-autosize": "^1.1.1", "vue-textarea-autosize": "^1.1.1",
"vue-toastification": "^2.0.0-rc.1",
"vue-transition-expand": "^0.1.0" "vue-transition-expand": "^0.1.0"
}, },
"devDependencies": { "devDependencies": {
@ -27325,6 +27326,14 @@
"deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
"hasInstallScript": true "hasInstallScript": true
}, },
"node_modules/vue-toastification": {
"version": "2.0.0-rc.1",
"resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.1.tgz",
"integrity": "sha512-hjauv/FyesNZdwcr5m1SCyvu1JmlB+Ts5bTptDLDmsYYlj6Oqv8NYakiElpCF+Abwkn9J/AChh6FwkTL1HOb7Q==",
"peerDependencies": {
"vue": "^3.0.2"
}
},
"node_modules/vue-transition-expand": { "node_modules/vue-transition-expand": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/vue-transition-expand/-/vue-transition-expand-0.1.0.tgz", "resolved": "https://registry.npmjs.org/vue-transition-expand/-/vue-transition-expand-0.1.0.tgz",
@ -41121,6 +41130,12 @@
} }
} }
}, },
"vue-toastification": {
"version": "2.0.0-rc.1",
"resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.1.tgz",
"integrity": "sha512-hjauv/FyesNZdwcr5m1SCyvu1JmlB+Ts5bTptDLDmsYYlj6Oqv8NYakiElpCF+Abwkn9J/AChh6FwkTL1HOb7Q==",
"requires": {}
},
"vue-transition-expand": { "vue-transition-expand": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/vue-transition-expand/-/vue-transition-expand-0.1.0.tgz", "resolved": "https://registry.npmjs.org/vue-transition-expand/-/vue-transition-expand-0.1.0.tgz",

View file

@ -16,6 +16,7 @@
"vue-panzoom": "^1.1.6", "vue-panzoom": "^1.1.6",
"vue-sortable": "github:Netbel/vue-sortable#master-fix", "vue-sortable": "github:Netbel/vue-sortable#master-fix",
"vue-textarea-autosize": "^1.1.1", "vue-textarea-autosize": "^1.1.1",
"vue-toastification": "^2.0.0-rc.1",
"vue-transition-expand": "^0.1.0" "vue-transition-expand": "^0.1.0"
}, },
"devDependencies": { "devDependencies": {

View file

@ -2,12 +2,14 @@
// which will allow us to use them in any template strings anywhere in the project // which will allow us to use them in any template strings anywhere in the project
import CollapseTransition from "@ivanv/vue-collapse-transition/src/CollapseTransition.vue"; import CollapseTransition from "@ivanv/vue-collapse-transition/src/CollapseTransition.vue";
import VueTextareaAutosize from "vue-textarea-autosize"; import { App } from "vue";
import Sortable from "vue-sortable";
import VueNextSelect from "vue-next-select"; import VueNextSelect from "vue-next-select";
import "vue-next-select/dist/index.css"; import "vue-next-select/dist/index.css";
import panZoom from "vue-panzoom"; import panZoom from "vue-panzoom";
import { App } from "vue"; import Sortable from "vue-sortable";
import VueTextareaAutosize from "vue-textarea-autosize";
import Toast from "vue-toastification";
import "vue-toastification/dist/index.css";
export function registerComponents(vue: App): void { export function registerComponents(vue: App): void {
/* from files */ /* from files */
@ -25,4 +27,5 @@ export function registerComponents(vue: App): void {
vue.use(Sortable); vue.use(Sortable);
vue.component("vue-select", VueNextSelect); vue.component("vue-select", VueNextSelect);
vue.use(panZoom); vue.use(panZoom);
vue.use(Toast);
} }

View file

@ -16,9 +16,12 @@ import { format, formatWhole } from "@/util/break_eternity";
import { camelToTitle } from "@/util/common"; import { camelToTitle } from "@/util/common";
import { getUniqueNodeID } from "@/util/features"; import { getUniqueNodeID } from "@/util/features";
import { computed, watch } from "vue"; import { computed, watch } from "vue";
import { useToast } from "vue-toastification";
import themes from "../themes"; import themes from "../themes";
import Main from "./Main.vue"; import Main from "./Main.vue";
const toast = useToast();
type ResourceNodeData = { type ResourceNodeData = {
resourceType: string; resourceType: string;
amount: DecimalSource; amount: DecimalSource;
@ -129,7 +132,7 @@ export type LogEntry = {
export type WeightedEvent = { export type WeightedEvent = {
event: () => LogEntry; event: () => LogEntry;
weight: number; weight: number | (() => number);
}; };
function createItem(resource: string, amount: DecimalSource, display?: string) { function createItem(resource: string, amount: DecimalSource, display?: string) {
@ -148,10 +151,7 @@ type Action = {
icon?: string; icon?: string;
fillColor?: string; fillColor?: string;
tooltip?: string; tooltip?: string;
events?: Array<{ events?: Array<WeightedEvent>;
event: () => LogEntry;
weight: number;
}>;
baseChanges?: Array<{ baseChanges?: Array<{
resource: string; resource: string;
amount: DecimalSource; amount: DecimalSource;
@ -254,11 +254,11 @@ const actions = {
resources.energy.amount = 50; resources.energy.amount = 50;
return { return {
description: "You had a very restless sleep filled with nightmares :(", description: "You had a very restless sleep filled with nightmares :(",
effectDescription: `50% <span style="color: ${resources.energy.color};">Energy</span>` effectDescription: `50% <span style="color: ${resources.energy.color};">Energy</span> `
}; };
}, },
weight() { weight() {
return Decimal.sub(100, resources.mental.amount || 100); return Decimal.sub(100, resources.mental.amount);
} }
}, },
{ {
@ -272,7 +272,7 @@ const actions = {
}; };
}, },
weight() { weight() {
return Decimal.sub(resources.mental.amount || 100, 75).max(5); return Decimal.sub(resources.mental.amount, 75).max(5);
} }
} }
], ],
@ -431,13 +431,22 @@ function getRandomEvent(events: WeightedEvent[]): LogEntry | null {
if (events.length === 0) { if (events.length === 0) {
return null; return null;
} }
const totalWeight = events.reduce((acc, curr) => acc + curr.weight, 0); const totalWeight = events.reduce((acc, curr) => {
const random = Math.random() * totalWeight; let weight = curr.weight;
if (typeof weight === "function") {
weight = weight();
}
return Decimal.add(acc, weight);
}, new Decimal(0));
const random = Decimal.times(Math.random(), totalWeight);
let weight = 0; let weight = new Decimal(0);
for (const outcome of events) { for (const outcome of events) {
weight += outcome.weight; weight = Decimal.add(
if (random <= weight) { weight,
typeof outcome.weight === "function" ? outcome.weight() : outcome.weight
);
if (Decimal.lte(random, weight)) {
return outcome.event(); return outcome.event();
} }
} }
@ -613,6 +622,7 @@ function performAction(id: string, action: Action, node: BoardNode) {
if (action.events) { if (action.events) {
const logEntry = getRandomEvent(action.events); const logEntry = getRandomEvent(action.events);
if (logEntry) { if (logEntry) {
toast.info(logEntry.description);
(node.data as ActionNodeData).log.push(logEntry); (node.data as ActionNodeData).log.push(logEntry);
} }
} }

View file

@ -62,3 +62,7 @@ a:hover,
ul { ul {
list-style-type: none; list-style-type: none;
} }
.Vue-Toastification__toast {
margin: unset;
}