Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
excalibur-ui
Advanced tools
⚠️ very much a work in progress ⚠️
Render UI in Excalibur.js games using JSX with SolidJS. It is recommended to be familiar with Solid before using this library.
excalibur-ui requires either Babel or Vite to compile the JSX.
npm install excalibur-ui solid-js babel-preset-solid
Update your .babelrc
file:
{
"presets": [
[
"babel-preset-solid",
{
"moduleName": "excalibur-ui",
"generate": "universal"
}
]
]
}
npm install excalibur-ui solid-js vite-plugin-solid
Update your vite config file:
import { defineConfig } from 'vite'
import solidPlugin from 'vite-plugin-solid'
export default defineConfig({
plugins: [
solidPlugin({
solid: {
moduleName: 'excalibur-ui',
generate: 'universal',
},
}),
],
})
UI can be rendered either on a Scene or Entity, and should be called once during onInitialize
.
import { renderUI } from 'excalibur-ui'
class Scene extends ex.Scene {
onInitialize() {
renderUI(this, () => {
return (
<ex-text
text="Hello World!"
pos={ex.vec(100, 100)}
color="#ffffff"
font={{
size: 50,
family: 'Arial',
}}
/>
)
})
}
}
class Actor extends ex.Actor {
onInitialize() {
renderUI(this, () => {
return (
<ex-text
text="Hello World!"
pos={ex.vec(100, 100)}
color="#ffffff"
font={{
size: 50,
family: 'Arial',
}}
/>
)
})
}
}
Since excalibur-ui is build on top of Solid, you can use signals and effects the same way you would in Solid components.
You may want to manage state at the entity/scene level using class properties, so excalibur-ui provides a useValue
hook that
will provide a signal that is updated every frame. You can use this to get values from the parent entity/scene.
import { useValue } from 'excalibur-ui'
class Actor extends ex.Actor {
onInitialize() {
this.pos = ex.vec(100, 100)
renderUI(this, () => {
const pos = useValue(() => this.pos)
return (
<ex-text
text="Hello World!"
pos={pos()}
color="#ffffff"
font={{
size: 50,
family: 'Arial',
}}
/>
)
})
}
}
All HTML elements are supported and render on top of the game canvas.
import { useValue } from 'excalibur-ui'
class Actor extends ex.Actor {
onInitialize() {
this.pos = ex.vec(100, 100)
renderUI(this, () => {
const screenPos = useValue(() =>
this.scene.engine.worldToScreenCoordinates(this.pos),
)
return (
<div
style={{
position: 'absolute',
top: `${screenPos().x}px`,
left: `${screenPos().y}px`,
color: 'white',
}}
>
hello world
</div>
)
})
}
}
There's a lot missing here, but currently you can use:
ex-text
ex-rectangle
and these will render as native Excalibur entities onto the scene.
class Scene extends ex.Scene {
onInitialize() {
renderUI(this, () => {
return (
<>
<ex-text
text="Hello World!"
pos={ex.vec(100, 100)}
color="#ffffff"
font={{
size: 50,
family: 'Arial',
}}
/>
<ex-rectangle
pos={ex.vec(100, 300)}
color="#ff4400"
width={140}
height={80}
/>
</>
)
})
}
}
FAQs
A UI library for Excalibur.js
We found that excalibur-ui demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.