// SPDX-License-Identifier: MIT pragma solidity >=0.8.24; /* Autogenerated file. Do not edit manually. */ import { FuelSystem } from "../../systems/fuel/FuelSystem.sol"; import { FuelParams } from "../../systems/fuel/types.sol"; import { EntityRecordParams } from "../../systems/entity-record/types.sol"; import { revertWithBytes } from "@latticexyz/world/src/revertWithBytes.sol"; import { IWorldCall } from "@latticexyz/world/src/IWorldKernel.sol"; import { SystemCall } from "@latticexyz/world/src/SystemCall.sol"; import { Systems } from "@latticexyz/world/src/codegen/tables/Systems.sol"; import { ResourceId } from "@latticexyz/store/src/ResourceId.sol"; import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; type FuelSystemType is bytes32; // equivalent to WorldResourceIdLib.encode({ typeId: RESOURCE_SYSTEM, namespace: "evefrontier", name: "FuelSystem" })) FuelSystemType constant fuelSystem = FuelSystemType.wrap( 0x737965766566726f6e746965720000004675656c53797374656d000000000000 ); struct CallWrapper { ResourceId systemId; address from; } struct RootCallWrapper { ResourceId systemId; address from; } /** * @title FuelSystemLib * @author MUD (https://mud.dev) by Lattice (https://lattice.xyz) * @dev This library is automatically generated from the corresponding system contract. Do not edit manually. */ library FuelSystemLib { error FuelSystemLib_CallingFromRootSystem(); error Fuel_InvalidFuelUnitVolume(uint256 smartObjectId, uint256 fuelUnitVolume, uint256 min, uint256 max); error Fuel_InvalidFuelMaxCapacity(uint256 smartObjectId, uint256 fuelMaxCapacity, uint256 min, uint256 max); error Fuel_InvalidFuelAmount(uint256 smartObjectId, uint256 fuelAmount, uint256 min, uint256 max); error Fuel_ExceedsMaxCapacity( uint256 smartObjectId, uint256 fuelAmount, uint256 totalProjectedCapacity, uint256 maxCapacity ); error Fuel_InsufficientFuel(uint256 smartObjectId, uint256 fuelAmount, uint256 availableFuel); error Fuel_InvalidFuelBurnRate(uint256 smartObjectId, uint256 fuelBurnRateInSeconds, uint256 min, uint256 max); error Fuel_InvalidFuelTypeId(uint256 smartObjectId, uint256 fuelSmartObjectId); error Fuel_InvalidFuelEfficiency(uint256 fuelSmartObjectId, uint256 fuelEfficiency, uint256 min, uint256 max); error Fuel_BurnAlreadyStopped(uint256 smartObjectId); error Fuel_BurnNotActive(uint256 smartObjectId); error Fuel_TypeMismatch(uint256 smartObjectId, uint256 currentFuelSmartObjectId, uint256 newFuelSmartObjectId); error Fuel_InvalidFuelSmartObjectId(uint256 smartObjectId, uint256 fuelSmartObjectId); error Fuel_ActiveFuelCycleExists(uint256 smartObjectId, uint256 fuelSmartObjectId); function configureFuelParameters(FuelSystemType self, uint256 smartObjectId, FuelParams memory fuelParams) internal { return CallWrapper(self.toResourceId(), address(0)).configureFuelParameters(smartObjectId, fuelParams); } function configureFuelEfficiency( FuelSystemType self, uint256 smartObjectId, EntityRecordParams memory fuelEntityParams, uint256 fuelEfficiency ) internal { return CallWrapper(self.toResourceId(), address(0)).configureFuelEfficiency( smartObjectId, fuelEntityParams, fuelEfficiency ); } function depositFuel( FuelSystemType self, uint256 smartObjectId, uint256 fuelSmartObjectId, uint256 fuelAmount ) internal { return CallWrapper(self.toResourceId(), address(0)).depositFuel(smartObjectId, fuelSmartObjectId, fuelAmount); } function withdrawFuel(FuelSystemType self, uint256 smartObjectId, uint256 fuelAmount) internal { return CallWrapper(self.toResourceId(), address(0)).withdrawFuel(smartObjectId, fuelAmount); } function startBurn(FuelSystemType self, uint256 smartObjectId) internal { return CallWrapper(self.toResourceId(), address(0)).startBurn(smartObjectId); } function stopBurn(FuelSystemType self, uint256 smartObjectId) internal { return CallWrapper(self.toResourceId(), address(0)).stopBurn(smartObjectId); } function setFuelMaxCapacity(FuelSystemType self, uint256 smartObjectId, uint256 fuelMaxCapacity) internal { return CallWrapper(self.toResourceId(), address(0)).setFuelMaxCapacity(smartObjectId, fuelMaxCapacity); } function updateFuel(FuelSystemType self, uint256 smartObjectId) internal { return CallWrapper(self.toResourceId(), address(0)).updateFuel(smartObjectId); } function getCurrentFuelConsumptionStatus( FuelSystemType self, uint256 smartObjectId ) internal view returns (uint256 elapsedTime, uint256 unitsToConsume, uint256 actualConsumptionRateInSeconds, uint256 fuelAmount) { return CallWrapper(self.toResourceId(), address(0)).getCurrentFuelConsumptionStatus(smartObjectId); } function configureFuelParameters( CallWrapper memory self, uint256 smartObjectId, FuelParams memory fuelParams ) internal { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall( _configureFuelParameters_uint256_FuelParams.configureFuelParameters, (smartObjectId, fuelParams) ); self.from == address(0) ? _world().call(self.systemId, systemCall) : _world().callFrom(self.from, self.systemId, systemCall); } function configureFuelEfficiency( CallWrapper memory self, uint256 smartObjectId, EntityRecordParams memory fuelEntityParams, uint256 fuelEfficiency ) internal { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall( _configureFuelEfficiency_uint256_EntityRecordParams_uint256.configureFuelEfficiency, (smartObjectId, fuelEntityParams, fuelEfficiency) ); self.from == address(0) ? _world().call(self.systemId, systemCall) : _world().callFrom(self.from, self.systemId, systemCall); } function depositFuel( CallWrapper memory self, uint256 smartObjectId, uint256 fuelSmartObjectId, uint256 fuelAmount ) internal { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall( _depositFuel_uint256_uint256_uint256.depositFuel, (smartObjectId, fuelSmartObjectId, fuelAmount) ); self.from == address(0) ? _world().call(self.systemId, systemCall) : _world().callFrom(self.from, self.systemId, systemCall); } function withdrawFuel(CallWrapper memory self, uint256 smartObjectId, uint256 fuelAmount) internal { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall(_withdrawFuel_uint256_uint256.withdrawFuel, (smartObjectId, fuelAmount)); self.from == address(0) ? _world().call(self.systemId, systemCall) : _world().callFrom(self.from, self.systemId, systemCall); } function startBurn(CallWrapper memory self, uint256 smartObjectId) internal { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall(_startBurn_uint256.startBurn, (smartObjectId)); self.from == address(0) ? _world().call(self.systemId, systemCall) : _world().callFrom(self.from, self.systemId, systemCall); } function stopBurn(CallWrapper memory self, uint256 smartObjectId) internal { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall(_stopBurn_uint256.stopBurn, (smartObjectId)); self.from == address(0) ? _world().call(self.systemId, systemCall) : _world().callFrom(self.from, self.systemId, systemCall); } function setFuelMaxCapacity(CallWrapper memory self, uint256 smartObjectId, uint256 fuelMaxCapacity) internal { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall( _setFuelMaxCapacity_uint256_uint256.setFuelMaxCapacity, (smartObjectId, fuelMaxCapacity) ); self.from == address(0) ? _world().call(self.systemId, systemCall) : _world().callFrom(self.from, self.systemId, systemCall); } function updateFuel(CallWrapper memory self, uint256 smartObjectId) internal { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall(_updateFuel_uint256.updateFuel, (smartObjectId)); self.from == address(0) ? _world().call(self.systemId, systemCall) : _world().callFrom(self.from, self.systemId, systemCall); } function getCurrentFuelConsumptionStatus( CallWrapper memory self, uint256 smartObjectId ) internal view returns (uint256 elapsedTime, uint256 unitsToConsume, uint256 actualConsumptionRateInSeconds, uint256 fuelAmount) { // if the contract calling this function is a root system, it should use `callAsRoot` if (address(_world()) == address(this)) revert FuelSystemLib_CallingFromRootSystem(); bytes memory systemCall = abi.encodeCall( _getCurrentFuelConsumptionStatus_uint256.getCurrentFuelConsumptionStatus, (smartObjectId) ); bytes memory worldCall = self.from == address(0) ? abi.encodeCall(IWorldCall.call, (self.systemId, systemCall)) : abi.encodeCall(IWorldCall.callFrom, (self.from, self.systemId, systemCall)); (bool success, bytes memory returnData) = address(_world()).staticcall(worldCall); if (!success) revertWithBytes(returnData); bytes memory result = abi.decode(returnData, (bytes)); return abi.decode(result, (uint256, uint256, uint256, uint256)); } function configureFuelParameters( RootCallWrapper memory self, uint256 smartObjectId, FuelParams memory fuelParams ) internal { bytes memory systemCall = abi.encodeCall( _configureFuelParameters_uint256_FuelParams.configureFuelParameters, (smartObjectId, fuelParams) ); SystemCall.callWithHooksOrRevert(self.from, self.systemId, systemCall, msg.value); } function configureFuelEfficiency( RootCallWrapper memory self, uint256 smartObjectId, EntityRecordParams memory fuelEntityParams, uint256 fuelEfficiency ) internal { bytes memory systemCall = abi.encodeCall( _configureFuelEfficiency_uint256_EntityRecordParams_uint256.configureFuelEfficiency, (smartObjectId, fuelEntityParams, fuelEfficiency) ); SystemCall.callWithHooksOrRevert(self.from, self.systemId, systemCall, msg.value); } function depositFuel( RootCallWrapper memory self, uint256 smartObjectId, uint256 fuelSmartObjectId, uint256 fuelAmount ) internal { bytes memory systemCall = abi.encodeCall( _depositFuel_uint256_uint256_uint256.depositFuel, (smartObjectId, fuelSmartObjectId, fuelAmount) ); SystemCall.callWithHooksOrRevert(self.from, self.systemId, systemCall, msg.value); } function withdrawFuel(RootCallWrapper memory self, uint256 smartObjectId, uint256 fuelAmount) internal { bytes memory systemCall = abi.encodeCall(_withdrawFuel_uint256_uint256.withdrawFuel, (smartObjectId, fuelAmount)); SystemCall.callWithHooksOrRevert(self.from, self.systemId, systemCall, msg.value); } function startBurn(RootCallWrapper memory self, uint256 smartObjectId) internal { bytes memory systemCall = abi.encodeCall(_startBurn_uint256.startBurn, (smartObjectId)); SystemCall.callWithHooksOrRevert(self.from, self.systemId, systemCall, msg.value); } function stopBurn(RootCallWrapper memory self, uint256 smartObjectId) internal { bytes memory systemCall = abi.encodeCall(_stopBurn_uint256.stopBurn, (smartObjectId)); SystemCall.callWithHooksOrRevert(self.from, self.systemId, systemCall, msg.value); } function setFuelMaxCapacity(RootCallWrapper memory self, uint256 smartObjectId, uint256 fuelMaxCapacity) internal { bytes memory systemCall = abi.encodeCall( _setFuelMaxCapacity_uint256_uint256.setFuelMaxCapacity, (smartObjectId, fuelMaxCapacity) ); SystemCall.callWithHooksOrRevert(self.from, self.systemId, systemCall, msg.value); } function updateFuel(RootCallWrapper memory self, uint256 smartObjectId) internal { bytes memory systemCall = abi.encodeCall(_updateFuel_uint256.updateFuel, (smartObjectId)); SystemCall.callWithHooksOrRevert(self.from, self.systemId, systemCall, msg.value); } function getCurrentFuelConsumptionStatus( RootCallWrapper memory self, uint256 smartObjectId ) internal view returns (uint256 elapsedTime, uint256 unitsToConsume, uint256 actualConsumptionRateInSeconds, uint256 fuelAmount) { bytes memory systemCall = abi.encodeCall( _getCurrentFuelConsumptionStatus_uint256.getCurrentFuelConsumptionStatus, (smartObjectId) ); bytes memory result = SystemCall.staticcallOrRevert(self.from, self.systemId, systemCall); return abi.decode(result, (uint256, uint256, uint256, uint256)); } function callFrom(FuelSystemType self, address from) internal pure returns (CallWrapper memory) { return CallWrapper(self.toResourceId(), from); } function callAsRoot(FuelSystemType self) internal view returns (RootCallWrapper memory) { return RootCallWrapper(self.toResourceId(), msg.sender); } function callAsRootFrom(FuelSystemType self, address from) internal pure returns (RootCallWrapper memory) { return RootCallWrapper(self.toResourceId(), from); } function toResourceId(FuelSystemType self) internal pure returns (ResourceId) { return ResourceId.wrap(FuelSystemType.unwrap(self)); } function fromResourceId(ResourceId resourceId) internal pure returns (FuelSystemType) { return FuelSystemType.wrap(resourceId.unwrap()); } function getAddress(FuelSystemType self) internal view returns (address) { return Systems.getSystem(self.toResourceId()); } function _world() private view returns (IWorldCall) { return IWorldCall(StoreSwitch.getStoreAddress()); } } /** * System Function Interfaces * * We generate an interface for each system function, which is then used for encoding system calls. * This is necessary to handle function overloading correctly (which abi.encodeCall cannot). * * Each interface is uniquely named based on the function name and parameters to prevent collisions. */ interface _configureFuelParameters_uint256_FuelParams { function configureFuelParameters(uint256 smartObjectId, FuelParams memory fuelParams) external; } interface _configureFuelEfficiency_uint256_EntityRecordParams_uint256 { function configureFuelEfficiency( uint256 smartObjectId, EntityRecordParams memory fuelEntityParams, uint256 fuelEfficiency ) external; } interface _depositFuel_uint256_uint256_uint256 { function depositFuel(uint256 smartObjectId, uint256 fuelSmartObjectId, uint256 fuelAmount) external; } interface _withdrawFuel_uint256_uint256 { function withdrawFuel(uint256 smartObjectId, uint256 fuelAmount) external; } interface _startBurn_uint256 { function startBurn(uint256 smartObjectId) external; } interface _stopBurn_uint256 { function stopBurn(uint256 smartObjectId) external; } interface _setFuelMaxCapacity_uint256_uint256 { function setFuelMaxCapacity(uint256 smartObjectId, uint256 fuelMaxCapacity) external; } interface _updateFuel_uint256 { function updateFuel(uint256 smartObjectId) external; } interface _getCurrentFuelConsumptionStatus_uint256 { function getCurrentFuelConsumptionStatus(uint256 smartObjectId) external; } using FuelSystemLib for FuelSystemType global; using FuelSystemLib for CallWrapper global; using FuelSystemLib for RootCallWrapper global;