Skip to content

Latest commit

ย 

History

230 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

pubg-minimap-replay

์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ์ •ํ•ด์ง„ ํฌ๋งท๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์ƒํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

npm

์•„์ง npm package๋กœ ๋ฐฐํฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

How to use

build

$ npm run build

build๋ฅผ ์‹คํ–‰ํ•˜๋ฉด distํด๋”์— bundle.js ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

load script

<script src="bundle.js"></script>

html์—์„œ bundle๋œ jsํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

create minimap

let data = { Formatted Data };
let minimap = new Replay.Minimap(data);

minimap.mount(document.body);

์œ„์™€ ๊ฐ™์ด new Replay.Minimap(data)๋กœ ๋ฏธ๋‹ˆ๋งต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Properties

isPlaying

ํ˜„์žฌ ๋ฆฌํ”Œ๋ ˆ์ด๊ฐ€ ์žฌ์ƒ ์ค‘์ธ ์ƒํƒœ์ด๋ฉด true, ์ค‘์ง€๋œ ์ƒํƒœ์ด๋ฉด false์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
์ด ์†์„ฑ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฏธ๋‹ˆ๋งต์„ ์žฌ์ƒ/์ค‘์ง€ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

currentTime

  • type: number
  • default: 0
  • min: 0
  • max: duration

ํ˜„์žฌ ๋ฏธ๋‹ˆ๋งต์ด ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋Š” ๊ฒŒ์ž„์˜ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

duration (readonly)

  • type: number
  • value: (data์˜ ๊ฐ’์— ๋”ฐ๋ฆ„)
  • min: 0

๊ฒŒ์ž„์˜ ์ด ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

speed

  • type: number
  • default: 10
  • min: 0

๋ฏธ๋‹ˆ๋งต์„ ์žฌ์ƒํ•  ๋•Œ ๋ช‡ ๋ฐฐ์†์œผ๋กœ ์žฌ์ƒํ• ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

center

  • type: Point
  • default: { x: gameWidth / 2, y: gameHeight / 2 }

ํ˜„์žฌ ํ™”๋ฉด ์ค‘์‹ฌ ์ง€์ ์— ๋Œ€ํ•œ ๊ฒŒ์ž„ ๋‚ด์—์„œ์˜ ์ขŒํ‘œ์ž…๋‹ˆ๋‹ค.

method: set(x, y)

center ์ง€์ ์˜ x๊ฐ’๊ณผ y๊ฐ’์„ ๊ฐ™์ด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

let minimap = new Replay.Minimap(data);
minimap.center.set(minimap.gameWidth / 2, minimap.gameHeight / 2);

event: change

center ์ง€์ ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

let minimap = new Replay.Minimap(data);
minimap.center.on('change', () => {
    console.log('center position changed');
});

zoom

  • type: number
  • default: 1
  • min: 1

๋ฏธ๋‹ˆ๋งต์„ ์–ผ๋งˆ๋‚˜ ํ™•๋Œ€ํ–ˆ๋Š”์ง€ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

width

  • type: number
  • default: 800

canvas์— ๊ทธ๋ ค์ง€๋Š” ๋ฏธ๋‹ˆ๋งต์˜ ๊ฐ€๋กœ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.

height

  • type: number
  • default: 800

canvas์— ๊ทธ๋ ค์ง€๋Š” ๋ฏธ๋‹ˆ๋งต์˜ ์„ธ๋กœ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.

scaleX (readonly)

  • type: number
  • value: width * zoom / gameWidth

๊ฒŒ์ž„์„ ๋ฏธ๋‹ˆ๋งต์— ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด x์ถ•์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์ถ•์†Œ/ํ™•๋Œ€๋˜์—ˆ๋Š”์ง€ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

scaleY (readonly)

  • type: number
  • value: height * zoom / gameHeight

๊ฒŒ์ž„์„ ๋ฏธ๋‹ˆ๋งต์— ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด y์ถ•์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์ถ•์†Œ/ํ™•๋Œ€๋˜์—ˆ๋Š”์ง€ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

gameWidth (readonly)

  • type: number
  • value: (data์˜ ๊ฐ’์— ๋”ฐ๋ฆ„)

