refactor: remove FACTOR

This commit is contained in:
cha0s 2022-03-23 04:05:31 -05:00
parent 84a2ab5768
commit 8595b062fc
2 changed files with 25 additions and 7 deletions

View File

@ -3,14 +3,17 @@ import {StateProperty, Trait} from '@avocado/traits';
import {compose} from '@flecks/core'; import {compose} from '@flecks/core';
const decorate = compose( const decorate = compose(
StateProperty('domScaleX', {
track: true,
}),
StateProperty('domScaleY', {
track: true,
}),
StateProperty('parentNode', { StateProperty('parentNode', {
track: true, track: true,
}), }),
); );
// TODO...
const FACTOR = 5;
export default () => class DomNode extends decorate(Trait) { export default () => class DomNode extends decorate(Trait) {
#scheduledRuleApplication = true; #scheduledRuleApplication = true;
@ -25,6 +28,8 @@ export default () => class DomNode extends decorate(Trait) {
static defaultState() { static defaultState() {
return { return {
domScaleX: 1,
domScaleY: 1,
parentNode: null, parentNode: null,
}; };
} }
@ -64,6 +69,14 @@ export default () => class DomNode extends decorate(Trait) {
this.#scheduledRuleApplication = true; this.#scheduledRuleApplication = true;
}, },
domScaleXChanged: () => {
this.#scheduledRuleApplication = true;
},
domScaleYChanged: () => {
this.#scheduledRuleApplication = true;
},
parentNodeChanged: (oldParentNode, newParentNode) => { parentNodeChanged: (oldParentNode, newParentNode) => {
oldParentNode?.removeChild(this.entity.node); oldParentNode?.removeChild(this.entity.node);
newParentNode?.appendChild(this.entity.node); newParentNode?.appendChild(this.entity.node);
@ -79,7 +92,7 @@ export default () => class DomNode extends decorate(Trait) {
rotation, rotation,
visibleScale, visibleScale,
} = this.entity; } = this.entity;
const [x, y] = Vector.scale(position, FACTOR); const [x, y] = Vector.mul(position, [this.entity.domScaleX, this.entity.domScaleY]);
this.entity.node.style.transform = [ this.entity.node.style.transform = [
`translate(${x}px, ${y}px)`, `translate(${x}px, ${y}px)`,
`rotate(${360 * (rotation / (Math.PI * 2))}deg)`, `rotate(${360 * (rotation / (Math.PI * 2))}deg)`,

View File

@ -8,6 +8,7 @@ import {
} from '@flecks/react'; } from '@flecks/react';
const Room = ({ const Room = ({
domScale,
left, left,
room, room,
top, top,
@ -19,8 +20,10 @@ const Room = ({
} }
const onEntityAdded = async (entity) => { const onEntityAdded = async (entity) => {
if (entity.is('DomNode')) { if (entity.is('DomNode')) {
// eslint-disable-next-line no-param-reassign /* eslint-disable no-param-reassign */
[entity.domScaleX, entity.domScaleY] = domScale;
entity.parentNode = ref.current.querySelector('.entities'); entity.parentNode = ref.current.querySelector('.entities');
/* eslint-enable no-param-reassign */
} }
}; };
Object.values(room.entities).forEach(onEntityAdded); Object.values(room.entities).forEach(onEntityAdded);
@ -28,13 +31,13 @@ const Room = ({
return () => { return () => {
room.off('entityAdded', onEntityAdded); room.off('entityAdded', onEntityAdded);
}; };
}, [ref, room]); }, [domScale, ref, room]);
useEffect(() => { useEffect(() => {
if (!ref.current || !room) { if (!ref.current || !room) {
return; return;
} }
const entities = ref.current.querySelector('.entities'); const entities = ref.current.querySelector('.entities');
entities.style.transform = `translate(${left}px, ${top}px)`; entities.style.transform = `translate(${left * domScale[0]}px, ${top * domScale[1]}px)`;
}); });
return ( return (
<div <div
@ -51,6 +54,8 @@ Room.defaultProps = {
}; };
Room.propTypes = { Room.propTypes = {
// @todo Real prop type
domScale: PropTypes.arrayOf(PropTypes.number).isRequired,
left: PropTypes.number.isRequired, left: PropTypes.number.isRequired,
room: PropTypes.shape({ room: PropTypes.shape({
entities: PropTypes.shape({}), entities: PropTypes.shape({}),