explorata/src/components/Menu2dCA.vue

86 lines
2.2 KiB
Vue
Raw Normal View History

2022-12-21 23:45:22 +01:00
<script setup>
import MenuRow from "./MenuRow.vue";
import { globalStore } from "../stores/index.js";
import { preset2dRules } from "../modules/preset.js";
import { shallowRef } from "vue";
const store = globalStore();
const uploadedPicture = shallowRef(null);
const img = new Image();
// TODO : I have no idea why this works
const preparePicture = () => {
const file = uploadedPicture.value.files[0];
if (!file || file.type.indexOf("image/") !== 0) return;
if (FileReader && file) {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = (event) => {
img.onload = () => {
store.picture.width = img.width;
store.picture.height = img.height;
};
store.picture.src = event.target.result;
store.toggle2dDrawFromPicture();
};
reader.onerror = () => {
console.log(reader.error);
};
}
};
const update2dRules = (event) => {
const elem = event.target;
const id = elem.value;
const newRuleset = preset2dRules.find((ruleset) => {
return ruleset.id === id;
});
store.selected2dRules = newRuleset;
};
</script>
<template>
2022-12-04 18:47:20 +01:00
<MenuRow row-title="2D Cellular Automaton">
<div class="form-field">
2022-12-04 17:24:45 +01:00
<label>Start from empty board</label>
2022-12-02 17:11:34 +01:00
<input
type="button"
name="start2d"
2024-04-27 14:55:33 +02:00
value="▶"
2022-12-21 23:45:22 +01:00
@click="store.toggleDraw2d()"
2022-12-02 17:11:34 +01:00
/>
2022-12-04 17:24:45 +01:00
</div>
<div class="form-field">
<label>Start from last result</label>
2024-04-27 14:55:33 +02:00
<input type="button" value="▶" @click="store.toggleDraw2dLast()" />
</div>
2022-12-05 12:50:52 +01:00
<div class="form-field">
<label>Start from picture</label><br />
2022-12-21 23:45:22 +01:00
<input ref="uploadedPicture" type="file" @change="preparePicture" />
2022-12-05 12:50:52 +01:00
</div>
2022-12-15 16:18:57 +01:00
<div class="form-field">
<label>
Rules
<br />
<select
name="preset2dRules"
2022-12-21 23:45:22 +01:00
:value="store.selected2dRules.id"
2022-12-15 16:18:57 +01:00
@input="update2dRules"
>
<option
v-for="(state, index) in preset2dRules"
:key="'initial-state-elementary' + index"
:value="state.id"
>
{{ state.name }}
</option>
</select>
</label>
</div>
</MenuRow>
</template>