-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: subscription clauses #235
Changes from 11 commits
e5d7362
911f4df
91a7e75
4066fb7
8f4d697
c3f10ed
044e2a1
6dba611
32175e3
cc4e8e3
0d279f9
d0ae3fb
f3da58a
c126cd3
917d3a9
1ac2903
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,34 +1,78 @@ | ||||||||||||
import { AccountInterface } from "starknet"; | ||||||||||||
import { Entity, getComponentValue } from "@dojoengine/recs"; | ||||||||||||
import { | ||||||||||||
Entity, | ||||||||||||
Has, | ||||||||||||
HasValue, | ||||||||||||
World, | ||||||||||||
defineSystem, | ||||||||||||
getComponentValue, | ||||||||||||
} from "@dojoengine/recs"; | ||||||||||||
import { uuid } from "@latticexyz/utils"; | ||||||||||||
import { ClientComponents } from "./createClientComponents"; | ||||||||||||
import { Direction, updatePositionWithDirection } from "../utils"; | ||||||||||||
import { getEntityIdFromKeys } from "@dojoengine/utils"; | ||||||||||||
import { ContractComponents } from "./generated/contractComponents"; | ||||||||||||
import type { IWorld } from "./generated/generated"; | ||||||||||||
|
||||||||||||
export type SystemCalls = ReturnType<typeof createSystemCalls>; | ||||||||||||
|
||||||||||||
export function createSystemCalls( | ||||||||||||
{ client }: { client: IWorld }, | ||||||||||||
_contractComponents: ContractComponents, | ||||||||||||
{ Position, Moves }: ClientComponents | ||||||||||||
{ Position, Moves }: ClientComponents, | ||||||||||||
world: World | ||||||||||||
) { | ||||||||||||
const spawn = async (account: AccountInterface) => { | ||||||||||||
const entityId = getEntityIdFromKeys([ | ||||||||||||
BigInt(account.address), | ||||||||||||
]) as Entity; | ||||||||||||
|
||||||||||||
const movesId = uuid(); | ||||||||||||
Moves.addOverride(movesId, { | ||||||||||||
entity: entityId, | ||||||||||||
value: { | ||||||||||||
player: BigInt(entityId), | ||||||||||||
remaining: | ||||||||||||
(getComponentValue(Moves, entityId)?.remaining || 0) + 100, | ||||||||||||
}, | ||||||||||||
}); | ||||||||||||
|
||||||||||||
const positionId = uuid(); | ||||||||||||
Position.addOverride(positionId, { | ||||||||||||
entity: entityId, | ||||||||||||
value: { | ||||||||||||
player: BigInt(entityId), | ||||||||||||
vec: { | ||||||||||||
x: 10 + (getComponentValue(Position, entityId)?.vec.x || 0), | ||||||||||||
y: 10 + (getComponentValue(Position, entityId)?.vec.y || 0), | ||||||||||||
}, | ||||||||||||
}, | ||||||||||||
}); | ||||||||||||
|
||||||||||||
try { | ||||||||||||
const { transaction_hash } = await client.actions.spawn({ | ||||||||||||
await client.actions.spawn({ | ||||||||||||
account, | ||||||||||||
}); | ||||||||||||
|
||||||||||||
console.log( | ||||||||||||
await account.waitForTransaction(transaction_hash, { | ||||||||||||
retryInterval: 100, | ||||||||||||
}) | ||||||||||||
); | ||||||||||||
|
||||||||||||
await new Promise((resolve) => setTimeout(resolve, 1000)); | ||||||||||||
// Wait for the indexer to update the entity | ||||||||||||
// By doing this we keep the optimistic UI in sync with the actual state | ||||||||||||
await new Promise<void>((resolve) => { | ||||||||||||
defineSystem( | ||||||||||||
world, | ||||||||||||
[ | ||||||||||||
Has(Moves), | ||||||||||||
HasValue(Moves, { player: BigInt(account.address) }), | ||||||||||||
], | ||||||||||||
() => { | ||||||||||||
resolve(); | ||||||||||||
} | ||||||||||||
); | ||||||||||||
}); | ||||||||||||
} catch (e) { | ||||||||||||
console.log(e); | ||||||||||||
Position.removeOverride(positionId); | ||||||||||||
Moves.removeOverride(movesId); | ||||||||||||
} finally { | ||||||||||||
Position.removeOverride(positionId); | ||||||||||||
Moves.removeOverride(movesId); | ||||||||||||
Comment on lines
+74
to
+75
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove redundant finally clause. The finally clause that removes overrides is redundant if the catch clause already handles the removal. - } finally {
- Position.removeOverride(positionId);
- Moves.removeOverride(movesId);
|
||||||||||||
} | ||||||||||||
}; | ||||||||||||
|
||||||||||||
|
@@ -37,52 +81,57 @@ export function createSystemCalls( | |||||||||||
BigInt(account.address), | ||||||||||||
]) as Entity; | ||||||||||||
|
||||||||||||
// const positionId = uuid(); | ||||||||||||
// Position.addOverride(positionId, { | ||||||||||||
// entity: entityId, | ||||||||||||
// value: { | ||||||||||||
// player: BigInt(entityId), | ||||||||||||
// vec: updatePositionWithDirection( | ||||||||||||
// direction, | ||||||||||||
// getComponentValue(Position, entityId) as any | ||||||||||||
// ).vec, | ||||||||||||
// }, | ||||||||||||
// }); | ||||||||||||
// Update the state before the transaction | ||||||||||||
const positionId = uuid(); | ||||||||||||
Position.addOverride(positionId, { | ||||||||||||
entity: entityId, | ||||||||||||
value: { | ||||||||||||
player: BigInt(entityId), | ||||||||||||
vec: updatePositionWithDirection( | ||||||||||||
direction, | ||||||||||||
getComponentValue(Position, entityId) as any | ||||||||||||
).vec, | ||||||||||||
}, | ||||||||||||
}); | ||||||||||||
|
||||||||||||
// const movesId = uuid(); | ||||||||||||
// Moves.addOverride(movesId, { | ||||||||||||
// entity: entityId, | ||||||||||||
// value: { | ||||||||||||
// player: BigInt(entityId), | ||||||||||||
// remaining: | ||||||||||||
// (getComponentValue(Moves, entityId)?.remaining || 0) - 1, | ||||||||||||
// }, | ||||||||||||
// }); | ||||||||||||
// Update the state before the transaction | ||||||||||||
const movesId = uuid(); | ||||||||||||
Moves.addOverride(movesId, { | ||||||||||||
entity: entityId, | ||||||||||||
value: { | ||||||||||||
player: BigInt(entityId), | ||||||||||||
remaining: | ||||||||||||
(getComponentValue(Moves, entityId)?.remaining || 0) - 1, | ||||||||||||
}, | ||||||||||||
}); | ||||||||||||
|
||||||||||||
try { | ||||||||||||
const { transaction_hash } = await client.actions.move({ | ||||||||||||
await client.actions.move({ | ||||||||||||
account, | ||||||||||||
direction, | ||||||||||||
}); | ||||||||||||
|
||||||||||||
await account.waitForTransaction(transaction_hash, { | ||||||||||||
retryInterval: 100, | ||||||||||||
// Wait for the indexer to update the entity | ||||||||||||
// By doing this we keep the optimistic UI in sync with the actual state | ||||||||||||
await new Promise<void>((resolve) => { | ||||||||||||
defineSystem( | ||||||||||||
world, | ||||||||||||
[ | ||||||||||||
Has(Moves), | ||||||||||||
HasValue(Moves, { player: BigInt(account.address) }), | ||||||||||||
], | ||||||||||||
() => { | ||||||||||||
resolve(); | ||||||||||||
} | ||||||||||||
); | ||||||||||||
}); | ||||||||||||
|
||||||||||||
// console.log( | ||||||||||||
// await account.waitForTransaction(transaction_hash, { | ||||||||||||
// retryInterval: 100, | ||||||||||||
// }) | ||||||||||||
// ); | ||||||||||||
|
||||||||||||
await new Promise((resolve) => setTimeout(resolve, 1000)); | ||||||||||||
} catch (e) { | ||||||||||||
console.log(e); | ||||||||||||
// Position.removeOverride(positionId); | ||||||||||||
// Moves.removeOverride(movesId); | ||||||||||||
Position.removeOverride(positionId); | ||||||||||||
Moves.removeOverride(movesId); | ||||||||||||
Comment on lines
129
to
+131
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove redundant catch clause. The catch clause that only logs the error and then removes the overrides is redundant and should be simplified. - } catch (e) {
- console.log(e);
- Position.removeOverride(positionId);
- Moves.removeOverride(movesId); Committable suggestion
Suggested change
|
||||||||||||
} finally { | ||||||||||||
// Position.removeOverride(positionId); | ||||||||||||
// Moves.removeOverride(movesId); | ||||||||||||
Position.removeOverride(positionId); | ||||||||||||
Moves.removeOverride(movesId); | ||||||||||||
Comment on lines
+133
to
+134
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove redundant finally clause. The finally clause that removes overrides is redundant if the catch clause already handles the removal. - } finally {
- Position.removeOverride(positionId);
- Moves.removeOverride(movesId);
|
||||||||||||
} | ||||||||||||
}; | ||||||||||||
|
||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove redundant catch clause.
The catch clause that only logs the error and then removes the overrides is redundant and should be simplified.
Committable suggestion