From abfeb2982c4eb738d078cf9a23d1b602dc44c316 Mon Sep 17 00:00:00 2001 From: reidlab Date: Sat, 19 Aug 2023 21:30:33 -0700 Subject: [PATCH] improve basic tool system --- .../ecs/systems/client/toolHandler.ts | 9 +++---- .../ecs/systems/server/toolHandler.ts | 26 ++++++++++++++----- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/ReplicatedStorage/ecs/systems/client/toolHandler.ts b/src/ReplicatedStorage/ecs/systems/client/toolHandler.ts index 305fcd8..8f8bac2 100644 --- a/src/ReplicatedStorage/ecs/systems/client/toolHandler.ts +++ b/src/ReplicatedStorage/ecs/systems/client/toolHandler.ts @@ -1,20 +1,17 @@ import { World, useEvent } from "@rbxts/matter" +import { Players } from "@rbxts/services" import { PlayerCharacter } from "ReplicatedStorage/ecs/components" import { getEvent } from "ReplicatedStorage/remotes" function toolHandler(world: World): void { const activateToolEvent = getEvent("activateToolEvent") - const equipToolEvent = getEvent("equipToolEvent") for (const [_, character] of world.query(PlayerCharacter)) { if (!character.equippedTool) continue for (const [_] of useEvent(character.equippedTool, "Activated")) { - activateToolEvent.FireServer() - } - - for (const [_, mouse] of useEvent(character.equippedTool, "Equipped")) { - equipToolEvent.FireServer(mouse) + print(Players.LocalPlayer.GetMouse()) + activateToolEvent.FireServer(Players.LocalPlayer.GetMouse().Hit.Position) } } } diff --git a/src/ServerScriptService/ecs/systems/server/toolHandler.ts b/src/ServerScriptService/ecs/systems/server/toolHandler.ts index 7ec6803..33704f1 100644 --- a/src/ServerScriptService/ecs/systems/server/toolHandler.ts +++ b/src/ServerScriptService/ecs/systems/server/toolHandler.ts @@ -1,21 +1,33 @@ +import Make from "@rbxts/make" import { World, useEvent } from "@rbxts/matter" +import { Workspace } from "@rbxts/services" import { PlayerCharacter } from "ReplicatedStorage/ecs/components" import { ServerState } from "ReplicatedStorage/ecs/state" import { getEvent } from "ReplicatedStorage/remotes" function toolHandler(world: World, state: ServerState): void { const activateToolEvent = getEvent("activateToolEvent") - const equipToolEvent = getEvent("equipToolEvent") for (const [_, character] of world.query(PlayerCharacter)) { - for (const [_, player] of useEvent(activateToolEvent, "OnServerEvent")) { - state.logger.Info("{@player} activated the tool {@tool}", player, character.equippedTool) - if (character.player !== player) continue - } + if (!character.equippedTool) continue + + for (const [_, player, untypedHitPos] of useEvent(activateToolEvent, "OnServerEvent")) { + const hitPos = untypedHitPos as Vector3 - for (const [_, player] of useEvent(equipToolEvent, "OnServerEvent")) { - state.logger.Info("{@player} equipped the tool {@tool}", player, character.equippedTool) if (character.player !== player) continue + state.logger.Info("{@player} activated the tool {@tool}", player, character.equippedTool) + + // TODO: Fix this logic! + // We don't want a bunch of if statements... + + // example tool - spawns a part at cursor pos + if (character.equippedTool.Name === "example tool") { + Make("Part", { + Position: hitPos, + Anchored: false, + Parent: Workspace + }) + } } } }