improve basic tool system

This commit is contained in:
Reid 2023-08-19 21:30:33 -07:00
parent 3458a6e29b
commit abfeb2982c
2 changed files with 22 additions and 13 deletions

View file

@ -1,20 +1,17 @@
import { World, useEvent } from "@rbxts/matter" import { World, useEvent } from "@rbxts/matter"
import { Players } from "@rbxts/services"
import { PlayerCharacter } from "ReplicatedStorage/ecs/components" import { PlayerCharacter } from "ReplicatedStorage/ecs/components"
import { getEvent } from "ReplicatedStorage/remotes" import { getEvent } from "ReplicatedStorage/remotes"
function toolHandler(world: World): void { function toolHandler(world: World): void {
const activateToolEvent = getEvent("activateToolEvent") const activateToolEvent = getEvent("activateToolEvent")
const equipToolEvent = getEvent("equipToolEvent")
for (const [_, character] of world.query(PlayerCharacter)) { for (const [_, character] of world.query(PlayerCharacter)) {
if (!character.equippedTool) continue if (!character.equippedTool) continue
for (const [_] of useEvent(character.equippedTool, "Activated")) { for (const [_] of useEvent(character.equippedTool, "Activated")) {
activateToolEvent.FireServer() print(Players.LocalPlayer.GetMouse())
} activateToolEvent.FireServer(Players.LocalPlayer.GetMouse().Hit.Position)
for (const [_, mouse] of useEvent(character.equippedTool, "Equipped")) {
equipToolEvent.FireServer(mouse)
} }
} }
} }

View file

@ -1,21 +1,33 @@
import Make from "@rbxts/make"
import { World, useEvent } from "@rbxts/matter" import { World, useEvent } from "@rbxts/matter"
import { Workspace } from "@rbxts/services"
import { PlayerCharacter } from "ReplicatedStorage/ecs/components" import { PlayerCharacter } from "ReplicatedStorage/ecs/components"
import { ServerState } from "ReplicatedStorage/ecs/state" import { ServerState } from "ReplicatedStorage/ecs/state"
import { getEvent } from "ReplicatedStorage/remotes" import { getEvent } from "ReplicatedStorage/remotes"
function toolHandler(world: World, state: ServerState): void { function toolHandler(world: World, state: ServerState): void {
const activateToolEvent = getEvent("activateToolEvent") const activateToolEvent = getEvent("activateToolEvent")
const equipToolEvent = getEvent("equipToolEvent")
for (const [_, character] of world.query(PlayerCharacter)) { for (const [_, character] of world.query(PlayerCharacter)) {
for (const [_, player] of useEvent(activateToolEvent, "OnServerEvent")) { if (!character.equippedTool) continue
state.logger.Info("{@player} activated the tool {@tool}", player, character.equippedTool)
if (character.player !== player) 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 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
})
}
} }
} }
} }