๊ฒŒ์ž„์˜ ๋งต ๊ฐ€๋กœ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

gameHeight (readonly)

  • type: number
  • value: (data์˜ ๊ฐ’์— ๋”ฐ๋ฆ„)

๊ฒŒ์ž„์˜ ๋งต ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

canvas (readonly)

  • type: HTMLCanvasElement

๋ฏธ๋‹ˆ๋งต์ด ๊ทธ๋ ค์ง€๋Š” <canvas> ์š”์†Œ์ž…๋‹ˆ๋‹ค.

Methods

start()

๋ฏธ๋‹ˆ๋งต์„ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค. isPlaying ์†์„ฑ์ด true๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

stop()

๋ฏธ๋‹ˆ๋งต์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. isPlaying ์†์„ฑ์ด false๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

mount(element)

๋ฏธ๋‹ˆ๋งต์ด ๊ทธ๋ ค์ง€๋Š” canvas๋ฅผ element์˜ (๋งˆ์ง€๋ง‰) ์ž์‹ ์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Events

์•„๋ž˜์˜ ์ด๋ฒคํŠธ๋Š” minimap.on('event name', callback); ํ˜•ํƒœ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let data = { ... };
let minimap = new Replay.Minimap(data);

minimap.on('assetsLoaded', () => {
    // All texture loaded
    minimap.mount(document.body);
});

assetsLoaded

data์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  texture๊ฐ€ ๋กœ๋“œ ๋œ ํ›„ ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

playStateChange

isPlaying ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

currentTimeChange

currentTime ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

speedChange

speed ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

zoomChange

zoom ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

widthChange

width ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

heightChange

height ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

Data format

Data Types

type example description
string "test" ๋ฌธ์ž์—ด
integer 123 ์ •์ˆ˜ํ˜•
number 1.23 ์‹ค์ˆ˜ํ˜•
boolean true ๋…ผ๋ฆฌํ˜•
color 0 0 ์ด์ƒ 0xFFFFFF ์ดํ•˜์˜ ์ •์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค.
AssetID "AssetPath" ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋˜๋ฉฐ AssetList ์•ˆ์— Key๋กœ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ReplayData

๋ฆฌํ”Œ๋ ˆ์ด ํŒŒ์ผ์˜ ์ „์ฒด ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

{
    // ์ด ๋ฆฌํ”Œ๋ ˆ์ด์— ํ™œ์šฉํ•œ Asset์˜ ๋ชฉ๋ก (๋ฐฐ์—ด์ด ์•„๋‹Œ key-value object ํ˜•ํƒœ)
    "assets": AssetList,
    
    // ๊ฒŒ์ž„์˜ ์ „๋ฐ˜์ ์ธ ์ •๋ณด๋ฅผ ์ €์žฅ
    "game": GameInformation,

    // ํ”Œ๋ ˆ์ด์–ด๋‚˜ ์ค‘๋ฆฝ ๋ชฌ์Šคํ„ฐ๋“ฑ ์‚ด์•„์žˆ๋Š” ์ƒ๋ช…์ฒด๋ฅผ ํ‘œํ˜„
    "characters": [
        GameCharacter,
        GameCharacter,
        GameCharacter,
        ...
    ],
    
    // ๋ฏธ๋‹ˆ๋งต์— ํ‘œ์‹œ๋˜๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด
    "objects": [
        GameObject,
        GameObject,
        GameObject,
        ...
    ],
    
    // ๋ฏธ๋‹ˆ๋งต์— ํ‘œ์‹œํ•  UI
    "ui": [
        GameUI, 
        GameUI, 
        GameUI,
        ...
    ],

    // ์บ๋ฆญํ„ฐ๋“ค์ด ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์„ ํ‘œํ˜„
    "attacks": [
        GameAttack,
        GameAttack,
        GameAttack,
        ...
    ],
}

AssetList

๋ฆฌํ”Œ๋ ˆ์ด์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€ ์—์…‹๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฏธ์ง€ ์—์…‹์€ ์›น ๊ฒฝ๋กœ๋‚˜ base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
    "Asset-ID-1": "Asset1 path",
    "Asset-ID-2": "Asset2 path",
    "Asset-ID-3": "Asset3 path",
    ...
}

