Skip to content

Commit 73adf8c

Browse files
committed
Add LogicIntReceiver component
1 parent dec523b commit 73adf8c

File tree

7 files changed

+336
-0
lines changed

7 files changed

+336
-0
lines changed

docs/LogicIntReceiverComponent.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# Class: `LogicIntReceiverComponent`
2+
3+
- [Types](#types)
4+
- [`<ComponentProps>`](#componentprops)
5+
- [`<LogicIntReceiverComponentProps>`](#logicintreceivercomponentprops)
6+
- [Constructors](#constructors)
7+
- [`new LogicIntReceiverComponent(props)`](#new-logicintreceivercomponentprops)
8+
- [`LogicIntReceiverComponent.fromBinary(reader, version)`](#logicintreceivercomponentfrombinaryreader-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+
### `<LogicIntReceiverComponentProps>`
27+
28+
A portion of the configuration object to pass to the `LogicIntReceiverComponent` constructor.
29+
30+
```ts
31+
type LogicIntReceiverComponentPropsV1 = {
32+
sender?: number | undefined;
33+
};
34+
35+
type LogicIntReceiverComponentProps = LogicIntReceiverComponentPropsV1;
36+
```
37+
38+
#### Since v1
39+
40+
- `sender` (optional, default `0`) `<number>`
41+
42+
## Constructors
43+
44+
### `new LogicIntReceiverComponent(props)`
45+
46+
Creates a versioned `LogicIntReceiver` component.
47+
48+
- `props` [`<ComponentProps & LogicIntReceiverComponentProps>`](#types) Configuration of the component to create.
49+
- Returns: `<LogicIntReceiverComponent>`
50+
51+
```ts
52+
import { LogicIntReceiverComponent } from 'att-string-transcoder';
53+
54+
const componentVersion = 1;
55+
const component = new LogicIntReceiverComponent({ version: componentVersion });
56+
```
57+
58+
---
59+
60+
### `LogicIntReceiverComponent.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 `LogicIntSender` that is connected to this `LogicIntReceiver`.
89+
90+
- Since: `v1`
91+
- `<number>`
92+
93+
```ts
94+
import { LogicIntReceiverComponent } from 'att-string-transcoder';
95+
96+
const componentVersion = 1;
97+
const component = new LogicIntReceiverComponent({ version: componentVersion });
98+
99+
const sender = component.sender;
100+
// `sender` is `1`
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
@@ -20,6 +20,7 @@
2020
- [`LiquidContainerComponent`](./LiquidContainerComponent.md)
2121
- [`LogicBoolReceiverComponent`](./LogicBoolReceiverComponent.md)
2222
- [`LogicFloatReceiverComponent`](./LogicFloatReceiverComponent.md)
23+
- [`LogicIntReceiverComponent`](./LogicIntReceiverComponent.md)
2324
- [`NetworkRigidbodyComponent`](./NetworkRigidbodyComponent.md)
2425
- [`PhysicalMaterialPartComponent`](./PhysicalMaterialPartComponent.md)
2526
- [`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 { LogicIntReceiverComponent } from './LogicIntReceiverComponent.js';
8+
9+
const componentHash = ComponentHash.LogicIntReceiver;
10+
const componentName = 'LogicIntReceiver';
11+
const componentVersion = 1;
12+
const componentProps = {
13+
sender: 1337
14+
};
15+
16+
describe('new LogicIntReceiverComponent()', () => {
17+
describe('when given the required props', () => {
18+
it('returns an instance of the LogicIntReceiverComponent class', () => {
19+
const component = new LogicIntReceiverComponent({ version: componentVersion });
20+
21+
expect(component).toBeInstanceOf(LogicIntReceiverComponent);
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 LogicIntReceiverComponent class', () => {
30+
const component = new LogicIntReceiverComponent({ version: componentVersion, ...componentProps });
31+
32+
expect(component).toBeInstanceOf(LogicIntReceiverComponent);
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('LogicIntReceiverComponent.fromBinary()', () => {
42+
let fastForwardedReader: BinaryReader;
43+
44+
const prefab = new Prefab('Grass_Clump', {
45+
components: {
46+
LogicIntReceiver: new LogicIntReceiverComponent({ 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(); // LogicIntReceiverComponent hash.
75+
reader.readUnsignedInteger(); // LogicIntReceiverComponent data length.
76+
77+
fastForwardedReader = reader;
78+
});
79+
80+
it('returns an instance of the LogicIntReceiverComponent class', () => {
81+
const component = LogicIntReceiverComponent.fromBinary(fastForwardedReader, componentVersion);
82+
83+
expect(component).toBeInstanceOf(LogicIntReceiverComponent);
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('LogicIntReceiverComponent.toBinary()', () => {
92+
it('returns a BinaryString representation of the component', () => {
93+
const component = new LogicIntReceiverComponent({ 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('LogicIntReceiverComponent.write()', () => {
104+
it('writes a BinaryString representation of the component to the given BinaryWriter, including component hash and data length', () => {
105+
const component = new LogicIntReceiverComponent({ version: componentVersion, ...componentProps });
106+
107+
const writer = new BinaryWriter();
108+
component.write(writer);
109+
110+
const data = writer.flush();
111+
112+
const expectedData =
113+
'110111111001100100010011100010010000000000000000000000000010000000000000000000000000010100111001';
114+
115+
expect(data).toStrictEqual(expectedData);
116+
117+
const reader = new BinaryReader(data);
118+
119+
const hash = reader.readUnsignedInteger();
120+
reader.readUnsignedInteger(); // LogicIntReceiverComponent 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 LogicIntReceiverComponentPropsV1 = {
10+
sender?: number | undefined;
11+
};
12+
13+
export type LogicIntReceiverComponentProps = LogicIntReceiverComponentPropsV1;
14+
15+
/**
16+
* @see [Class: `LogicIntReceiverComponent`](https://github.com/mdingena/att-string-transcoder/tree/main/docs/LogicIntReceiverComponent.md)
17+
* @since v3.0.0
18+
* @version 1
19+
*
20+
* @example
21+
* import { LogicIntReceiverComponent } from 'att-string-transcoder';
22+
*
23+
* const componentVersion = 1;
24+
* const component = new LogicIntReceiverComponent({ version: componentVersion });
25+
*/
26+
export class LogicIntReceiverComponent extends Component {
27+
/**
28+
* The identifier of the `LogicIntSender` that is connected to this `LogicIntReceiver`.
29+
*
30+
* @since v1
31+
*
32+
* @example
33+
* import { LogicIntReceiverComponent } from 'att-string-transcoder';
34+
*
35+
* const componentVersion = 1;
36+
* const component = new LogicIntReceiverComponent({ version: componentVersion });
37+
*
38+
* const sender = component.sender;
39+
* // `sender` is `0`
40+
*/
41+
sender: number;
42+
43+
/**
44+
* @see [Class: `LogicIntReceiverComponent`](https://github.com/mdingena/att-string-transcoder/tree/main/docs/LogicIntReceiverComponent.md)
45+
* @since v3.0.0
46+
* @version 1
47+
*
48+
* @example
49+
* import { LogicIntReceiverComponent } from 'att-string-transcoder';
50+
*
51+
* const componentVersion = 1;
52+
* const component = new LogicIntReceiverComponent({ version: componentVersion });
53+
*/
54+
constructor({ version, sender }: ComponentProps & LogicIntReceiverComponentProps) {
55+
const hash = ComponentHash.LogicIntReceiver;
56+
const name = 'LogicIntReceiver';
57+
58+
super({ hash, name, version });
59+
60+
this.sender = sender ?? 1;
61+
}
62+
63+
static override fromBinary(reader: BinaryReader, version: number): LogicIntReceiverComponent {
64+
const props: ComponentProps & LogicIntReceiverComponentProps = { 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 LogicIntReceiverComponent(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/supportedComponents.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { HeatSourceBaseComponent } from './components/HeatSourceBaseComponent.js
99
import { LiquidContainerComponent } from './components/LiquidContainerComponent.js';
1010
import { LogicBoolReceiverComponent } from './components/LogicBoolReceiverComponent.js';
1111
import { LogicFloatReceiverComponent } from './components/LogicFloatReceiverComponent.js';
12+
import { LogicIntReceiverComponent } from './components/LogicIntReceiverComponent.js';
1213
import { NetworkRigidbodyComponent } from './components/NetworkRigidbodyComponent.js';
1314
import { PhysicalMaterialPartComponent } from './components/PhysicalMaterialPartComponent.js';
1415
import { PickupComponent } from './components/PickupComponent.js';
@@ -30,6 +31,7 @@ export const supportedComponents: Record<string, SupportedComponent> = {
3031
LiquidContainer: LiquidContainerComponent,
3132
LogicBoolReceiver: LogicBoolReceiverComponent,
3233
LogicFloatReceiver: LogicFloatReceiverComponent,
34+
LogicIntReceiver: LogicIntReceiverComponent,
3335
NetworkRigidbody: NetworkRigidbodyComponent,
3436
PhysicalMaterialPart: PhysicalMaterialPartComponent,
3537
Pickup: PickupComponent,

src/types/SupportedComponent.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { HeatSourceBaseComponent } from '../components/HeatSourceBaseComponent.j
77
import { LiquidContainerComponent } from '../components/LiquidContainerComponent.js';
88
import { LogicBoolReceiverComponent } from '../components/LogicBoolReceiverComponent.js';
99
import { LogicFloatReceiverComponent } from '../components/LogicFloatReceiverComponent.js';
10+
import { LogicIntReceiverComponent } from '../components/LogicIntReceiverComponent.js';
1011
import { NetworkRigidbodyComponent } from '../components/NetworkRigidbodyComponent.js';
1112
import { PhysicalMaterialPartComponent } from '../components/PhysicalMaterialPartComponent.js';
1213
import { PickupComponent } from '../components/PickupComponent.js';
@@ -28,6 +29,7 @@ export type SupportedComponent =
2829
| typeof LiquidContainerComponent
2930
| typeof LogicBoolReceiverComponent
3031
| typeof LogicFloatReceiverComponent
32+
| typeof LogicIntReceiverComponent
3133
| typeof NetworkRigidbodyComponent
3234
| typeof PhysicalMaterialPartComponent
3335
| typeof PickupComponent

src/types/SupportedPrefabComponents.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type { HeatSourceBaseComponent } from '../components/HeatSourceBaseCompon
77
import type { LiquidContainerComponent } from '../components/LiquidContainerComponent.js';
88
import type { LogicBoolReceiverComponent } from '../components/LogicBoolReceiverComponent.js';
99
import type { LogicFloatReceiverComponent } from '../components/LogicFloatReceiverComponent.js';
10+
import type { LogicIntReceiverComponent } from '../components/LogicIntReceiverComponent.js';
1011
import type { NetworkRigidbodyComponent } from '../components/NetworkRigidbodyComponent.js';
1112
import type { PhysicalMaterialPartComponent } from '../components/PhysicalMaterialPartComponent.js';
1213
import type { PickupComponent } from '../components/PickupComponent.js';
@@ -28,6 +29,7 @@ export type SupportedPrefabComponents = {
2829
LiquidContainer?: LiquidContainerComponent;
2930
LogicBoolReceiver?: LogicBoolReceiverComponent;
3031
LogicFloatReceiver?: LogicFloatReceiverComponent;
32+
LogicIntReceiver?: LogicIntReceiverComponent;
3133
NetworkRigidbody?: NetworkRigidbodyComponent;
3234
PhysicalMaterialPart?: PhysicalMaterialPartComponent;
3335
Pickup?: PickupComponent;

0 commit comments

Comments
 (0)