Skip to content

Commit c84bd4c

Browse files
committed
Remove automatic texture size detection.
1 parent c6fd12b commit c84bd4c

File tree

9 files changed

+182
-33
lines changed

9 files changed

+182
-33
lines changed

src/lang/en.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ animated_java.project_settings.project_namespace.description: |-
5656
animated_java.project_settings.project_namespace.error.unset: |-
5757
Project Name cannot be empty
5858
59-
animated_java.project_settings.texture_size: Texture Size
60-
animated_java.project_settings.texture_size.description: |-
59+
animated_java.project_settings.project_resolution: Project Resolution
60+
animated_java.project_settings.project_resolution.description: |-
6161
The UV resolution of the Project.
6262
This should equal the resolution of the largest texture in your project.
6363

src/modelFormat.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,12 @@ export const ajCodec = new Blockbench.Codec('ajmodel', {
215215
}
216216
ajCodec.dispatchEvent('parse', { model, path })
217217
DFU.process(model)
218+
219+
if (model.resolution !== undefined) {
220+
Project.texture_width = model.resolution.width
221+
Project.texture_height = model.resolution.height
222+
}
223+
218224
loadAnimatedJavaProjectSettings(model)
219225
loadAnimatedJavaExporterSettings(model)
220226

@@ -229,11 +235,6 @@ export const ajCodec = new Blockbench.Codec('ajmodel', {
229235
if (model.overrides) {
230236
Project.overrides = model.overrides
231237
}
232-
if (model.resolution !== undefined) {
233-
Project.texture_width = model.resolution.width
234-
Project.texture_height = model.resolution.height
235-
}
236-
237238
if (model.textures) {
238239
model.textures.forEach((tex: Texture) => {
239240
const texCopy = new Texture(tex, tex.uuid).add(false)

src/mods/textureMod.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@ createBlockbenchMod(
1616
return x
1717
}
1818
// I'm lazy 🤪
19-
const interval = setInterval(() => {
20-
if (Format === ajModelFormat) {
21-
const maxTextureWidth = Texture.all.reduce(
22-
(max, texture) => Math.max(max, texture.width),
23-
0
24-
)
25-
Project!.texture_height = maxTextureWidth
26-
Project!.texture_width = maxTextureWidth
27-
}
28-
}, 1000)
19+
// const interval = setInterval(() => {
20+
// if (Format === ajModelFormat) {
21+
// const maxTextureWidth = Texture.all.reduce(
22+
// (max, texture) => Math.max(max, texture.width),
23+
// 0
24+
// )
25+
// Project!.texture_height = maxTextureWidth
26+
// Project!.texture_width = maxTextureWidth
27+
// }
28+
// }, 1000)
2929
return {
30-
interval,
30+
// interval,
3131
...context,
3232
}
3333
},
3434
context => {
35-
clearInterval(context.interval)
35+
// clearInterval(context.interval)
3636
Texture.prototype.remove = context.remove
3737
}
3838
)

src/projectSettings.ts

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import * as events from './events'
1313

1414
export interface IAnimatedJavaProjectSettings {
1515
project_namespace: Settings.InlineTextSetting
16-
// texture_size: Settings.DropdownSetting<number>
16+
project_resolution: Settings.DoubleNumberSetting
1717
rig_item: Settings.InlineTextSetting
1818
rig_item_model: Settings.InlineTextSetting
1919
rig_export_folder: Settings.FolderSetting
@@ -34,12 +34,12 @@ const TRANSLATIONS = {
3434
unset: translate('animated_java.project_settings.project_namespace.error.unset'),
3535
},
3636
},
37-
// texture_size: {
38-
// displayName: translate('animated_java.project_settings.texture_size'),
39-
// description: translate('animated_java.project_settings.texture_size.description').split(
40-
// '\n'
41-
// ),
42-
// },
37+
project_resolution: {
38+
displayName: translate('animated_java.project_settings.project_resolution'),
39+
description: translate(
40+
'animated_java.project_settings.project_resolution.description'
41+
).split('\n'),
42+
},
4343
rig_item: {
4444
displayName: translate('animated_java.project_settings.rig_item'),
4545
description: translate('animated_java.project_settings.rig_item.description').split('\n'),
@@ -148,6 +148,26 @@ export function getDefaultProjectSettings(): IAnimatedJavaProjectSettings {
148148
}
149149
),
150150

151+
project_resolution: new Settings.DoubleNumberSetting(
152+
{
153+
id: 'animated_java:project_settings/project_resolution',
154+
displayName: TRANSLATIONS.project_resolution.displayName,
155+
description: TRANSLATIONS.project_resolution.description,
156+
get defaultValue(): [number, number] {
157+
return [Project!.texture_width, Project!.texture_height]
158+
},
159+
min: 1,
160+
secondNumberLabel: 'x',
161+
docsLink: 'page:project_settings#project_resolution',
162+
},
163+
function onUpdate(setting) {
164+
Project!.texture_width = setting.numberA
165+
Project!.texture_height = setting.numberB
166+
console.log('Project resolution changed to', setting.value)
167+
Canvas.updateAllUVs()
168+
}
169+
),
170+
151171
rig_item: new Settings.InlineTextSetting(
152172
{
153173
id: 'animated_java:project_settings/rig_item',
@@ -365,10 +385,10 @@ export const projectSettingStructure: GUIStructure = [
365385
type: 'setting',
366386
settingId: _.project_namespace.id,
367387
},
368-
// {
369-
// type: 'setting',
370-
// settingId: _.texture_size.id,
371-
// },
388+
{
389+
type: 'setting',
390+
settingId: _.project_resolution.id,
391+
},
372392
],
373393
},
374394
{

src/settings.ts

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,12 @@ export class Setting<V, R = any> extends Subscribable<R> {
128128

129129
_onUpdate(forced = false) {
130130
if (this._updating) return
131-
if (!forced && this.lastValue === this.value) return
131+
if (!forced && this.value === this.lastValue) return
132+
// console.log('Updating setting', this.id, this.value)
132133
this._updating = true
133134
this.lastValue = this.value
134135
this.infoPopup = undefined
135136
if (this.onUpdate) this.onUpdate(this as unknown as R)
136-
console.log(this.subscribers)
137137
this.dispatch(this as unknown as R)
138138
this._updating = false
139139
}
@@ -199,6 +199,72 @@ export class NumberSetting extends Setting<number, NumberSetting> {
199199
}
200200
}
201201

202+
export class DoubleNumberSetting extends Setting<[number, number], DoubleNumberSetting> {
203+
min?: number
204+
max?: number
205+
step?: number
206+
snap?: boolean
207+
firstNumberLabel?: string
208+
secondNumberLabel?: string
209+
210+
constructor(
211+
options: ISettingOptions<[number, number]> & {
212+
min?: number
213+
max?: number
214+
step?: number
215+
snap?: boolean
216+
firstNumberLabel?: string
217+
secondNumberLabel?: string
218+
},
219+
onUpdate?: (setting: DoubleNumberSetting) => void,
220+
onInit?: (setting: DoubleNumberSetting) => void
221+
) {
222+
super(options, onUpdate, onInit)
223+
this.min = options.min
224+
this.max = options.max
225+
this.step = options.step
226+
this.snap = options.snap
227+
this.firstNumberLabel = options.firstNumberLabel
228+
this.secondNumberLabel = options.secondNumberLabel
229+
}
230+
231+
get numberA() {
232+
return this._value[0]
233+
}
234+
235+
set numberA(value: number) {
236+
this._value[0] = value
237+
this._onUpdate(true)
238+
}
239+
240+
get numberB() {
241+
return this._value[1]
242+
}
243+
244+
set numberB(value: number) {
245+
this._value[1] = value
246+
this._onUpdate(true)
247+
}
248+
249+
_onUpdate(forced = false) {
250+
if (isNaN(this._value[0])) this._value[0] = this.defaultValue[0]
251+
if (isNaN(this._value[1])) this._value[1] = this.defaultValue[1]
252+
if (this.step && this.snap) {
253+
this._value[0] = Math.round(this._value[0] / this.step) * this.step
254+
this._value[1] = Math.round(this._value[1] / this.step) * this.step
255+
}
256+
this._value[0] = Math.min(
257+
Math.max(this._value[0], this.min ?? -Infinity),
258+
this.max ?? Infinity
259+
)
260+
this._value[1] = Math.min(
261+
Math.max(this._value[1], this.min ?? -Infinity),
262+
this.max ?? Infinity
263+
)
264+
super._onUpdate(forced)
265+
}
266+
}
267+
202268
export class DropdownSetting<V = any, K extends number = number> extends Setting<
203269
K,
204270
DropdownSetting<V, K>

src/ui/components/setting.svelte

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import Dropdown from './settings/dropdown.svelte'
99
import File from './settings/file.svelte'
1010
import Folder from './settings/folder.svelte'
11+
import DoubleNumber from './settings/doubleNumber.svelte'
1112
1213
export let setting: AJ.Setting<any>
1314
</script>
@@ -26,6 +27,8 @@
2627
<Folder {setting} />
2728
{:else if setting instanceof AJ.NumberSetting}
2829
<Number {setting} />
30+
{:else if setting instanceof AJ.DoubleNumberSetting}
31+
<DoubleNumber {setting} />
2932
{:else if setting instanceof AJ.InlineTextSetting}
3033
<TextInline {setting} />
3134
{:else}

src/ui/components/settingNode.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<script lang="ts">
88
import { fly, slide } from '../util/accessability'
9-
import type { AnyGUIElement } from '../../GUIStructure'
9+
import type { AnyGUIElement } from '../../guiStructure'
1010
import * as AJ from '../../settings'
1111
import Setting from './setting.svelte'
1212
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<script lang="ts">
2+
import type * as AJ from '../../../settings'
3+
import SettingContainer from '../settingContainer.svelte'
4+
5+
export let setting: AJ.DoubleNumberSetting
6+
//
7+
</script>
8+
9+
<SettingContainer {setting}>
10+
<div class="container" slot="inline">
11+
{#if setting.firstNumberLabel}
12+
<div class="label">{setting.firstNumberLabel}</div>
13+
{/if}
14+
<input type="number" step={setting.step} bind:value={setting.numberA} />
15+
{#if setting.secondNumberLabel}
16+
<div class="label">{setting.secondNumberLabel}</div>
17+
{/if}
18+
<input type="number" step={setting.step} bind:value={setting.numberB} />
19+
</div>
20+
</SettingContainer>
21+
22+
<style>
23+
.container {
24+
display: flex;
25+
align-items: center;
26+
}
27+
28+
.label {
29+
margin: 0px 10px;
30+
}
31+
32+
input[type='number'] {
33+
border: none;
34+
background: var(--color-button);
35+
display: inline-block;
36+
text-align: center;
37+
vertical-align: middle;
38+
cursor: default;
39+
outline: none;
40+
height: 34px;
41+
width: 6em;
42+
color: var(--color-text);
43+
padding-right: 16px;
44+
padding-left: 16px;
45+
font-weight: normal;
46+
cursor: text;
47+
text-align: left;
48+
}
49+
</style>

src/util/misc.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,14 @@ export function transposeMatrix(matrixArray: number[]) {
114114
]
115115
}
116116

117+
export function arrayEqual(a: any[], b: any[]): boolean {
118+
console.log(a, b)
119+
if (a.length !== b.length) return false
120+
return a.every((v, i) => {
121+
const bi = b[i]
122+
if (Array.isArray(v) && Array.isArray(bi)) return arrayEqual(v, bi)
123+
return v === bi
124+
})
125+
}
126+
117127
export class ExpectedError extends Error {}

0 commit comments

Comments
 (0)