GameInformation

๊ฒŒ์ž„์˜ ์ „์ฒด์ ์ธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

{
    // ๊ฒŒ์ž„ ๋‚ด์—์„œ ๋งต ๊ฐ€๋กœ ํฌ๊ธฐ
    "width": number,

    // ๊ฒŒ์ž„ ๋‚ด์—์„œ์˜ ๋งต ์„ธ๋กœ ํฌ๊ธฐ
    "height": number,

    // ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•œ ์ •๋ณด
    "background": {
        // ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€์˜ AssetID
        "image": AssetID, 
    },

    // ๊ฒŒ์ž„ ์ด ์ง„ํ–‰ ์‹œ๊ฐ„ (๋‹จ์œ„: ms)
    "duration": number
}

GameCharacter

ํ”Œ๋ ˆ์ด์–ด๋‚˜ ์ค‘๋ฆฝ ๋ชฌ์Šคํ„ฐ๋“ฑ ์‚ด์•„์žˆ๋Š” ์ƒ๋ช…์ฒด๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

{
    // ์บ๋ฆญํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•  ์•„์ด๋””
    "id": string,

    // ์บ๋ฆญํ„ฐ๊ฐ€ ํ‘œ์‹œ๋  ์ด๋ฆ„, ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ํˆดํŒ์œผ๋กœ ์ด๋ฆ„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    "name": string,

    // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์บ๋ฆญํ„ฐ ์œ„์น˜ ์ •๋ณด
    "locations": [ 
        LiveGameLocation,
        LiveGameLocation,
        LiveGameLocation,
        ...
    ],

    // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์บ๋ฆญํ„ฐ ๋ชจ์–‘ ์ •๋ณด
    "shapes": [
        LiveShape,
        LiveShape,
        LiveShape,
        ...
    ]
}

GameObject

๋ฏธ๋‹ˆ๋งต์— ํ‘œ์‹œ๋˜๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
๋ฐฐํ‹€๊ทธ๋ผ์šด๋“œ์˜ ๋ ˆ๋“œ์กด, ์ž๊ธฐ์žฅ(ํŒŒ๋ž€ ์›), ์•ˆ์ „ ์ง€์—ญ(ํฐ์ƒ‰ ์›), ๋ณด๊ธ‰์ƒ์ž ๋“ฑ์„ ํ‘œ์‹œํ•  ๋•Œ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
    // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๊ฐ์ฒด ์œ„์น˜ ์ •๋ณด
    "locations": [
        LiveGameLocation,
        LiveGameLocation,
        LiveGameLocation,
        ...
    ],

    // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๊ฐ์ฒด ๋ชจ์–‘ ์ •๋ณด
    "shapes": [
        LiveShape,
        LiveShape,
        LiveShape,
        ...
    ],

    // ๊ฐ์ฒด์— ๋งˆ์šฐ์Šค ์˜ค๋ฒ„์‹œ ํˆดํŒ์œผ๋กœ ํ‘œ์‹œํ•  ๋‚ด์šฉ (ํ•ด๋‹น ๊ฐ์ฒด ํด๋ฆญ์‹œ ํˆดํŒ์ด ๊ณ ์ •๋จ)
    "tooltips": [
        LiveTooltip,
        LiveTooltip,
        LiveTooltip,
        ...
    ],
}

GameUI

๋ฏธ๋‹ˆ๋งต์— ํ‘œ์‹œํ•  UI๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
๋ฐฐํ‹€ ๊ทธ๋ผ์šด๋“œ์˜ ์‚ด์•„์žˆ๋Š” ์‚ฌ๋žŒ ์ˆ˜, ํ˜น์€ ๋ฆฌ๊ทธ์˜ค๋ธŒ๋ ˆ์ „๋“œ์˜ ํ‚ฌ ์Šค์ฝ”์–ด ํ˜„ํ™ฉ ๋“ฑ์„ ํ‘œ์‹œํ•  ๋•Œ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
    // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ UI์˜ ์œ„์น˜
    "positions": [
        LivePosition,
        LivePosition,
        LivePosition,
        ...
    ],

    // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ UI์˜ ๋ชจ์–‘
    "shapes": [
        LiveShape,
        LiveShape,
        LiveShape,
        ...
    ],

    // ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ UI ๋‚ด ๊ธ€์”จ
    "texts": [
        LiveText,
        LiveText,
        LiveText,
        ...
    ],
}

