Skip to content

Commit a374deb

Browse files
committed
Add LogicVector3Receiver component
1 parent dd0f8c8 commit a374deb

8 files changed

+338
-0
lines changed

docs/LogicVector3ReceiverComponent.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# Class: `LogicVector3ReceiverComponent`
2+
3+
- [Types](#types)
4+
- [`<ComponentProps>`](#componentprops)
5+
- [`<LogicVector3ReceiverComponentProps>`](#logicvector3receivercomponentprops)
6+
- [Constructors](#constructors)
7+
- [`new LogicVector3ReceiverComponent(props)`](#new-logicvector3receivercomponentprops)
8+
- [`LogicVector3ReceiverComponent.fromBinary(reader, version)`](#logicvector3receivercomponentfrombinaryreader-version)
9+
- [Properties](#properties)
10+
- [`hash`](#hash)
11+
- [`name`](#name)
12+
- [`version`](#version)
13+
- [`sender`](#sender)
14+
- [Methods](#methods)
15+
- [`toBinary(version?)`](#tobinaryversion)
16+
- [`write(writer, version?)`](#writewriter-version)
17+
18+
## Types
19+
20+
### `<ComponentProps>`
21+
22+
See [`<ComponentProps>`](./Component.md#componentprops)
23+
24+
---
25+
26+
### `<LogicVector3ReceiverComponentProps>`
27+
28+
A portion of the configuration object to pass to the `LogicVector3ReceiverComponent` constructor.
29+
30+
```ts
31+
type LogicVector3ReceiverComponentPropsV1 = {
32+
sender?: number | undefined;
33+
};
34+
35+
type LogicVector3ReceiverComponentProps = LogicVector3ReceiverComponentPropsV1;
36+
```
37+
38+
#### Since v1
39+
40+
- `sender` (optional, default `0`) `<number>`
41+
42+
## Constructors
43+
44+
### `new LogicVector3ReceiverComponent(props)`
45+
46+
Creates a versioned `LogicVector3Receiver` component.
47+
48+
- `props` [`<ComponentProps & LogicVector3ReceiverComponentProps>`](#types) Configuration of the component to create.
49+
- Returns: `<LogicVector3ReceiverComponent>`
50+
51+
```ts
52+
import { LogicVector3ReceiverComponent } from 'att-string-transcoder';
53+
54+
const componentVersion = 1;
55+
const component = new LogicVector3ReceiverComponent({ version: componentVersion });
56+
```
57+
58+
---
59+
60+
### `LogicVector3ReceiverComponent.fromBinary(reader, version)`
61+
62+
See [`Component.fromBinary(reader, version)`](./Component.md#componentfrombinaryreader-version)
63+
64+
## Properties
65+
66+
Note that the following properties are sorted in order of appearance when decoding component binary data.
67+
68+
### `hash`
69+
70+
See [`Component.hash`](./Component.md#hash)
71+
72+
---
73+
74+
### `name`
75+
76+
See [`Component.name`](./Component.md#name)
77+
78+
---
79+
80+
### `version`
81+
82+
See [`Component.version`](./Component.md#version)
83+
84+
---
85+
86+
### `sender`
87+
88+
The identifier of the `LogicVector3Sender` that is connected to this `LogicVector3Receiver`.
89+
90+
- Since: `v1`
91+
- `<number>`
92+
93+
```ts
94+
import { LogicVector3ReceiverComponent } from 'att-string-transcoder';
95+
96+
const componentVersion = 1;
97+
const component = new LogicVector3ReceiverComponent({ version: componentVersion });
98+
99+
const sender = component.sender;
100+
// `sender` is `0`
101+
```
102+
103+
## Methods
104+
105+
### `toBinary(version?)`
106+
107+
See [`Component.toBinary(version?)`](./Component.md#tobinaryversion)
108+
109+
---
110+
111+
### `write(writer, version?)`
112+
113+
See [`Component.write(writer, version?)`](./Component.md#writewriter-version)

docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- [`LogicFloatReceiverComponent`](./LogicFloatReceiverComponent.md)
2323
- [`LogicGateReceiverComponent`](./LogicGateReceiverComponent.md)
2424
- [`LogicIntReceiverComponent`](./LogicIntReceiverComponent.md)
25+
- [`LogicVector3ReceiverComponent`](./LogicVector3ReceiverComponent.md)
2526
- [`NetworkRigidbodyComponent`](./NetworkRigidbodyComponent.md)
2627
- [`PhysicalMaterialPartComponent`](./PhysicalMaterialPartComponent.md)
2728
- [`PickupComponent`](./PickupComponent.md)
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
import { BinaryData } from '../BinaryData.js';
2+
import { BinaryReader } from '../BinaryReader.js';
3+
import { BinaryWriter } from '../BinaryWriter.js';
4+
import { Prefab } from '../Prefab.js';
5+
import { ComponentHash } from '../types/ComponentHash.js';
6+
7+
import { LogicVector3ReceiverComponent } from './LogicVector3ReceiverComponent.js';
8+
9+
const componentHash = ComponentHash.LogicVector3Receiver;
10+
const componentName = 'LogicVector3Receiver';
11+
const componentVersion = 1;
12+
const componentProps = {
13+
sender: 1337
14+
};
15+
16+
describe('new LogicVector3ReceiverComponent()', () => {
17+
describe('when given the required props', () => {
18+
it('returns an instance of the LogicVector3ReceiverComponent class', () => {
19+
const component = new LogicVector3ReceiverComponent({ version: componentVersion });
20+
21+
expect(component).toBeInstanceOf(LogicVector3ReceiverComponent);
22+
expect(component.hash).toStrictEqual(componentHash);
23+
expect(component.name).toStrictEqual(componentName);
24+
expect(component.version).toStrictEqual(componentVersion);
25+
});
26+
});
27+
28+
describe('when given additional props', () => {
29+
it('returns an instance of the LogicVector3ReceiverComponent class', () => {
30+
const component = new LogicVector3ReceiverComponent({ version: componentVersion, ...componentProps });
31+
32+
expect(component).toBeInstanceOf(LogicVector3ReceiverComponent);
33+
expect(component.hash).toStrictEqual(componentHash);
34+
expect(component.name).toStrictEqual(componentName);
35+
expect(component.version).toStrictEqual(componentVersion);
36+
expect(component.sender).toStrictEqual(componentProps.sender);
37+
});
38+
});
39+
});
40+
41+
describe('LogicVector3ReceiverComponent.fromBinary()', () => {
42+
let fastForwardedReader: BinaryReader;
43+
44+
const prefab = new Prefab('MRK_Small_Lever', {
45+
components: {
46+
LogicVector3Receiver: new LogicVector3ReceiverComponent({ version: componentVersion, ...componentProps })
47+
}
48+
});
49+
50+
beforeEach(() => {
51+
const saveString = prefab.toSaveString();
52+
const [dataString] = saveString.split('|');
53+
54+
if (typeof dataString === 'undefined') {
55+
throw new Error('Invalid test data.');
56+
}
57+
58+
const unsignedIntegers = dataString.split(',').map(Number);
59+
60+
const data = BinaryData.fromUnsignedIntegerArray(unsignedIntegers);
61+
const reader = new BinaryReader(data.toBinaryString());
62+
63+
reader.readUnsignedInteger(); // Root prefab hash.
64+
reader.readUnsignedInteger(); // SaveString bytes.
65+
reader.readUnsignedInteger(); // Parent prefab hash.
66+
reader.readFloat(); // Parent position X.
67+
reader.readFloat(); // Parent position Y.
68+
reader.readFloat(); // Parent position Z.
69+
reader.readFloat(); // Parent rotation X.
70+
reader.readFloat(); // Parent rotation Y.
71+
reader.readFloat(); // Parent rotation Z.
72+
reader.readFloat(); // Parent rotation W.
73+
reader.readFloat(); // Parent scale.
74+
reader.readUnsignedInteger(); // LogicVector3ReceiverComponent hash.
75+
reader.readUnsignedInteger(); // LogicVector3ReceiverComponent data length.
76+
77+
fastForwardedReader = reader;
78+
});
79+
80+
it('returns an instance of the LogicVector3ReceiverComponent class', () => {
81+
const component = LogicVector3ReceiverComponent.fromBinary(fastForwardedReader, componentVersion);
82+
83+
expect(component).toBeInstanceOf(LogicVector3ReceiverComponent);
84+
expect(component.hash).toStrictEqual(componentHash);
85+
expect(component.name).toStrictEqual(componentName);
86+
expect(component.version).toStrictEqual(componentVersion);
87+
expect(component.sender).toStrictEqual(componentProps.sender);
88+
});
89+
});
90+
91+
describe('LogicVector3ReceiverComponent.toBinary()', () => {
92+
it('returns a BinaryString representation of the component', () => {
93+
const component = new LogicVector3ReceiverComponent({ version: componentVersion, ...componentProps });
94+
95+
const data = component.toBinary();
96+
97+
const expectedData = '00000000000000000000010100111001';
98+
99+
expect(data).toStrictEqual(expectedData);
100+
});
101+
});
102+
103+
describe('LogicVector3ReceiverComponent.write()', () => {
104+
it('writes a BinaryString representation of the component to the given BinaryWriter, including component hash and data length', () => {
105+
const component = new LogicVector3ReceiverComponent({ version: componentVersion, ...componentProps });
106+
107+
const writer = new BinaryWriter();
108+
component.write(writer);
109+
110+
const data = writer.flush();
111+
112+
const expectedData =
113+
'010010010011101000000100110110010000000000000000000000000010000000000000000000000000010100111001';
114+
115+
expect(data).toStrictEqual(expectedData);
116+
117+
const reader = new BinaryReader(data);
118+
119+
const hash = reader.readUnsignedInteger();
120+
reader.readUnsignedInteger(); // LogicVector3ReceiverComponent data length.
121+
const sender = reader.readUnsignedInteger();
122+
123+
expect(hash).toStrictEqual(componentHash);
124+
expect(sender).toStrictEqual(componentProps.sender);
125+
});
126+
});
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import type { BinaryReader } from '../BinaryReader.js';
2+
import type { BinaryString } from '../types/BinaryString.js';
3+
4+
import { BinaryWriter } from '../BinaryWriter.js';
5+
import { ComponentHash } from '../types/ComponentHash.js';
6+
7+
import { Component, type ComponentProps } from './Component.js';
8+
9+
type LogicVector3ReceiverComponentPropsV1 = {
10+
sender?: number | undefined;
11+
};
12+
13+
export type LogicVector3ReceiverComponentProps = LogicVector3ReceiverComponentPropsV1;
14+
15+
/**
16+
* @see [Class: `LogicVector3ReceiverComponent`](https://github.com/mdingena/att-string-transcoder/tree/main/docs/LogicVector3ReceiverComponent.md)
17+
* @since v3.0.0
18+
* @version 1
19+
*
20+
* @example
21+
* import { LogicVector3ReceiverComponent } from 'att-string-transcoder';
22+
*
23+
* const componentVersion = 1;
24+
* const component = new LogicVector3ReceiverComponent({ version: componentVersion });
25+
*/
26+
export class LogicVector3ReceiverComponent extends Component {
27+
/**
28+
* The identifier of the `LogicVector3Sender` that is connected to this `LogicVector3Receiver`.
29+
*
30+
* @since v1
31+
*
32+
* @example
33+
* import { LogicVector3ReceiverComponent } from 'att-string-transcoder';
34+
*
35+
* const componentVersion = 1;
36+
* const component = new LogicVector3ReceiverComponent({ version: componentVersion });
37+
*
38+
* const sender = component.sender;
39+
* // `sender` is `0`
40+
*/
41+
sender: number;
42+
43+
/**
44+
* @see [Class: `LogicVector3ReceiverComponent`](https://github.com/mdingena/att-string-transcoder/tree/main/docs/LogicVector3ReceiverComponent.md)
45+
* @since v3.0.0
46+
* @version 1
47+
*
48+
* @example
49+
* import { LogicVector3ReceiverComponent } from 'att-string-transcoder';
50+
*
51+
* const componentVersion = 1;
52+
* const component = new LogicVector3ReceiverComponent({ version: componentVersion });
53+
*/
54+
constructor({ version, sender }: ComponentProps & LogicVector3ReceiverComponentProps) {
55+
const hash = ComponentHash.LogicVector3Receiver;
56+
const name = 'LogicVector3Receiver';
57+
58+
super({ hash, name, version });
59+
60+
this.sender = sender ?? 0;
61+
}
62+
63+
static override fromBinary(reader: BinaryReader, version: number): LogicVector3ReceiverComponent {
64+
const props: ComponentProps & LogicVector3ReceiverComponentProps = { version };
65+
66+
/**
67+
* @property {number} sender
68+
* @since v1
69+
*/
70+
if (props.version >= 1) {
71+
props.sender = reader.readUnsignedInteger();
72+
}
73+
74+
return new LogicVector3ReceiverComponent(props);
75+
}
76+
77+
override toBinary(version = this.version): BinaryString {
78+
const writer = new BinaryWriter();
79+
80+
/**
81+
* @property {number} sender
82+
* @since v1
83+
*/
84+
if (version >= 1) {
85+
writer.writeUnsignedInteger(this.sender);
86+
}
87+
88+
return writer.flush();
89+
}
90+
}

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export type { LogicBoolReceiverComponentProps } from './components/LogicBoolRece
1313
export type { LogicFloatReceiverComponentProps } from './components/LogicFloatReceiverComponent.js';
1414
export type { LogicGateReceiverComponentProps } from './components/LogicGateReceiverComponent.js';
1515
export type { LogicIntReceiverComponentProps } from './components/LogicIntReceiverComponent.js';
16+
export type { LogicVector3ReceiverComponentProps } from './components/LogicVector3ReceiverComponent.js';
1617
export type { NetworkRigidbodyComponentProps } from './components/NetworkRigidbodyComponent.js';
1718
export type { PhysicalMaterialPartComponentProps } from './components/PhysicalMaterialPartComponent.js';
1819
export type { PickupComponentProps } from './components/PickupComponent.js';
@@ -70,6 +71,7 @@ export { LogicBoolReceiverComponent } from './components/LogicBoolReceiverCompon
7071
export { LogicFloatReceiverComponent } from './components/LogicFloatReceiverComponent.js';
7172
export { LogicGateReceiverComponent } from './components/LogicGateReceiverComponent.js';
7273
export { LogicIntReceiverComponent } from './components/LogicIntReceiverComponent.js';
74+
export { LogicVector3ReceiverComponent } from './components/LogicVector3ReceiverComponent.js';
7375
export { NetworkRigidbodyComponent } from './components/NetworkRigidbodyComponent.js';
7476
export { PhysicalMaterialPartComponent } from './components/PhysicalMaterialPartComponent.js';
7577
export { PickupComponent } from './components/PickupComponent.js';

src/supportedComponents.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { LogicBoolReceiverComponent } from './components/LogicBoolReceiverCompon
1111
import { LogicFloatReceiverComponent } from './components/LogicFloatReceiverComponent.js';
1212
import { LogicGateReceiverComponent } from './components/LogicGateReceiverComponent.js';
1313
import { LogicIntReceiverComponent } from './components/LogicIntReceiverComponent.js';
14+
import { LogicVector3ReceiverComponent } from './components/LogicVector3ReceiverComponent.js';
1415
import { NetworkRigidbodyComponent } from './components/NetworkRigidbodyComponent.js';
1516
import { PhysicalMaterialPartComponent } from './components/PhysicalMaterialPartComponent.js';
1617
import { PickupComponent } from './components/PickupComponent.js';
@@ -34,6 +35,7 @@ export const supportedComponents: Record<string, SupportedComponent> = {
3435
LogicFloatReceiver: LogicFloatReceiverComponent,
3536
LogicGateReceiver: LogicGateReceiverComponent,
3637
LogicIntReceiver: LogicIntReceiverComponent,
38+
LogicVector3Receiver: LogicVector3ReceiverComponent,
3739
NetworkRigidbody: NetworkRigidbodyComponent,
3840
PhysicalMaterialPart: PhysicalMaterialPartComponent,
3941
Pickup: PickupComponent,

src/types/SupportedComponent.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { LogicBoolReceiverComponent } from '../components/LogicBoolReceiverCompo
99
import { LogicFloatReceiverComponent } from '../components/LogicFloatReceiverComponent.js';
1010
import { LogicGateReceiverComponent } from '../components/LogicGateReceiverComponent.js';
1111
import { LogicIntReceiverComponent } from '../components/LogicIntReceiverComponent.js';
12+
import { LogicVector3ReceiverComponent } from '../components/LogicVector3ReceiverComponent.js';
1213
import { NetworkRigidbodyComponent } from '../components/NetworkRigidbodyComponent.js';
1314
import { PhysicalMaterialPartComponent } from '../components/PhysicalMaterialPartComponent.js';
1415
import { PickupComponent } from '../components/PickupComponent.js';
@@ -32,6 +33,7 @@ export type SupportedComponent =
3233
| typeof LogicFloatReceiverComponent
3334
| typeof LogicGateReceiverComponent
3435
| typeof LogicIntReceiverComponent
36+
| typeof LogicVector3ReceiverComponent
3537
| typeof NetworkRigidbodyComponent
3638
| typeof PhysicalMaterialPartComponent
3739
| typeof PickupComponent

0 commit comments

Comments
 (0)