GameAttack

์บ๋ฆญํ„ฐ๋“ค์ด ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

LineAttack | BulletAttack

LineAttack

๊ณต๊ฒฉ ์‹œ์ž‘ ์ง€์ ์—์„œ ๊ณต๊ฒฉ ๋Œ€์ƒ ์ง€์ ์œผ๋กœ ์„  ๋ชจ์–‘์œผ๋กœ ๊ทธ๋ ค์ง€๋Š” ๊ณต๊ฒฉ์ž…๋‹ˆ๋‹ค.

{
    // ์„  ๋ชจ์–‘ Attack
    "type": "line",

    // ๊ณต๊ฒฉ ์‹œ์ž‘ ์ง€์ 
    "attacker": GameLocation,

    // ๊ณต๊ฒฉ ๋Œ€์ƒ ์ง€์ 
    "target": GameLocation,

    // ๊ณต๊ฒฉ ์„  ๋ชจ์–‘ ์ •์˜
    "shape": {
        // ์„  ๋‘๊ป˜
        "lineWidth": number,

        // ์„  ์ƒ‰์ƒ
        "lineColor": color,

        // ์„  
        "lineAlpha": number,
    },
    // ๊ณต๊ฒฉ์ด ์ง„ํ–‰๋˜๋Š” ์‹œ๊ฐ„ (๋‹จ์œ„: ๊ฒŒ์ž„ ๋‚ด์˜ ์‹œ๊ฐ„ ms)
    "duration": number,

    // ์œ„ duration์„ ๊ฒŒ์ž„ ๋‚ด์˜ ์‹œ๊ฐ„์ด ์•„๋‹Œ ๋ฆฌํ”Œ๋ ˆ์ด ์‹œ ๋ณด์—ฌ์ง€๋Š” ์‹œ๊ฐ„์œผ๋กœ ์‚ฌ์šฉ
    "fixDuration": boolean,

    // ํ˜„์žฌ ์ •๋ณด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์ž„ ์‹œ๊ฐ„ (๋‹จ์œ„: ms) 
    "elapsedTime": number
}

BulletAttack

{
    // ์ด์•Œ ํ˜•ํƒœ Attack
    "type": "bullet",

    // ๊ณต๊ฒฉ ์‹œ์ž‘ ์ง€์ 
    "attacker": GameLocation,

    // ๊ณต๊ฒฉ ๋Œ€์ƒ ์ง€์ 
    "target": GameLocation,

    // ์ด์•Œ ๋ชจ์–‘ ์ •์˜
    "shape": Shape,

    // ๊ณต๊ฒฉ์ด ์ง„ํ–‰๋˜๋Š” ์‹œ๊ฐ„ (๋‹จ์œ„: ๊ฒŒ์ž„ ๋‚ด์˜ ์‹œ๊ฐ„ ms)
    "duration": number,

    // ์œ„ duration์„ ๊ฒŒ์ž„ ๋‚ด์˜ ์‹œ๊ฐ„์ด ์•„๋‹Œ ๋ฆฌํ”Œ๋ ˆ์ด ์‹œ ๋ณด์—ฌ์ง€๋Š” ์‹œ๊ฐ„์œผ๋กœ ์‚ฌ์šฉ
    "fixDuration": boolean,

    // ํ˜„์žฌ ์ •๋ณด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์ž„ ์‹œ๊ฐ„ (๋‹จ์œ„: ms) 
    "elapsedTime": number
}

LiveGameLocation

๊ฒŒ์ž„ ์‹œ๊ฐ„, ๋ณด๊ฐ„ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ๊ฒŒ์ž„ ๋งต ๊ธฐ์ค€ ์ขŒํ‘œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

{
    // ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•œ์ง€ elapsedTime๋งŒํผ ์ง€๋‚ฌ์„ ๋•Œ์˜ ์ขŒํ‘œ
    ...GameLocation,

    // ์ด์ „ ์ขŒํ‘œ์™€ ํ˜„์žฌ ์ขŒํ‘œ ์‚ฌ์ด์˜ ์ขŒํ‘œ๋ฅผ ๋ณด๊ฐ„ํ•ด์„œ ์‚ฌ์šฉ ํ•  ์ง€ ์—ฌ๋ถ€
    "transition": boolean,

    // ํ˜„์žฌ ์ขŒํ‘œ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์ž„ ์‹œ๊ฐ„ (๋‹จ์œ„: ms) 
    "elapsedTime": number
}

GameLocation

๊ฒŒ์ž„ ๋งต ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ํŠน์ • ์ขŒํ‘œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

{
    // ๊ฒŒ์ž„ ๋งต ํฌ๊ธฐ ๊ธฐ์ค€ x์ขŒํ‘œ
    "x": number,

    // ๊ฒŒ์ž„ ๋งต ํฌ๊ธฐ ๊ธฐ์ค€ y์ขŒํ‘œ
    "y": number 
}

LivePosition

๊ฒŒ์ž„ ์‹œ๊ฐ„, ๋ณด๊ฐ„ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ์บ”๋ฒ„์Šค ๊ธฐ์ค€ ์ขŒํ‘œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

{
    // ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•œ์ง€ elapsedTime๋งŒํผ ์ง€๋‚ฌ์„ ๋•Œ์˜ ์ขŒํ‘œ
    ...Position,

    // ์ด์ „ ์ขŒํ‘œ์™€ ํ˜„์žฌ ์ขŒํ‘œ ์‚ฌ์ด์˜ ์ขŒํ‘œ๋ฅผ ๋ณด๊ฐ„ํ•ด์„œ ์‚ฌ์šฉ ํ•  ์ง€ ์—ฌ๋ถ€
    "transition": boolean,

    // ํ˜„์žฌ ์ขŒํ‘œ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์ž„ ์‹œ๊ฐ„ (๋‹จ์œ„: ms) 
    "elapsedTime": number
}

Position

์บ”๋ฒ„์Šค ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ํŠน์ • ์ขŒํ‘œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

{
    // ์บ”๋ฒ„์Šค ํฌ๊ธฐ ๊ธฐ์ค€ x์ขŒํ‘œ
    "x": number,

    // ์บ”๋ฒ„์Šค ํฌ๊ธฐ ๊ธฐ์ค€ y์ขŒํ‘œ
    "y": number
}

LiveTooltip

๊ฒŒ์ž„ ์‹œ๊ฐ„์„ ํฌํ•จํ•œ ํˆดํŒ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

{
    // ํˆดํŒ์œผ๋กœ ํ‘œ์‹œํ•  ๊ธ€์”จ
    "text": string,
    
    // ํ˜„์žฌ ํˆดํŒ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์ž„ ์‹œ๊ฐ„ (๋‹จ์œ„: ms)
    "elapsedTime": number, 
}

LiveText

๊ฒŒ์ž„ ์‹œ๊ฐ„์„ ํฌํ•จํ•œ ๊ธ€์”จ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

{
    // ๊ธ€์”จ ๋‚ด์šฉ
    "text": string,

    // ๊ธ€์”จ ์ƒ‰
    "textColor": color,

    // ๊ธ€์”จ ํˆฌ๋ช…๋„
    "textAlpha": number,

    // ๊ธ€์”จ ํฌ๊ธฐ
    "textSize": number,

    // ํ˜„์žฌ ๊ธ€์”จ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์ž„ ์‹œ๊ฐ„ (๋‹จ์œ„: ms)
    "elapsedTime": number,
}

LiveShape

๊ฒŒ์ž„ ์‹œ๊ฐ„, ๋ณด๊ฐ„ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ๋ชจ์–‘ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

{
    // ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•œ์ง€ elapsedTime๋งŒํผ ์ง€๋‚ฌ์„ ๋•Œ์˜ ์บ๋ฆญํ„ฐ ๋ชจ์–‘ ์ •๋ณด
    ...Shape,

    // ์ด์ „ ๋ชจ์–‘ ์ •๋ณด์™€ ํ˜„์žฌ ๋ชจ์–‘ ์ •๋ณด ์‚ฌ์ด์˜ ๋ชจ์–‘๋ฅผ ๋ณด๊ฐ„ํ•ด์„œ ์‚ฌ์šฉ ํ•  ์ง€ ์—ฌ๋ถ€
    // - ์„œ๋กœ ๋‹ค๋ฅธ Shape ์‚ฌ์ด์—์„œ๋Š” ๋ณด๊ฐ„์ด ๋˜์ง€ ์•Š์Œ
    // - Shape์˜ fillColor, lineColor๋Š” ๋ณด๊ฐ„์ด ๋˜์ง€ ์•Š์Œ
    "transition": boolean,

    // ํ˜„์žฌ ๋ชจ์–‘ ์ •๋ณด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์ž„ ์‹œ๊ฐ„ (๋‹จ์œ„: ms)
    "elapsedTime": number   
}

Shape

RectangleShape | EllipseShape | ImageShape

RectangleShape

์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์˜ Shape์ž…๋‹ˆ๋‹ค.

{
    // ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘ Shape
    "type": "rectangle",

    // ๊ฐ€๋กœ ํฌ๊ธฐ (๊ฒŒ์ž„ ๋งต ํฌ๊ธฐ ๊ธฐ์ค€)
    "width": number,

    // ์„ธ๋กœ ํฌ๊ธฐ (๊ฒŒ์ž„ ๋งต ํฌ๊ธฐ ๊ธฐ์ค€)
    "height": number,

    // width๊ณผ height๋ฅผ ๊ฒŒ์ž„ ๋งต ํฌ๊ธฐ ๊ธฐ์ค€์ด ์•„๋‹Œ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ
    "fixSize": boolean,

    // ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ
    "fillColor": color, 

    // ๋ฐฐ๊ฒฝ ํˆฌ๋ช…๋„
    "fillAlpha": number, 

    // ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ
    "lineColor": color, 

    // ํ…Œ๋‘๋ฆฌ ํˆฌ๋ช…๋„
    "lineAlpha": number,

    // ํ…Œ๋‘๋ฆฌ ๋‘๊ป˜
    "lineWidth": number,
}

EllipseShape

ํƒ€์› ํ˜•ํƒœ์˜ Shape์ž…๋‹ˆ๋‹ค.

{
    // ํƒ€์› ๋ชจ์–‘ Shape
    "type": "ellipse",

    // ๊ฐ€๋กœ ํฌ๊ธฐ
    "width": number, 

    // ์„ธ๋กœ ํฌ๊ธฐ
    "height": number, 

    // width๊ณผ height๋ฅผ ๊ฒŒ์ž„ ๋งต ํฌ๊ธฐ ๊ธฐ์ค€์ด ์•„๋‹Œ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ
    "fixSize": boolean, 

    // ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ
    "fillColor": color, 

    // ๋ฐฐ๊ฒฝ ํˆฌ๋ช…๋„
    "fillAlpha": number, 

    // ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ
    "lineColor": color, 

    // ํ…Œ๋‘๋ฆฌ ํˆฌ๋ช…๋„
    "lineAlpha": number, 

    // ํ…Œ๋‘๋ฆฌ ๋‘๊ป˜
    "lineWidth": number, 
}

ImageShape

์ด๋ฏธ์ง€ Asset์„ ํ™œ์šฉํ•œ Shape์ž…๋‹ˆ๋‹ค.

{
    // ์ด๋ฏธ์ง€ ๋ชจ์–‘ Shape
    "type": "image", 

    // ๊ฐ€๋กœ ํฌ๊ธฐ
    "width": number, 

    // ์„ธ๋กœ ํฌ๊ธฐ
    "height": number, 

    // width๊ณผ height๋ฅผ ๊ฒŒ์ž„ ๋งต ํฌ๊ธฐ ๊ธฐ์ค€์ด ์•„๋‹Œ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ
    "fixSize": boolean, 

    // ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€์˜ AssetID
    โ€œimage": AssetID, 
}

About

The component to replay mini-map of the game "Player Unknown Battle Ground"

Topics

Resources

Stars

16 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages