Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
T
Taiko Web
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
Taiko Web
Commits
13ca5e36
Commit
13ca5e36
authored
Feb 20, 2019
by
Bui
Committed by
GitHub
Feb 20, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #136 from bui/parsetja-add-branches
ParseTja: Add branches
parents
440436b3
92510c30
Changes
18
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
673 additions
and
206 deletions
+673
-206
public/src/css/debug.css
public/src/css/debug.css
+16
-4
public/src/js/canvasdraw.js
public/src/js/canvasdraw.js
+8
-4
public/src/js/circle.js
public/src/js/circle.js
+2
-40
public/src/js/debug.js
public/src/js/debug.js
+59
-11
public/src/js/game.js
public/src/js/game.js
+165
-23
public/src/js/importsongs.js
public/src/js/importsongs.js
+1
-1
public/src/js/keyboard.js
public/src/js/keyboard.js
+2
-2
public/src/js/main.js
public/src/js/main.js
+3
-1
public/src/js/mekadon.js
public/src/js/mekadon.js
+15
-7
public/src/js/p2.js
public/src/js/p2.js
+8
-3
public/src/js/parsetja.js
public/src/js/parsetja.js
+138
-59
public/src/js/songselect.js
public/src/js/songselect.js
+42
-22
public/src/js/soundbuffer.js
public/src/js/soundbuffer.js
+1
-1
public/src/js/strings.js
public/src/js/strings.js
+30
-0
public/src/js/titlescreen.js
public/src/js/titlescreen.js
+5
-1
public/src/js/view.js
public/src/js/view.js
+166
-27
public/src/views/debug.html
public/src/views/debug.html
+11
-0
server.py
server.py
+1
-0
No files found.
public/src/css/debug.css
View file @
13ca5e36
...
@@ -44,7 +44,8 @@
...
@@ -44,7 +44,8 @@
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
#debug
.input-slider
{
#debug
.input-slider
,
#debug
.select
{
display
:
flex
;
display
:
flex
;
width
:
100%
;
width
:
100%
;
height
:
30px
;
height
:
30px
;
...
@@ -59,7 +60,8 @@
...
@@ -59,7 +60,8 @@
padding
:
2px
4px
;
padding
:
2px
4px
;
text-align
:
center
;
text-align
:
center
;
}
}
#debug
.input-slider
>
span
{
#debug
.input-slider
>
span
,
#debug
.select
>
span
{
display
:
block
;
display
:
block
;
width
:
10%
;
width
:
10%
;
height
:
100%
;
height
:
100%
;
...
@@ -70,10 +72,19 @@
...
@@ -70,10 +72,19 @@
line-height
:
2em
;
line-height
:
2em
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
#debug
.input-slider
>
span
:hover
{
#debug
.input-slider
>
span
:hover
,
#debug
.select
>
span
:hover
{
opacity
:
1
;
opacity
:
1
;
background
:
#333
;
background
:
#333
;
}
}
#debug
.select
select
{
width
:
90%
;
height
:
100%
;
box-sizing
:
border-box
;
font-size
:
18px
;
font-family
:
sans-serif
;
padding
:
2px
4px
;
}
#debug
label
{
#debug
label
{
display
:
block
;
display
:
block
;
...
@@ -111,6 +122,7 @@
...
@@ -111,6 +122,7 @@
margin-left
:
3px
;
margin-left
:
3px
;
}
}
#debug
.autoplay-label
{
#debug
.autoplay-label
,
#debug
.branch-hide
{
display
:
none
;
display
:
none
;
}
}
public/src/js/canvasdraw.js
View file @
13ca5e36
...
@@ -268,6 +268,9 @@
...
@@ -268,6 +268,9 @@
easeOut
(
pos
){
easeOut
(
pos
){
return
Math
.
sin
(
Math
.
PI
/
2
*
pos
)
return
Math
.
sin
(
Math
.
PI
/
2
*
pos
)
}
}
easeOutBack
(
pos
){
return
Math
.
sin
(
Math
.
PI
/
1.74
*
pos
)
*
1.03
}
easeInOut
(
pos
){
easeInOut
(
pos
){
return
(
Math
.
cos
(
Math
.
PI
*
pos
)
-
1
)
/
-
2
return
(
Math
.
cos
(
Math
.
PI
*
pos
)
-
1
)
/
-
2
}
}
...
@@ -572,7 +575,7 @@
...
@@ -572,7 +575,7 @@
}
}
if
(
symbol
.
ura
){
if
(
symbol
.
ura
){
ctx
.
font
=
(
30
*
mul
)
+
"
px Meiryo, sans-serif
"
ctx
.
font
=
(
30
*
mul
)
+
"
px Meiryo, sans-serif
"
ctx
.
textBaseline
=
"
center
"
ctx
.
textBaseline
=
"
middle
"
ctx
.
beginPath
()
ctx
.
beginPath
()
ctx
.
arc
(
currentX
,
currentY
+
(
17
*
mul
),
(
18
*
mul
),
0
,
Math
.
PI
*
2
)
ctx
.
arc
(
currentX
,
currentY
+
(
17
*
mul
),
(
18
*
mul
),
0
,
Math
.
PI
*
2
)
if
(
action
===
"
stroke
"
){
if
(
action
===
"
stroke
"
){
...
@@ -581,7 +584,7 @@
...
@@ -581,7 +584,7 @@
}
else
if
(
action
===
"
fill
"
){
}
else
if
(
action
===
"
fill
"
){
ctx
.
strokeStyle
=
config
.
fill
ctx
.
strokeStyle
=
config
.
fill
ctx
.
lineWidth
=
2.5
*
mul
ctx
.
lineWidth
=
2.5
*
mul
ctx
.
fillText
(
symbol
.
text
,
currentX
,
currentY
)
ctx
.
fillText
(
symbol
.
text
,
currentX
,
currentY
+
(
17
*
mul
)
)
}
}
ctx
.
stroke
()
ctx
.
stroke
()
}
else
{
}
else
{
...
@@ -788,7 +791,7 @@
...
@@ -788,7 +791,7 @@
}
}
if
(
symbol
.
ura
){
if
(
symbol
.
ura
){
ctx
.
font
=
(
30
*
mul
)
+
"
px Meiryo, sans-serif
"
ctx
.
font
=
(
30
*
mul
)
+
"
px Meiryo, sans-serif
"
ctx
.
textBaseline
=
"
center
"
ctx
.
textBaseline
=
"
middle
"
ctx
.
beginPath
()
ctx
.
beginPath
()
ctx
.
arc
(
currentX
,
currentY
+
(
17
*
mul
),
(
18
*
mul
),
0
,
Math
.
PI
*
2
)
ctx
.
arc
(
currentX
,
currentY
+
(
17
*
mul
),
(
18
*
mul
),
0
,
Math
.
PI
*
2
)
if
(
action
===
"
strokeText
"
){
if
(
action
===
"
strokeText
"
){
...
@@ -797,7 +800,7 @@
...
@@ -797,7 +800,7 @@
}
else
if
(
action
===
"
fillText
"
){
}
else
if
(
action
===
"
fillText
"
){
ctx
.
strokeStyle
=
layer
.
fill
ctx
.
strokeStyle
=
layer
.
fill
ctx
.
lineWidth
=
2.5
*
mul
ctx
.
lineWidth
=
2.5
*
mul
ctx
.
fillText
(
symbol
.
text
,
currentX
,
currentY
)
ctx
.
fillText
(
symbol
.
text
,
currentX
,
currentY
+
(
17
*
mul
)
)
}
}
ctx
.
stroke
()
ctx
.
stroke
()
}
else
{
}
else
{
...
@@ -1167,6 +1170,7 @@
...
@@ -1167,6 +1170,7 @@
var
firstTop
=
config
.
multiplayer
?
0
:
30
var
firstTop
=
config
.
multiplayer
?
0
:
30
var
secondTop
=
config
.
multiplayer
?
0
:
8
var
secondTop
=
config
.
multiplayer
?
0
:
8
config
.
percentage
=
Math
.
max
(
0
,
Math
.
min
(
1
,
config
.
percentage
))
var
cleared
=
config
.
percentage
-
1
/
50
>=
config
.
clear
var
cleared
=
config
.
percentage
-
1
/
50
>=
config
.
clear
var
gaugeW
=
14
*
50
var
gaugeW
=
14
*
50
...
...
public/src/js/circle.js
View file @
13ca5e36
class
Circle
{
class
Circle
{
constructor
(
config
){
constructor
(
config
){
// id, ms, type, text, speed, endTime, requiredHits
this
.
id
=
config
.
id
this
.
id
=
config
.
id
this
.
ms
=
config
.
start
this
.
ms
=
config
.
start
this
.
originalMS
=
this
.
ms
this
.
originalMS
=
this
.
ms
...
@@ -23,38 +22,13 @@ class Circle{
...
@@ -23,38 +22,13 @@ class Circle{
this
.
gogoChecked
=
false
this
.
gogoChecked
=
false
this
.
beatMS
=
config
.
beatMS
this
.
beatMS
=
config
.
beatMS
this
.
fixedPos
=
config
.
fixedPos
this
.
fixedPos
=
config
.
fixedPos
}
this
.
branch
=
config
.
branch
getMS
(){
this
.
section
=
config
.
section
return
this
.
ms
}
getEndTime
(){
return
this
.
endTime
}
getType
(){
return
this
.
type
}
getLastFrame
(){
return
this
.
lastFrame
}
}
animate
(
ms
){
animate
(
ms
){
this
.
animating
=
true
this
.
animating
=
true
this
.
animT
=
ms
this
.
animT
=
ms
}
}
isAnimated
(){
return
this
.
animating
}
getAnimT
(){
return
this
.
animT
}
getPlayed
(){
return
this
.
isPlayed
}
isAnimationFinished
(){
return
this
.
animationEnded
}
endAnimation
(){
this
.
animationEnded
=
true
}
played
(
score
,
big
){
played
(
score
,
big
){
this
.
score
=
score
this
.
score
=
score
this
.
isPlayed
=
score
<=
0
?
score
-
1
:
(
big
?
2
:
1
)
this
.
isPlayed
=
score
<=
0
?
score
-
1
:
(
big
?
2
:
1
)
...
@@ -65,16 +39,4 @@ class Circle{
...
@@ -65,16 +39,4 @@ class Circle{
this
.
timesKa
++
this
.
timesKa
++
}
}
}
}
getScore
(){
return
this
.
score
}
getID
(){
return
this
.
id
}
getText
(){
return
this
.
text
}
getSpeed
(){
return
this
.
speed
}
}
}
\ No newline at end of file
public/src/js/debug.js
View file @
13ca5e36
...
@@ -8,15 +8,19 @@ class Debug{
...
@@ -8,15 +8,19 @@ class Debug{
this
.
debugDiv
.
innerHTML
=
assets
.
pages
[
"
debug
"
]
this
.
debugDiv
.
innerHTML
=
assets
.
pages
[
"
debug
"
]
document
.
body
.
appendChild
(
this
.
debugDiv
)
document
.
body
.
appendChild
(
this
.
debugDiv
)
this
.
titleDiv
=
this
.
debugDiv
.
getElementsByClassName
(
"
title
"
)[
0
]
this
.
titleDiv
=
this
.
byClass
(
"
title
"
)
this
.
minimiseDiv
=
this
.
debugDiv
.
getElementsByClassName
(
"
minimise
"
)[
0
]
this
.
minimiseDiv
=
this
.
byClass
(
"
minimise
"
)
this
.
offsetDiv
=
this
.
debugDiv
.
getElementsByClassName
(
"
offset
"
)[
0
]
this
.
offsetDiv
=
this
.
byClass
(
"
offset
"
)
this
.
measureNumDiv
=
this
.
debugDiv
.
getElementsByClassName
(
"
measure-num
"
)[
0
]
this
.
measureNumDiv
=
this
.
byClass
(
"
measure-num
"
)
this
.
restartCheckbox
=
this
.
debugDiv
.
getElementsByClassName
(
"
change-restart
"
)[
0
]
this
.
branchHideDiv
=
this
.
byClass
(
"
branch-hide
"
)
this
.
autoplayLabel
=
this
.
debugDiv
.
getElementsByClassName
(
"
autoplay-label
"
)[
0
]
this
.
branchSelectDiv
=
this
.
byClass
(
"
branch-select
"
)
this
.
autoplayCheckbox
=
this
.
debugDiv
.
getElementsByClassName
(
"
autoplay
"
)[
0
]
this
.
branchSelect
=
this
.
branchSelectDiv
.
getElementsByTagName
(
"
select
"
)[
0
]
this
.
restartBtn
=
this
.
debugDiv
.
getElementsByClassName
(
"
restart-btn
"
)[
0
]
this
.
branchResetBtn
=
this
.
branchSelectDiv
.
getElementsByClassName
(
"
reset
"
)[
0
]
this
.
exitBtn
=
this
.
debugDiv
.
getElementsByClassName
(
"
exit-btn
"
)[
0
]
this
.
restartCheckbox
=
this
.
byClass
(
"
change-restart
"
)
this
.
autoplayLabel
=
this
.
byClass
(
"
autoplay-label
"
)
this
.
autoplayCheckbox
=
this
.
byClass
(
"
autoplay
"
)
this
.
restartBtn
=
this
.
byClass
(
"
restart-btn
"
)
this
.
exitBtn
=
this
.
byClass
(
"
exit-btn
"
)
this
.
moving
=
false
this
.
moving
=
false
pageEvents
.
add
(
window
,
[
"
mousedown
"
,
"
mouseup
"
,
"
blur
"
],
this
.
stopMove
.
bind
(
this
))
pageEvents
.
add
(
window
,
[
"
mousedown
"
,
"
mouseup
"
,
"
blur
"
],
this
.
stopMove
.
bind
(
this
))
...
@@ -26,6 +30,8 @@ class Debug{
...
@@ -26,6 +30,8 @@ class Debug{
pageEvents
.
add
(
this
.
restartBtn
,
"
click
"
,
this
.
restartSong
.
bind
(
this
))
pageEvents
.
add
(
this
.
restartBtn
,
"
click
"
,
this
.
restartSong
.
bind
(
this
))
pageEvents
.
add
(
this
.
exitBtn
,
"
click
"
,
this
.
clean
.
bind
(
this
))
pageEvents
.
add
(
this
.
exitBtn
,
"
click
"
,
this
.
clean
.
bind
(
this
))
pageEvents
.
add
(
this
.
autoplayCheckbox
,
"
change
"
,
this
.
toggleAutoplay
.
bind
(
this
))
pageEvents
.
add
(
this
.
autoplayCheckbox
,
"
change
"
,
this
.
toggleAutoplay
.
bind
(
this
))
pageEvents
.
add
(
this
.
branchSelect
,
"
change
"
,
this
.
branchChange
.
bind
(
this
))
pageEvents
.
add
(
this
.
branchResetBtn
,
"
click
"
,
this
.
branchReset
.
bind
(
this
))
this
.
offsetSlider
=
new
InputSlider
(
this
.
offsetDiv
,
-
60
,
60
,
3
)
this
.
offsetSlider
=
new
InputSlider
(
this
.
offsetDiv
,
-
60
,
60
,
3
)
this
.
offsetSlider
.
onchange
(
this
.
offsetChange
.
bind
(
this
))
this
.
offsetSlider
.
onchange
(
this
.
offsetChange
.
bind
(
this
))
...
@@ -39,6 +45,9 @@ class Debug{
...
@@ -39,6 +45,9 @@ class Debug{
this
.
updateStatus
()
this
.
updateStatus
()
pageEvents
.
send
(
"
debug
"
)
pageEvents
.
send
(
"
debug
"
)
}
}
byClass
(
name
){
return
this
.
debugDiv
.
getElementsByClassName
(
name
)[
0
]
}
startMove
(
event
){
startMove
(
event
){
if
(
event
.
which
===
1
){
if
(
event
.
which
===
1
){
event
.
stopPropagation
()
event
.
stopPropagation
()
...
@@ -88,20 +97,28 @@ class Debug{
...
@@ -88,20 +97,28 @@ class Debug{
}
}
updateStatus
(){
updateStatus
(){
if
(
debugObj
.
controller
&&
!
this
.
controller
){
if
(
debugObj
.
controller
&&
!
this
.
controller
){
this
.
controller
=
debugObj
.
controller
this
.
restartBtn
.
style
.
display
=
"
block
"
this
.
restartBtn
.
style
.
display
=
"
block
"
this
.
autoplayLabel
.
style
.
display
=
"
block
"
this
.
autoplayLabel
.
style
.
display
=
"
block
"
if
(
this
.
controller
.
parsedSongData
.
branches
){
this
.
branchHideDiv
.
style
.
display
=
"
block
"
}
this
.
controller
=
debugObj
.
controller
var
selectedSong
=
this
.
controller
.
selectedSong
var
selectedSong
=
this
.
controller
.
selectedSong
this
.
defaultOffset
=
selectedSong
.
offset
||
0
this
.
defaultOffset
=
selectedSong
.
offset
||
0
if
(
this
.
songFolder
===
selectedSong
.
folder
){
if
(
this
.
songFolder
===
selectedSong
.
folder
){
this
.
offsetChange
(
this
.
offsetSlider
.
get
(),
true
)
this
.
offsetChange
(
this
.
offsetSlider
.
get
(),
true
)
this
.
branchChange
(
null
,
true
)
}
else
{
}
else
{
this
.
songFolder
=
selectedSong
.
folder
this
.
songFolder
=
selectedSong
.
folder
this
.
offsetSlider
.
set
(
this
.
defaultOffset
)
this
.
offsetSlider
.
set
(
this
.
defaultOffset
)
this
.
branchReset
(
null
,
true
)
}
}
var
measures
=
this
.
controller
.
parsedSongData
.
measures
var
measures
=
this
.
controller
.
parsedSongData
.
measures
.
filter
((
measure
,
i
,
array
)
=>
{
return
i
===
0
||
Math
.
abs
(
measure
.
ms
-
array
[
i
-
1
].
ms
)
>
0.01
})
this
.
measureNumSlider
.
setMinMax
(
0
,
measures
.
length
-
1
)
this
.
measureNumSlider
.
setMinMax
(
0
,
measures
.
length
-
1
)
if
(
this
.
measureNum
&&
measures
.
length
>
this
.
measureNum
){
if
(
this
.
measureNum
&&
measures
.
length
>
this
.
measureNum
){
var
measureMS
=
measures
[
this
.
measureNum
].
ms
var
measureMS
=
measures
[
this
.
measureNum
].
ms
...
@@ -128,6 +145,7 @@ class Debug{
...
@@ -128,6 +145,7 @@ class Debug{
if
(
this
.
controller
&&
!
debugObj
.
controller
){
if
(
this
.
controller
&&
!
debugObj
.
controller
){
this
.
restartBtn
.
style
.
display
=
""
this
.
restartBtn
.
style
.
display
=
""
this
.
autoplayLabel
.
style
.
display
=
""
this
.
autoplayLabel
.
style
.
display
=
""
this
.
branchHideDiv
.
style
.
display
=
""
this
.
controller
=
null
this
.
controller
=
null
}
}
}
}
...
@@ -142,6 +160,11 @@ class Debug{
...
@@ -142,6 +160,11 @@ class Debug{
songData
.
measures
.
forEach
(
measure
=>
{
songData
.
measures
.
forEach
(
measure
=>
{
measure
.
ms
=
measure
.
originalMS
+
offset
measure
.
ms
=
measure
.
originalMS
+
offset
})
})
if
(
songData
.
branches
){
songData
.
branches
.
forEach
(
branch
=>
{
branch
.
ms
=
branch
.
originalMS
+
offset
})
}
if
(
this
.
restartCheckbox
.
checked
&&
!
noRestart
){
if
(
this
.
restartCheckbox
.
checked
&&
!
noRestart
){
this
.
restartSong
()
this
.
restartSong
()
}
}
...
@@ -171,21 +194,46 @@ class Debug{
...
@@ -171,21 +194,46 @@ class Debug{
}
}
}
}
}
}
branchChange
(
event
,
noRestart
){
if
(
this
.
controller
){
var
game
=
this
.
controller
.
game
var
name
=
this
.
branchSelect
.
value
game
.
branch
=
name
===
"
auto
"
?
false
:
name
game
.
branchSet
=
name
===
"
auto
"
var
selectedOption
=
this
.
branchSelect
.
selectedOptions
[
0
]
this
.
branchSelect
.
style
.
background
=
selectedOption
.
style
.
background
if
(
this
.
restartCheckbox
.
checked
&&
!
noRestart
){
this
.
restartSong
()
}
}
}
branchReset
(
event
,
noRestart
){
this
.
branchSelect
.
value
=
"
auto
"
this
.
branchChange
(
null
,
noRestart
)
}
clean
(){
clean
(){
this
.
offsetSlider
.
clean
()
this
.
offsetSlider
.
clean
()
this
.
measureNumSlider
.
clean
()
pageEvents
.
remove
(
window
,
[
"
mousedown
"
,
"
mouseup
"
,
"
blur
"
])
pageEvents
.
remove
(
window
,
[
"
mousedown
"
,
"
mouseup
"
,
"
blur
"
])
pageEvents
.
mouseRemove
(
this
)
pageEvents
.
mouseRemove
(
this
)
pageEvents
.
remove
(
this
.
titleDiv
,
"
mousedown
"
)
pageEvents
.
remove
(
this
.
title
,
"
mousedown
"
)
pageEvents
.
remove
(
this
.
title
,
"
mousedown
"
)
pageEvents
.
remove
(
this
.
minimiseDiv
,
"
click
"
)
pageEvents
.
remove
(
this
.
minimiseDiv
,
"
click
"
)
pageEvents
.
remove
(
this
.
restartBtn
,
"
click
"
)
pageEvents
.
remove
(
this
.
restartBtn
,
"
click
"
)
pageEvents
.
remove
(
this
.
exitBtn
,
"
click
"
)
pageEvents
.
remove
(
this
.
exitBtn
,
"
click
"
)
pageEvents
.
remove
(
this
.
autoplayCheckbox
,
"
change
"
)
pageEvents
.
remove
(
this
.
autoplayCheckbox
,
"
change
"
)
pageEvents
.
remove
(
this
.
branchSelect
,
"
change
"
)
pageEvents
.
remove
(
this
.
branchResetBtn
,
"
click
"
)
delete
this
.
titleDiv
delete
this
.
titleDiv
delete
this
.
minimiseDiv
delete
this
.
minimiseDiv
delete
this
.
offsetDiv
delete
this
.
offsetDiv
delete
this
.
measureNumDiv
delete
this
.
measureNumDiv
delete
this
.
branchHideDiv
delete
this
.
branchSelectDiv
delete
this
.
branchSelect
delete
this
.
branchResetBtn
delete
this
.
restartCheckbox
delete
this
.
restartCheckbox
delete
this
.
autoplayLabel
delete
this
.
autoplayLabel
delete
this
.
autoplayCheckbox
delete
this
.
autoplayCheckbox
...
...
public/src/js/game.js
View file @
13ca5e36
...
@@ -19,8 +19,8 @@ class Game{
...
@@ -19,8 +19,8 @@ class Game{
difficulty
:
this
.
rules
.
difficulty
difficulty
:
this
.
rules
.
difficulty
}
}
this
.
HPGain
=
100
/
this
.
songData
.
circles
.
filter
(
circle
=>
{
this
.
HPGain
=
100
/
this
.
songData
.
circles
.
filter
(
circle
=>
{
var
type
=
circle
.
getType
()
var
type
=
circle
.
type
return
type
===
"
don
"
||
type
===
"
ka
"
||
type
===
"
daiDon
"
||
type
===
"
daiKa
"
return
(
type
===
"
don
"
||
type
===
"
ka
"
||
type
===
"
daiDon
"
||
type
===
"
daiKa
"
)
&&
(
!
circle
.
branch
||
circle
.
branch
.
active
)
}).
length
}).
length
this
.
paused
=
false
this
.
paused
=
false
this
.
started
=
false
this
.
started
=
false
...
@@ -28,6 +28,8 @@ class Game{
...
@@ -28,6 +28,8 @@ class Game{
this
.
musicFadeOut
=
0
this
.
musicFadeOut
=
0
this
.
fadeOutStarted
=
false
this
.
fadeOutStarted
=
false
this
.
currentTimingPoint
=
0
this
.
currentTimingPoint
=
0
this
.
branchNames
=
[
"
normal
"
,
"
advanced
"
,
"
master
"
]
this
.
resetSection
()
assets
.
songs
.
forEach
(
song
=>
{
assets
.
songs
.
forEach
(
song
=>
{
if
(
song
.
id
==
selectedSong
.
folder
){
if
(
song
.
id
==
selectedSong
.
folder
){
...
@@ -69,17 +71,18 @@ class Game{
...
@@ -69,17 +71,18 @@ class Game{
}
}
updateCirclesStatus
(){
updateCirclesStatus
(){
var
nextSet
=
false
var
nextSet
=
false
var
ms
=
this
.
elapsedTime
var
circles
=
this
.
songData
.
circles
var
circles
=
this
.
songData
.
circles
var
startIndex
=
this
.
currentCircle
===
0
?
0
:
this
.
currentCircle
-
1
var
startIndex
=
this
.
currentCircle
===
0
?
0
:
this
.
currentCircle
-
1
for
(
var
i
=
startIndex
;
i
<
circles
.
length
&&
i
<
this
.
currentCircle
+
2
;
i
++
){
var
index
=
0
for
(
var
i
=
startIndex
;
i
<
circles
.
length
;
i
++
){
var
circle
=
circles
[
i
]
var
circle
=
circles
[
i
]
if
(
!
circle
.
getPlayed
()){
if
(
circle
&&
(
!
circle
.
branch
||
circle
.
branch
.
active
)
&&
!
circle
.
isPlayed
){
var
ms
=
this
.
elapsedTime
var
type
=
circle
.
type
var
type
=
circle
.
getType
()
var
drumrollNotes
=
type
===
"
balloon
"
||
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
var
drumrollNotes
=
type
===
"
balloon
"
||
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
var
endTime
=
circle
.
getEndTime
()
+
(
drumrollNotes
?
0
:
this
.
rules
.
bad
)
var
endTime
=
circle
.
endTime
+
(
drumrollNotes
?
0
:
this
.
rules
.
bad
)
if
(
ms
>=
circle
.
getMS
()
){
if
(
ms
>=
circle
.
ms
){
if
(
drumrollNotes
&&
!
circle
.
rendaPlayed
&&
ms
<
endTime
){
if
(
drumrollNotes
&&
!
circle
.
rendaPlayed
&&
ms
<
endTime
){
circle
.
rendaPlayed
=
true
circle
.
rendaPlayed
=
true
if
(
this
.
rules
.
difficulty
===
"
easy
"
){
if
(
this
.
rules
.
difficulty
===
"
easy
"
){
...
@@ -97,11 +100,14 @@ class Game{
...
@@ -97,11 +100,14 @@ class Game{
if
(
ms
>
endTime
){
if
(
ms
>
endTime
){
if
(
!
this
.
controller
.
autoPlayEnabled
){
if
(
!
this
.
controller
.
autoPlayEnabled
){
if
(
drumrollNotes
){
if
(
drumrollNotes
){
if
(
circle
.
section
&&
circle
.
timesHit
===
0
){
this
.
resetSection
()
}
circle
.
played
(
-
1
,
false
)
circle
.
played
(
-
1
,
false
)
this
.
updateCurrentCircle
()
this
.
updateCurrentCircle
()
if
(
this
.
controller
.
multiplayer
===
1
){
if
(
this
.
controller
.
multiplayer
===
1
){
var
value
=
{
var
value
=
{
pace
:
(
ms
-
circle
.
getMS
()
)
/
circle
.
timesHit
pace
:
(
ms
-
circle
.
ms
)
/
circle
.
timesHit
}
}
if
(
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
){
if
(
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
){
value
.
kaAmount
=
circle
.
timesKa
/
circle
.
timesHit
value
.
kaAmount
=
circle
.
timesKa
/
circle
.
timesHit
...
@@ -109,8 +115,12 @@ class Game{
...
@@ -109,8 +115,12 @@ class Game{
p2
.
send
(
"
drumroll
"
,
value
)
p2
.
send
(
"
drumroll
"
,
value
)
}
}
}
else
{
}
else
{
if
(
circle
.
section
){
this
.
resetSection
()
}
var
currentScore
=
0
var
currentScore
=
0
circle
.
played
(
-
1
,
type
===
"
daiDon
"
||
type
===
"
daiKa
"
)
circle
.
played
(
-
1
,
type
===
"
daiDon
"
||
type
===
"
daiKa
"
)
this
.
sectionNotes
.
push
(
0
)
this
.
controller
.
displayScore
(
currentScore
,
true
)
this
.
controller
.
displayScore
(
currentScore
,
true
)
this
.
updateCurrentCircle
()
this
.
updateCurrentCircle
()
this
.
updateCombo
(
currentScore
)
this
.
updateCombo
(
currentScore
)
...
@@ -126,6 +136,71 @@ class Game{
...
@@ -126,6 +136,71 @@ class Game{
nextSet
=
true
nextSet
=
true
this
.
currentCircle
=
i
this
.
currentCircle
=
i
}
}
if
(
index
++
>
1
){
break
}
}
}
var
branches
=
this
.
songData
.
branches
if
(
branches
){
var
force
=
this
.
controller
.
multiplayer
===
2
?
p2
:
this
var
measures
=
this
.
songData
.
measures
if
(
this
.
controller
.
multiplayer
===
2
||
force
.
branch
){
if
(
!
force
.
branchSet
){
force
.
branchSet
=
true
if
(
branches
.
length
){
this
.
setBranch
(
branches
[
0
],
force
.
branch
)
}
var
view
=
this
.
controller
.
view
var
currentMeasure
=
view
.
branch
for
(
var
i
=
measures
.
length
;
i
--
;){
var
measure
=
measures
[
i
]
if
(
measure
.
nextBranch
&&
measure
.
ms
<=
ms
){
currentMeasure
=
measure
.
nextBranch
.
active
}
}
if
(
view
.
branch
!==
currentMeasure
){
view
.
branchAnimate
=
{
ms
:
ms
,
fromBranch
:
view
.
branch
}
view
.
branch
=
currentMeasure
}
}
}
for
(
var
i
=
0
;
i
<
measures
.
length
;
i
++
){
var
measure
=
measures
[
i
]
if
(
measure
.
ms
>
ms
){
break
}
else
if
(
measure
.
nextBranch
&&
!
measure
.
gameChecked
){
measure
.
gameChecked
=
true
var
branch
=
measure
.
nextBranch
if
(
branch
.
type
){
var
accuracy
=
0
if
(
branch
.
type
===
"
drumroll
"
){
if
(
force
.
branch
){
var
accuracy
=
Math
.
max
(
0
,
branch
.
requirement
[
force
.
branch
])
}
else
{
var
accuracy
=
this
.
sectionDrumroll
}
}
else
if
(
this
.
sectionNotes
.
length
!==
0
){
if
(
force
.
branch
){
var
accuracy
=
Math
.
max
(
0
,
Math
.
min
(
100
,
branch
.
requirement
[
force
.
branch
]))
}
else
{
var
accuracy
=
this
.
sectionNotes
.
reduce
((
a
,
b
)
=>
a
+
b
)
/
this
.
sectionNotes
.
length
*
100
}
}
if
(
accuracy
>=
branch
.
requirement
.
master
){
this
.
setBranch
(
branch
,
"
master
"
)
}
else
if
(
accuracy
>=
branch
.
requirement
.
advanced
){
this
.
setBranch
(
branch
,
"
advanced
"
)
}
else
{
this
.
setBranch
(
branch
,
"
normal
"
)
}
}
else
if
(
this
.
controller
.
multiplayer
===
1
){
p2
.
send
(
"
branch
"
,
"
normal
"
)
}
}
}
}
}
}
}
}
...
@@ -160,7 +235,7 @@ class Game{
...
@@ -160,7 +235,7 @@ class Game{
}
}
}
}
checkKey
(
keyCodes
,
circle
,
check
){
checkKey
(
keyCodes
,
circle
,
check
){
if
(
circle
&&
!
circle
.
getPlayed
()
){
if
(
circle
&&
!
circle
.
isPlayed
){
if
(
!
this
.
checkScore
(
circle
,
check
)){
if
(
!
this
.
checkScore
(
circle
,
check
)){
return
return
}
}
...
@@ -171,7 +246,7 @@ class Game{
...
@@ -171,7 +246,7 @@ class Game{
}
}
checkScore
(
circle
,
check
){
checkScore
(
circle
,
check
){
var
ms
=
this
.
elapsedTime
var
ms
=
this
.
elapsedTime
var
type
=
circle
.
getType
()
var
type
=
circle
.
type
var
keysDon
=
check
===
"
don
"
||
check
===
"
daiDon
"
var
keysDon
=
check
===
"
don
"
||
check
===
"
daiDon
"
var
keysKa
=
check
===
"
ka
"
||
check
===
"
daiKa
"
var
keysKa
=
check
===
"
ka
"
||
check
===
"
daiKa
"
...
@@ -182,7 +257,7 @@ class Game{
...
@@ -182,7 +257,7 @@ class Game{
var
keyTime
=
this
.
controller
.
getKeyTime
()
var
keyTime
=
this
.
controller
.
getKeyTime
()
var
currentTime
=
keysDon
?
keyTime
[
"
don
"
]
:
keyTime
[
"
ka
"
]
var
currentTime
=
keysDon
?
keyTime
[
"
don
"
]
:
keyTime
[
"
ka
"
]
var
relative
=
currentTime
-
circle
.
getMS
()
var
relative
=
currentTime
-
circle
.
ms
if
(
typeDon
||
typeKa
){
if
(
typeDon
||
typeKa
){
if
(
-
this
.
rules
.
bad
>=
relative
||
relative
>=
this
.
rules
.
bad
){
if
(
-
this
.
rules
.
bad
>=
relative
||
relative
>=
this
.
rules
.
bad
){
...
@@ -219,10 +294,14 @@ class Game{
...
@@ -219,10 +294,14 @@ class Game{
this
.
updateCombo
(
score
)
this
.
updateCombo
(
score
)
this
.
updateGlobalScore
(
score
,
typeDai
&&
keyDai
?
2
:
1
,
circle
.
gogoTime
)
this
.
updateGlobalScore
(
score
,
typeDai
&&
keyDai
?
2
:
1
,
circle
.
gogoTime
)
this
.
updateCurrentCircle
()
this
.
updateCurrentCircle
()
if
(
this
.
controller
.
multiplayer
==
1
){
if
(
circle
.
section
){
this
.
resetSection
()
}
this
.
sectionNotes
.
push
(
score
===
450
?
1
:
(
score
===
230
?
0.5
:
0
))
if
(
this
.
controller
.
multiplayer
===
1
){
var
value
=
{
var
value
=
{
score
:
score
,
score
:
score
,
ms
:
circle
.
getMS
()
-
currentTime
,
ms
:
circle
.
ms
-
currentTime
,
dai
:
typeDai
?
keyDai
?
2
:
1
:
0
dai
:
typeDai
?
keyDai
?
2
:
1
:
0
}
}
if
((
!
keysDon
||
!
typeDon
)
&&
(
!
keysKa
||
!
typeKa
)){
if
((
!
keysDon
||
!
typeDon
)
&&
(
!
keysKa
||
!
typeKa
)){
...
@@ -231,12 +310,12 @@ class Game{
...
@@ -231,12 +310,12 @@ class Game{
p2
.
send
(
"
note
"
,
value
)
p2
.
send
(
"
note
"
,
value
)
}
}
}
else
{
}
else
{
if
(
circle
.
getMS
()
>
currentTime
||
currentTime
>
circle
.
getEndTime
()
){
if
(
circle
.
ms
>
currentTime
||
currentTime
>
circle
.
endTime
){
return
true
return
true
}
}
if
(
keysDon
&&
type
===
"
balloon
"
){
if
(
keysDon
&&
type
===
"
balloon
"
){
this
.
checkBalloon
(
circle
)
this
.
checkBalloon
(
circle
)
if
(
check
===
"
daiDon
"
&&
!
circle
.
getPlayed
()
){
if
(
check
===
"
daiDon
"
&&
!
circle
.
isPlayed
){
this
.
checkBalloon
(
circle
)
this
.
checkBalloon
(
circle
)
}
}
}
else
if
((
keysDon
||
keysKa
)
&&
(
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
)){
}
else
if
((
keysDon
||
keysKa
)
&&
(
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
)){
...
@@ -256,24 +335,28 @@ class Game{
...
@@ -256,24 +335,28 @@ class Game{
circle
.
played
(
score
)
circle
.
played
(
score
)
if
(
this
.
controller
.
multiplayer
==
1
){
if
(
this
.
controller
.
multiplayer
==
1
){
p2
.
send
(
"
drumroll
"
,
{
p2
.
send
(
"
drumroll
"
,
{
pace
:
(
this
.
elapsedTime
-
circle
.
getMS
()
)
/
circle
.
timesHit
pace
:
(
this
.
elapsedTime
-
circle
.
ms
)
/
circle
.
timesHit
})
})
}
}
}
else
{
}
else
{
var
score
=
300
var
score
=
300
circle
.
hit
()
circle
.
hit
()
}
}
this
.
globalScore
.
drumroll
++
this
.
globalScore
.
drumroll
++
this
.
sectionDrumroll
++
this
.
globalScore
.
points
+=
score
this
.
globalScore
.
points
+=
score
this
.
view
.
setDarkBg
(
false
)
this
.
view
.
setDarkBg
(
false
)
}
}
checkDrumroll
(
circle
,
keysKa
){
checkDrumroll
(
circle
,
keysKa
){
var
ms
=
this
.
elapsedTime
var
ms
=
this
.
elapsedTime
var
dai
=
circle
.
getType
()
===
"
daiDrumroll
"
var
dai
=
circle
.
type
===
"
daiDrumroll
"
var
score
=
100
var
score
=
100
if
(
circle
.
section
&&
circle
.
timesHit
===
0
){
this
.
resetSection
()
}
circle
.
hit
(
keysKa
)
circle
.
hit
(
keysKa
)
var
keyTime
=
this
.
controller
.
getKeyTime
()
var
keyTime
=
this
.
controller
.
getKeyTime
()
if
(
circle
.
getType
()
===
"
drumroll
"
){
if
(
circle
.
type
===
"
drumroll
"
){
var
sound
=
keyTime
[
"
don
"
]
>
keyTime
[
"
ka
"
]
?
"
don
"
:
"
ka
"
var
sound
=
keyTime
[
"
don
"
]
>
keyTime
[
"
ka
"
]
?
"
don
"
:
"
ka
"
}
else
{
}
else
{
var
sound
=
keyTime
[
"
don
"
]
>
keyTime
[
"
ka
"
]
?
"
daiDon
"
:
"
daiKa
"
var
sound
=
keyTime
[
"
don
"
]
>
keyTime
[
"
ka
"
]
?
"
daiDon
"
:
"
daiKa
"
...
@@ -291,6 +374,7 @@ class Game{
...
@@ -291,6 +374,7 @@ class Game{
circleAnim
.
animate
(
ms
)
circleAnim
.
animate
(
ms
)
this
.
view
.
drumroll
.
push
(
circleAnim
)
this
.
view
.
drumroll
.
push
(
circleAnim
)
this
.
globalScore
.
drumroll
++
this
.
globalScore
.
drumroll
++
this
.
sectionDrumroll
++
this
.
globalScore
.
points
+=
score
*
(
dai
?
2
:
1
)
this
.
globalScore
.
points
+=
score
*
(
dai
?
2
:
1
)
this
.
view
.
setDarkBg
(
false
)
this
.
view
.
setDarkBg
(
false
)
}
}
...
@@ -298,11 +382,11 @@ class Game{
...
@@ -298,11 +382,11 @@ class Game{
var
ms
=
this
.
elapsedTime
var
ms
=
this
.
elapsedTime
if
(
!
this
.
lastCircle
){
if
(
!
this
.
lastCircle
){
var
circles
=
this
.
songData
.
circles
var
circles
=
this
.
songData
.
circles
this
.
lastCircle
=
circles
[
circles
.
length
-
1
].
getEndTime
()
this
.
lastCircle
=
circles
[
circles
.
length
-
1
].
endTime
if
(
this
.
controller
.
multiplayer
){
if
(
this
.
controller
.
multiplayer
){
var
syncWith
=
this
.
controller
.
syncWith
var
syncWith
=
this
.
controller
.
syncWith
var
syncCircles
=
syncWith
.
game
.
songData
.
circles
var
syncCircles
=
syncWith
.
game
.
songData
.
circles
var
syncLastCircle
=
syncCircles
[
syncCircles
.
length
-
1
].
getEndTime
()
var
syncLastCircle
=
syncCircles
[
syncCircles
.
length
-
1
].
endTime
if
(
syncLastCircle
>
this
.
lastCircle
){
if
(
syncLastCircle
>
this
.
lastCircle
){
this
.
lastCircle
=
syncLastCircle
this
.
lastCircle
=
syncLastCircle
}
}
...
@@ -410,7 +494,10 @@ class Game{
...
@@ -410,7 +494,10 @@ class Game{
return
this
.
songData
.
circles
return
this
.
songData
.
circles
}
}
updateCurrentCircle
(){
updateCurrentCircle
(){
this
.
currentCircle
++
var
circles
=
this
.
songData
.
circles
do
{
var
circle
=
circles
[
++
this
.
currentCircle
]
}
while
(
circle
&&
circle
.
branch
&&
!
circle
.
branch
.
active
)
}
}
getCurrentCircle
(){
getCurrentCircle
(){
return
this
.
currentCircle
return
this
.
currentCircle
...
@@ -464,4 +551,59 @@ class Game{
...
@@ -464,4 +551,59 @@ class Game{
}
}
this
.
globalScore
.
points
+=
Math
.
floor
(
score
*
multiplier
/
10
)
*
10
this
.
globalScore
.
points
+=
Math
.
floor
(
score
*
multiplier
/
10
)
*
10
}
}
setBranch
(
currentBranch
,
activeName
){
var
pastActive
=
currentBranch
.
active
var
ms
=
currentBranch
.
ms
for
(
var
i
=
0
;
i
<
this
.
songData
.
branches
.
length
;
i
++
){
var
branch
=
this
.
songData
.
branches
[
i
]
if
(
branch
.
ms
>=
ms
){
var
relevantName
=
activeName
var
req
=
branch
.
requirement
var
noNormal
=
req
.
advanced
<=
0
var
noAdvanced
=
req
.
master
<=
0
||
req
.
advanced
>=
req
.
master
||
branch
.
type
===
"
accuracy
"
&&
req
.
advanced
>
100
var
noMaster
=
branch
.
type
===
"
accuracy
"
&&
req
.
master
>
100
if
(
relevantName
===
"
normal
"
&&
noNormal
){
relevantName
=
noAdvanced
?
"
master
"
:
"
advanced
"
}
if
(
relevantName
===
"
advanced
"
&&
noAdvanced
){
relevantName
=
noMaster
?
"
normal
"
:
"
master
"
}
if
(
relevantName
===
"
master
"
&&
noMaster
){
relevantName
=
noAdvanced
?
"
normal
"
:
"
advanced
"
}
for
(
var
j
in
this
.
branchNames
){
var
name
=
this
.
branchNames
[
j
]
if
(
name
in
branch
){
branch
[
name
].
active
=
name
===
relevantName
}
}
if
(
branch
===
currentBranch
){
activeName
=
relevantName
}
branch
.
active
=
relevantName
}
}
var
circles
=
this
.
songData
.
circles
var
circle
=
circles
[
this
.
currentCircle
]
if
(
!
circle
||
circle
.
branch
===
currentBranch
[
pastActive
]){
var
ms
=
this
.
elapsedTime
var
closestCircle
=
circles
.
findIndex
(
circle
=>
{
return
(
!
circle
.
branch
||
circle
.
branch
.
active
)
&&
circle
.
endTime
>=
ms
})
if
(
closestCircle
!==
-
1
){
this
.
currentCircle
=
closestCircle
}
}
this
.
HPGain
=
100
/
this
.
songData
.
circles
.
filter
(
circle
=>
{
var
type
=
circle
.
type
return
(
type
===
"
don
"
||
type
===
"
ka
"
||
type
===
"
daiDon
"
||
type
===
"
daiKa
"
)
&&
(
!
circle
.
branch
||
circle
.
branch
.
active
)
}).
length
if
(
this
.
controller
.
multiplayer
===
1
){
p2
.
send
(
"
branch
"
,
activeName
)
}
}
resetSection
(){
this
.
sectionNotes
=
[]
this
.
sectionDrumroll
=
0
}
}
}
public/src/js/importsongs.js
View file @
13ca5e36
...
@@ -199,7 +199,7 @@
...
@@ -199,7 +199,7 @@
songObj
.
subtitle
=
songObj
.
subtitle_en
=
subtitle
songObj
.
subtitle
=
songObj
.
subtitle_en
=
subtitle
songObj
.
preview
=
meta
.
demostart
?
Math
.
floor
(
meta
.
demostart
*
1000
)
:
0
songObj
.
preview
=
meta
.
demostart
?
Math
.
floor
(
meta
.
demostart
*
1000
)
:
0
if
(
meta
.
level
){
if
(
meta
.
level
){
songObj
.
stars
[
this
.
courseTypes
[
diff
]]
=
meta
.
level
songObj
.
stars
[
this
.
courseTypes
[
diff
]]
=
meta
.
level
+
(
meta
.
branch
?
"
B
"
:
""
)
}
}
if
(
meta
.
wave
){
if
(
meta
.
wave
){
songObj
.
music
=
this
.
otherFiles
[
dir
+
meta
.
wave
.
toLowerCase
()]
songObj
.
music
=
this
.
otherFiles
[
dir
+
meta
.
wave
.
toLowerCase
()]
...
...
public/src/js/keyboard.js
View file @
13ca5e36
...
@@ -199,8 +199,8 @@ class Keyboard{
...
@@ -199,8 +199,8 @@ class Keyboard{
if
(
if
(
sound
===
"
don
"
sound
===
"
don
"
&&
circle
&&
circle
&&
!
circle
.
getPlayed
()
&&
!
circle
.
isPlayed
&&
circle
.
getType
()
===
"
balloon
"
&&
circle
.
type
===
"
balloon
"
&&
circle
.
requiredHits
-
circle
.
timesHit
<=
1
&&
circle
.
requiredHits
-
circle
.
timesHit
<=
1
){
){
this
.
controller
.
playSound
(
"
se_balloon
"
)
this
.
controller
.
playSound
(
"
se_balloon
"
)
...
...
public/src/js/main.js
View file @
13ca5e36
...
@@ -106,7 +106,9 @@ pageEvents.keyAdd(debugObj, "all", "down", event => {
...
@@ -106,7 +106,9 @@ pageEvents.keyAdd(debugObj, "all", "down", event => {
}
else
if
(
debugObj
.
state
===
"
minimised
"
){
}
else
if
(
debugObj
.
state
===
"
minimised
"
){
debugObj
.
debug
.
restore
()
debugObj
.
debug
.
restore
()
}
else
{
}
else
{
try
{
debugObj
.
debug
=
new
Debug
()
debugObj
.
debug
=
new
Debug
()
}
catch
(
e
){}
}
}
}
}
if
(
event
.
keyCode
===
82
&&
debugObj
.
debug
&&
debugObj
.
controller
){
if
(
event
.
keyCode
===
82
&&
debugObj
.
debug
&&
debugObj
.
controller
){
...
...
public/src/js/mekadon.js
View file @
13ca5e36
...
@@ -6,12 +6,15 @@ class Mekadon{
...
@@ -6,12 +6,15 @@ class Mekadon{
this
.
lastHit
=
-
Infinity
this
.
lastHit
=
-
Infinity
}
}
play
(
circle
){
play
(
circle
){
var
type
=
circle
.
getType
()
var
type
=
circle
.
type
if
((
type
===
"
balloon
"
||
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
)
&&
this
.
getMS
()
>
circle
.
getEndTime
()){
if
((
type
===
"
balloon
"
||
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
)
&&
this
.
getMS
()
>
circle
.
endTime
){
if
(
circle
.
section
&&
circle
.
timesHit
===
0
){
this
.
game
.
resetSection
()
}
circle
.
played
(
-
1
,
false
)
circle
.
played
(
-
1
,
false
)
this
.
game
.
updateCurrentCircle
()
this
.
game
.
updateCurrentCircle
()
}
}
type
=
circle
.
getType
()
type
=
circle
.
type
if
(
type
===
"
balloon
"
){
if
(
type
===
"
balloon
"
){
this
.
playDrumrollAt
(
circle
,
0
,
30
)
this
.
playDrumrollAt
(
circle
,
0
,
30
)
}
else
if
(
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
){
}
else
if
(
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
){
...
@@ -21,7 +24,7 @@ class Mekadon{
...
@@ -21,7 +24,7 @@ class Mekadon{
}
}
}
}
playAt
(
circle
,
ms
,
score
,
dai
,
reverse
){
playAt
(
circle
,
ms
,
score
,
dai
,
reverse
){
var
currentMs
=
circle
.
getMS
()
-
this
.
getMS
()
var
currentMs
=
circle
.
ms
-
this
.
getMS
()
if
(
ms
>
currentMs
-
10
){
if
(
ms
>
currentMs
-
10
){
return
this
.
playNow
(
circle
,
score
,
dai
,
reverse
)
return
this
.
playNow
(
circle
,
score
,
dai
,
reverse
)
}
}
...
@@ -36,18 +39,19 @@ class Mekadon{
...
@@ -36,18 +39,19 @@ class Mekadon{
}
}
}
}
miss
(
circle
){
miss
(
circle
){
var
currentMs
=
circle
.
getMS
()
-
this
.
getMS
()
var
currentMs
=
circle
.
ms
-
this
.
getMS
()
if
(
0
>=
currentMs
-
10
){
if
(
0
>=
currentMs
-
10
){
this
.
controller
.
displayScore
(
0
,
true
)
this
.
controller
.
displayScore
(
0
,
true
)
this
.
game
.
updateCurrentCircle
()
this
.
game
.
updateCurrentCircle
()
this
.
game
.
updateCombo
(
0
)
this
.
game
.
updateCombo
(
0
)
this
.
game
.
updateGlobalScore
(
0
,
1
,
circle
.
gogoTime
)
this
.
game
.
updateGlobalScore
(
0
,
1
,
circle
.
gogoTime
)
this
.
game
.
sectionNotes
.
push
(
0
)
return
true
return
true
}
}
}
}
playNow
(
circle
,
score
,
dai
,
reverse
){
playNow
(
circle
,
score
,
dai
,
reverse
){
var
kbd
=
this
.
controller
.
getBindings
()
var
kbd
=
this
.
controller
.
getBindings
()
var
type
=
circle
.
getType
()
var
type
=
circle
.
type
var
keyDai
=
false
var
keyDai
=
false
var
playDai
=
!
dai
||
dai
===
2
var
playDai
=
!
dai
||
dai
===
2
var
drumrollNotes
=
type
===
"
balloon
"
||
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
var
drumrollNotes
=
type
===
"
balloon
"
||
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
...
@@ -55,7 +59,7 @@ class Mekadon{
...
@@ -55,7 +59,7 @@ class Mekadon{
if
(
drumrollNotes
){
if
(
drumrollNotes
){
var
ms
=
this
.
getMS
()
var
ms
=
this
.
getMS
()
}
else
{
}
else
{
var
ms
=
circle
.
getMS
()
var
ms
=
circle
.
ms
}
}
if
(
reverse
){
if
(
reverse
){
...
@@ -95,6 +99,10 @@ class Mekadon{
...
@@ -95,6 +99,10 @@ class Mekadon{
this
.
game
.
updateGlobalScore
(
score
,
keyDai
?
2
:
1
,
circle
.
gogoTime
)
this
.
game
.
updateGlobalScore
(
score
,
keyDai
?
2
:
1
,
circle
.
gogoTime
)
this
.
game
.
updateCurrentCircle
()
this
.
game
.
updateCurrentCircle
()
circle
.
played
(
score
,
keyDai
)
circle
.
played
(
score
,
keyDai
)
if
(
circle
.
section
){
this
.
game
.
resetSection
()
}
this
.
game
.
sectionNotes
.
push
(
score
===
450
?
1
:
(
score
===
230
?
0.5
:
0
))
}
}
this
.
lastHit
=
ms
this
.
lastHit
=
ms
return
true
return
true
...
...
public/src/js/p2.js
View file @
13ca5e36
...
@@ -109,6 +109,7 @@ class P2Connection{
...
@@ -109,6 +109,7 @@ class P2Connection{
this
.
dai
=
2
this
.
dai
=
2
this
.
kaAmount
=
0
this
.
kaAmount
=
0
this
.
results
=
false
this
.
results
=
false
this
.
branch
=
"
normal
"
break
break
case
"
gameend
"
:
case
"
gameend
"
:
this
.
otherConnected
=
false
this
.
otherConnected
=
false
...
@@ -141,6 +142,10 @@ class P2Connection{
...
@@ -141,6 +142,10 @@ class P2Connection{
this
.
kaAmount
=
response
.
value
.
kaAmount
this
.
kaAmount
=
response
.
value
.
kaAmount
}
}
break
break
case
"
branch
"
:
this
.
branch
=
response
.
value
this
.
branchSet
=
false
break
case
"
session
"
:
case
"
session
"
:
this
.
clearMessage
(
"
users
"
)
this
.
clearMessage
(
"
users
"
)
this
.
otherConnected
=
true
this
.
otherConnected
=
true
...
@@ -161,10 +166,10 @@ class P2Connection{
...
@@ -161,10 +166,10 @@ class P2Connection{
}
}
play
(
circle
,
mekadon
){
play
(
circle
,
mekadon
){
if
(
this
.
otherConnected
||
this
.
notes
.
length
>
0
){
if
(
this
.
otherConnected
||
this
.
notes
.
length
>
0
){
var
type
=
circle
.
getType
()
var
type
=
circle
.
type
var
drumrollNotes
=
type
===
"
balloon
"
||
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
var
drumrollNotes
=
type
===
"
balloon
"
||
type
===
"
drumroll
"
||
type
===
"
daiDrumroll
"
if
(
drumrollNotes
&&
mekadon
.
getMS
()
>
circle
.
getEndTime
()
){
if
(
drumrollNotes
&&
mekadon
.
getMS
()
>
circle
.
endTime
){
circle
.
played
(
-
1
,
false
)
circle
.
played
(
-
1
,
false
)
mekadon
.
game
.
updateCurrentCircle
()
mekadon
.
game
.
updateCurrentCircle
()
}
}
...
@@ -177,7 +182,7 @@ class P2Connection{
...
@@ -177,7 +182,7 @@ class P2Connection{
var
note
=
this
.
notes
[
0
]
var
note
=
this
.
notes
[
0
]
if
(
note
.
score
>=
0
){
if
(
note
.
score
>=
0
){
var
dai
=
1
var
dai
=
1
if
(
circle
.
getType
()
===
"
daiDon
"
||
circle
.
getType
()
===
"
daiKa
"
){
if
(
circle
.
type
===
"
daiDon
"
||
circle
.
type
===
"
daiKa
"
){
dai
=
this
.
dai
dai
=
this
.
dai
}
}
if
(
mekadon
.
playAt
(
circle
,
note
.
ms
,
note
.
score
,
dai
,
note
.
reverse
)){
if
(
mekadon
.
playAt
(
circle
,
note
.
ms
,
note
.
score
,
dai
,
note
.
reverse
)){
...
...
public/src/js/parsetja.js
View file @
13ca5e36
...
@@ -59,8 +59,10 @@
...
@@ -59,8 +59,10 @@
if
(
!
(
courseName
in
courses
)){
if
(
!
(
courseName
in
courses
)){
courses
[
courseName
]
=
{}
courses
[
courseName
]
=
{}
}
}
if
(
name
!==
"
branch
"
){
courses
[
courseName
][
name
]
=
currentCourse
[
name
]
courses
[
courseName
][
name
]
=
currentCourse
[
name
]
}
}
}
courses
[
courseName
].
start
=
lineNum
+
1
courses
[
courseName
].
start
=
lineNum
+
1
courses
[
courseName
].
end
=
this
.
data
.
length
courses
[
courseName
].
end
=
this
.
data
.
length
}
}
...
@@ -70,6 +72,8 @@
...
@@ -70,6 +72,8 @@
hasSong
=
true
hasSong
=
true
courses
[
courseName
].
end
=
lineNum
courses
[
courseName
].
end
=
lineNum
}
}
}
else
if
(
name
.
startsWith
(
"
branchstart
"
)
&&
inSong
){
courses
[
courseName
].
branch
=
true
}
}
}
else
if
(
!
inSong
){
}
else
if
(
!
inSong
){
...
@@ -128,9 +132,13 @@
...
@@ -128,9 +132,13 @@
var
balloons
=
meta
.
balloon
||
[]
var
balloons
=
meta
.
balloon
||
[]
var
lastDrumroll
=
false
var
lastDrumroll
=
false
var
branch
=
false
var
branch
=
false
var
branchType
var
branchObj
=
{}
var
branchPreference
=
"
m
"
var
currentBranch
=
false
var
branchSettings
=
{}
var
branchFirstMeasure
=
false
var
sectionBegin
=
true
var
currentMeasure
=
[]
var
currentMeasure
=
[]
var
firstNote
=
true
var
firstNote
=
true
...
@@ -138,7 +146,6 @@
...
@@ -138,7 +146,6 @@
var
circleID
=
0
var
circleID
=
0
var
pushMeasure
=
()
=>
{
var
pushMeasure
=
()
=>
{
if
(
barLine
){
var
note
=
currentMeasure
[
0
]
var
note
=
currentMeasure
[
0
]
if
(
note
){
if
(
note
){
var
speed
=
note
.
bpm
*
note
.
scroll
/
60
var
speed
=
note
.
bpm
*
note
.
scroll
/
60
...
@@ -148,9 +155,12 @@
...
@@ -148,9 +155,12 @@
this
.
measures
.
push
({
this
.
measures
.
push
({
ms
:
ms
,
ms
:
ms
,
originalMS
:
ms
,
originalMS
:
ms
,
speed
:
speed
speed
:
speed
,
visible
:
barLine
,
branch
:
currentBranch
,
branchFirst
:
branchFirstMeasure
})
})
}
branchFirstMeasure
=
false
if
(
currentMeasure
.
length
){
if
(
currentMeasure
.
length
){
for
(
var
i
=
0
;
i
<
currentMeasure
.
length
;
i
++
){
for
(
var
i
=
0
;
i
<
currentMeasure
.
length
;
i
++
){
var
note
=
currentMeasure
[
i
]
var
note
=
currentMeasure
[
i
]
...
@@ -182,7 +192,9 @@
...
@@ -182,7 +192,9 @@
gogoTime
:
note
.
gogo
,
gogoTime
:
note
.
gogo
,
endTime
:
note
.
endTime
,
endTime
:
note
.
endTime
,
requiredHits
:
note
.
requiredHits
,
requiredHits
:
note
.
requiredHits
,
beatMS
:
60000
/
note
.
bpm
beatMS
:
60000
/
note
.
bpm
,
branch
:
currentBranch
,
section
:
note
.
section
})
})
if
(
lastDrumroll
===
note
){
if
(
lastDrumroll
===
note
){
lastDrumroll
=
circleObj
lastDrumroll
=
circleObj
...
@@ -204,7 +216,6 @@
...
@@ -204,7 +216,6 @@
var
line
=
line
.
slice
(
1
).
toLowerCase
()
var
line
=
line
.
slice
(
1
).
toLowerCase
()
var
[
name
,
value
]
=
this
.
split
(
line
,
"
"
)
var
[
name
,
value
]
=
this
.
split
(
line
,
"
"
)
if
(
!
branch
||
branch
&&
branchType
===
branchPreference
){
switch
(
name
){
switch
(
name
){
case
"
gogostart
"
:
case
"
gogostart
"
:
gogo
=
true
gogo
=
true
...
@@ -213,14 +224,14 @@
...
@@ -213,14 +224,14 @@
gogo
=
false
gogo
=
false
break
break
case
"
bpmchange
"
:
case
"
bpmchange
"
:
bpm
=
parseFloat
(
value
)
bpm
=
parseFloat
(
value
)
||
bpm
break
break
case
"
scroll
"
:
case
"
scroll
"
:
scroll
=
parseFloat
(
value
)
scroll
=
parseFloat
(
value
)
||
scroll
break
break
case
"
measure
"
:
case
"
measure
"
:
var
[
numerator
,
denominator
]
=
value
.
split
(
"
/
"
)
var
[
numerator
,
denominator
]
=
value
.
split
(
"
/
"
)
measure
=
numerator
/
denominator
*
4
measure
=
numerator
/
denominator
*
4
||
measure
break
break
case
"
delay
"
:
case
"
delay
"
:
ms
+=
(
parseFloat
(
value
)
||
0
)
*
1000
ms
+=
(
parseFloat
(
value
)
||
0
)
*
1000
...
@@ -231,32 +242,87 @@
...
@@ -231,32 +242,87 @@
case
"
barlineoff
"
:
case
"
barlineoff
"
:
barLine
=
false
barLine
=
false
break
break
}
}
switch
(
name
){
case
"
branchstart
"
:
case
"
branchstart
"
:
branch
=
true
branch
=
true
branchType
=
""
currentBranch
=
false
branchFirstMeasure
=
true
branchSettings
=
{
ms
:
ms
,
gogo
:
gogo
,
bpm
:
bpm
,
scroll
:
scroll
,
sectionBegin
:
sectionBegin
}
value
=
value
.
split
(
"
,
"
)
value
=
value
.
split
(
"
,
"
)
var
forkType
=
value
[
0
].
toLowerCase
()
if
(
!
this
.
branches
){
if
(
forkType
===
"
r
"
||
parseFloat
(
value
[
2
])
<=
100
){
this
.
branches
=
[]
branchPreference
=
"
m
"
}
}
else
if
(
parseFloat
(
value
[
1
])
<=
100
){
var
req
=
{
branchPreference
=
"
e
"
advanced
:
parseFloat
(
value
[
1
])
||
0
,
master
:
parseFloat
(
value
[
2
])
||
0
}
if
(
req
.
advanced
>
0
){
var
active
=
req
.
master
>
0
?
"
normal
"
:
"
master
"
}
else
{
}
else
{
branchPreference
=
"
n
"
var
active
=
req
.
master
>
0
?
"
advanced
"
:
"
master
"
}
branchObj
=
{
ms
:
ms
,
originalMS
:
ms
,
active
:
active
,
type
:
value
[
0
].
trim
().
toLowerCase
()
===
"
r
"
?
"
drumroll
"
:
"
accuracy
"
,
requirement
:
req
}
this
.
branches
.
push
(
branchObj
)
if
(
this
.
measures
.
length
===
1
&&
branchObj
.
type
===
"
drumroll
"
){
for
(
var
i
=
circles
.
length
;
i
--
;){
var
circle
=
circles
[
i
]
if
(
circle
.
endTime
&&
circle
.
type
===
"
drumroll
"
||
circle
.
type
===
"
daiDrumroll
"
||
circle
.
type
===
"
balloon
"
){
this
.
measures
.
push
({
ms
:
circle
.
endTime
,
originalMS
:
circle
.
endTime
,
speed
:
circle
.
bpm
*
circle
.
scroll
/
60
,
visible
:
false
,
branch
:
circle
.
branch
})
break
}
}
}
if
(
this
.
measures
.
length
!==
0
){
this
.
measures
[
this
.
measures
.
length
-
1
].
nextBranch
=
branchObj
}
}
break
break
case
"
branchend
"
:
case
"
branchend
"
:
case
"
section
"
:
branch
=
false
branch
=
false
currentBranch
=
false
break
case
"
section
"
:
sectionBegin
=
true
if
(
branch
&&
!
currentBranch
){
branchSettings
.
sectionBegin
=
true
}
break
break
case
"
n
"
:
case
"
e
"
:
case
"
m
"
:
case
"
n
"
:
case
"
e
"
:
case
"
m
"
:
branchType
=
name
if
(
!
branch
){
break
}
ms
=
branchSettings
.
ms
gogo
=
branchSettings
.
gogo
bpm
=
branchSettings
.
bpm
scroll
=
branchSettings
.
scroll
sectionBegin
=
branchSettings
.
sectionBegin
branchFirstMeasure
=
true
var
branchName
=
name
===
"
m
"
?
"
master
"
:
(
name
===
"
e
"
?
"
advanced
"
:
"
normal
"
)
currentBranch
=
{
name
:
branchName
,
active
:
branchName
===
branchObj
.
active
}
branchObj
[
branchName
]
=
currentBranch
break
break
}
}
}
else
if
(
!
branch
||
branch
&&
branchType
===
branchPreference
)
{
}
else
{
var
string
=
line
.
split
(
""
)
var
string
=
line
.
split
(
""
)
...
@@ -278,8 +344,10 @@
...
@@ -278,8 +344,10 @@
txt
:
type
.
txt
,
txt
:
type
.
txt
,
gogo
:
gogo
,
gogo
:
gogo
,
bpm
:
bpm
,
bpm
:
bpm
,
scroll
:
scroll
scroll
:
scroll
,
section
:
sectionBegin
}
}
sectionBegin
=
false
if
(
lastDrumroll
){
if
(
lastDrumroll
){
circleObj
.
endDrumroll
=
lastDrumroll
circleObj
.
endDrumroll
=
lastDrumroll
lastDrumroll
=
false
lastDrumroll
=
false
...
@@ -293,15 +361,19 @@
...
@@ -293,15 +361,19 @@
txt
:
type
.
txt
,
txt
:
type
.
txt
,
gogo
:
gogo
,
gogo
:
gogo
,
bpm
:
bpm
,
bpm
:
bpm
,
scroll
:
scroll
scroll
:
scroll
,
section
:
sectionBegin
}
}
sectionBegin
=
false
if
(
lastDrumroll
){
if
(
lastDrumroll
){
if
(
symbol
===
"
9
"
){
if
(
symbol
===
"
9
"
){
currentMeasure
.
push
({
currentMeasure
.
push
({
endDrumroll
:
lastDrumroll
,
endDrumroll
:
lastDrumroll
,
bpm
:
bpm
,
bpm
:
bpm
,
scroll
:
scroll
scroll
:
scroll
,
section
:
sectionBegin
})
})
sectionBegin
=
false
lastDrumroll
=
false
lastDrumroll
=
false
}
else
{
}
else
{
currentMeasure
.
push
({
currentMeasure
.
push
({
...
@@ -327,8 +399,10 @@
...
@@ -327,8 +399,10 @@
currentMeasure
.
push
({
currentMeasure
.
push
({
endDrumroll
:
lastDrumroll
,
endDrumroll
:
lastDrumroll
,
bpm
:
bpm
,
bpm
:
bpm
,
scroll
:
scroll
scroll
:
scroll
,
section
:
sectionBegin
})
})
sectionBegin
=
false
lastDrumroll
=
false
lastDrumroll
=
false
}
else
{
}
else
{
currentMeasure
.
push
({
currentMeasure
.
push
({
...
@@ -359,6 +433,11 @@
...
@@ -359,6 +433,11 @@
lastDrumroll
.
originalEndTime
=
ms
lastDrumroll
.
originalEndTime
=
ms
}
}
if
(
this
.
branches
){
circles
.
sort
((
a
,
b
)
=>
a
.
ms
>
b
.
ms
?
1
:
-
1
)
this
.
measures
.
sort
((
a
,
b
)
=>
a
.
ms
>
b
.
ms
?
1
:
-
1
)
circles
.
forEach
((
circle
,
i
)
=>
circle
.
id
=
i
+
1
)
}
return
circles
return
circles
}
}
}
}
public/src/js/songselect.js
View file @
13ca5e36
...
@@ -351,7 +351,7 @@ class SongSelect{
...
@@ -351,7 +351,7 @@ class SongSelect{
down
:
code
==
40
down
:
code
==
40
// Down
// Down
}
}
if
(
key
.
cancel
&&
event
){
if
(
event
&&
(
code
==
27
||
code
==
8
)
){
event
.
preventDefault
()
event
.
preventDefault
()
}
}
if
(
this
.
state
.
screen
===
"
song
"
){
if
(
this
.
state
.
screen
===
"
song
"
){
...
@@ -1322,7 +1322,26 @@ class SongSelect{
...
@@ -1322,7 +1322,26 @@ class SongSelect{
outlineSize
:
currentUra
?
this
.
songAsset
.
letterBorder
:
0
outlineSize
:
currentUra
?
this
.
songAsset
.
letterBorder
:
0
})
})
})
})
var
songStars
=
currentUra
?
currentSong
.
stars
[
4
]
:
currentSong
.
stars
[
i
]
var
songStarsArray
=
(
currentUra
?
currentSong
.
stars
[
4
]
:
currentSong
.
stars
[
i
]).
toString
().
split
(
"
"
)
var
songStars
=
songStarsArray
[
0
]
var
songBranch
=
songStarsArray
[
1
]
===
"
B
"
var
elapsedMS
=
this
.
state
.
screenMS
>
this
.
state
.
moveMS
||
!
songSel
?
this
.
state
.
screenMS
:
this
.
state
.
moveMS
var
fade
=
((
ms
-
elapsedMS
)
%
2000
)
/
2000
if
(
songBranch
&&
fade
>
0.25
&&
fade
<
0.75
){
this
.
draw
.
verticalText
({
ctx
:
ctx
,
text
:
strings
.
songBranch
,
x
:
_x
,
y
:
_y
+
(
songSel
?
110
:
185
),
width
:
songSel
?
44
:
56
,
height
:
songSel
?
160
:
170
,
fill
:
songSel
&&
!
currentUra
?
"
#c85200
"
:
"
#fff
"
,
fontSize
:
songSel
?
25
:
27
,
fontFamily
:
songSel
?
"
Meiryo, Microsoft YaHei, sans-serif
"
:
this
.
font
,
outline
:
songSel
?
false
:
"
#f22666
"
,
outlineSize
:
songSel
?
0
:
this
.
songAsset
.
letterBorder
})
}
else
{
for
(
var
j
=
0
;
j
<
10
;
j
++
){
for
(
var
j
=
0
;
j
<
10
;
j
++
){
if
(
songSel
){
if
(
songSel
){
var
yPos
=
_y
+
113
+
j
*
17
var
yPos
=
_y
+
113
+
j
*
17
...
@@ -1345,6 +1364,7 @@ class SongSelect{
...
@@ -1345,6 +1364,7 @@ class SongSelect{
})
})
}
}
}
}
}
var
currentDiff
=
this
.
selectedDiff
-
this
.
diffOptions
.
length
var
currentDiff
=
this
.
selectedDiff
-
this
.
diffOptions
.
length
if
(
this
.
selectedDiff
===
4
+
this
.
diffOptions
.
length
){
if
(
this
.
selectedDiff
===
4
+
this
.
diffOptions
.
length
){
currentDiff
=
3
currentDiff
=
3
...
...
public/src/js/soundbuffer.js
View file @
13ca5e36
...
@@ -86,7 +86,7 @@ class SoundGain{
...
@@ -86,7 +86,7 @@ class SoundGain{
this
.
volume
=
amount
this
.
volume
=
amount
}
}
setCrossfade
(
amount
){
setCrossfade
(
amount
){
this
.
setVolume
(
Math
.
pow
(
Math
.
sin
(
Math
.
PI
/
2
*
amount
),
1
/
4
))
this
.
setVolume
(
Math
.
sqrt
(
Math
.
sin
(
Math
.
PI
/
2
*
amount
)
))
}
}
fadeIn
(
duration
,
time
,
absolute
){
fadeIn
(
duration
,
time
,
absolute
){
this
.
fadeVolume
(
0
,
this
.
volume
*
this
.
volume
,
duration
,
time
,
absolute
)
this
.
fadeVolume
(
0
,
this
.
volume
*
this
.
volume
,
duration
,
time
,
absolute
)
...
...
public/src/js/strings.js
View file @
13ca5e36
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
this
.
normal
=
"
ふつう
"
this
.
normal
=
"
ふつう
"
this
.
hard
=
"
むずかしい
"
this
.
hard
=
"
むずかしい
"
this
.
oni
=
"
おに
"
this
.
oni
=
"
おに
"
this
.
songBranch
=
"
譜面分岐あり
"
this
.
sessionStart
=
"
オンラインセッションを開始する!
"
this
.
sessionStart
=
"
オンラインセッションを開始する!
"
this
.
sessionEnd
=
"
オンラインセッションを終了する
"
this
.
sessionEnd
=
"
オンラインセッションを終了する
"
this
.
loading
=
"
ロード中...
"
this
.
loading
=
"
ロード中...
"
...
@@ -53,6 +54,11 @@
...
@@ -53,6 +54,11 @@
this
.
good
=
"
良
"
this
.
good
=
"
良
"
this
.
ok
=
"
可
"
this
.
ok
=
"
可
"
this
.
bad
=
"
不可
"
this
.
bad
=
"
不可
"
this
.
branch
=
{
"
normal
"
:
"
普通譜面
"
,
"
advanced
"
:
"
玄人譜面
"
,
"
master
"
:
"
達人譜面
"
}
this
.
pauseOptions
=
[
this
.
pauseOptions
=
[
"
演奏をつづける
"
,
"
演奏をつづける
"
,
"
はじめからやりなおす
"
,
"
はじめからやりなおす
"
,
...
@@ -135,6 +141,7 @@ function StringsEn(){
...
@@ -135,6 +141,7 @@ function StringsEn(){
this
.
normal
=
"
Normal
"
this
.
normal
=
"
Normal
"
this
.
hard
=
"
Hard
"
this
.
hard
=
"
Hard
"
this
.
oni
=
"
Extreme
"
this
.
oni
=
"
Extreme
"
this
.
songBranch
=
"
Diverge Notes
"
this
.
sessionStart
=
"
Begin an Online Session!
"
this
.
sessionStart
=
"
Begin an Online Session!
"
this
.
sessionEnd
=
"
End Online Session
"
this
.
sessionEnd
=
"
End Online Session
"
this
.
loading
=
"
Loading...
"
this
.
loading
=
"
Loading...
"
...
@@ -154,6 +161,11 @@ function StringsEn(){
...
@@ -154,6 +161,11 @@ function StringsEn(){
this
.
good
=
"
GOOD
"
this
.
good
=
"
GOOD
"
this
.
ok
=
"
OK
"
this
.
ok
=
"
OK
"
this
.
bad
=
"
BAD
"
this
.
bad
=
"
BAD
"
this
.
branch
=
{
"
normal
"
:
"
Normal
"
,
"
advanced
"
:
"
Professional
"
,
"
master
"
:
"
Master
"
}
this
.
pauseOptions
=
[
this
.
pauseOptions
=
[
"
Continue
"
,
"
Continue
"
,
"
Retry
"
,
"
Retry
"
,
...
@@ -236,6 +248,7 @@ function StringsCn(){
...
@@ -236,6 +248,7 @@ function StringsCn(){
this
.
normal
=
"
普通
"
this
.
normal
=
"
普通
"
this
.
hard
=
"
困难
"
this
.
hard
=
"
困难
"
this
.
oni
=
"
魔王
"
this
.
oni
=
"
魔王
"
this
.
songBranch
=
"
有谱面分歧
"
this
.
sessionStart
=
"
开始在线会话!
"
this
.
sessionStart
=
"
开始在线会话!
"
this
.
sessionEnd
=
"
结束在线会话
"
this
.
sessionEnd
=
"
结束在线会话
"
this
.
loading
=
"
加载中...
"
this
.
loading
=
"
加载中...
"
...
@@ -255,6 +268,11 @@ function StringsCn(){
...
@@ -255,6 +268,11 @@ function StringsCn(){
this
.
good
=
"
良
"
this
.
good
=
"
良
"
this
.
ok
=
"
可
"
this
.
ok
=
"
可
"
this
.
bad
=
"
不可
"
this
.
bad
=
"
不可
"
this
.
branch
=
{
"
normal
"
:
"
一般谱面
"
,
"
advanced
"
:
"
进阶谱面
"
,
"
master
"
:
"
达人谱面
"
}
this
.
pauseOptions
=
[
this
.
pauseOptions
=
[
"
继续演奏
"
,
"
继续演奏
"
,
"
从头开始
"
,
"
从头开始
"
,
...
@@ -337,6 +355,7 @@ function StringsTw(){
...
@@ -337,6 +355,7 @@ function StringsTw(){
this
.
normal
=
"
普通
"
this
.
normal
=
"
普通
"
this
.
hard
=
"
困難
"
this
.
hard
=
"
困難
"
this
.
oni
=
"
魔王
"
this
.
oni
=
"
魔王
"
this
.
songBranch
=
"
有譜面分歧
"
this
.
sessionStart
=
"
開始多人模式!
"
this
.
sessionStart
=
"
開始多人模式!
"
this
.
sessionEnd
=
"
結束多人模式
"
this
.
sessionEnd
=
"
結束多人模式
"
this
.
loading
=
"
讀取中...
"
this
.
loading
=
"
讀取中...
"
...
@@ -356,6 +375,11 @@ function StringsTw(){
...
@@ -356,6 +375,11 @@ function StringsTw(){
this
.
good
=
"
良
"
this
.
good
=
"
良
"
this
.
ok
=
"
可
"
this
.
ok
=
"
可
"
this
.
bad
=
"
不可
"
this
.
bad
=
"
不可
"
this
.
branch
=
{
"
normal
"
:
"
一般譜面
"
,
"
advanced
"
:
"
進階譜面
"
,
"
master
"
:
"
達人譜面
"
}
this
.
pauseOptions
=
[
this
.
pauseOptions
=
[
"
繼續演奏
"
,
"
繼續演奏
"
,
"
從頭開始
"
,
"
從頭開始
"
,
...
@@ -438,6 +462,7 @@ function StringsKo(){
...
@@ -438,6 +462,7 @@ function StringsKo(){
this
.
normal
=
"
보통
"
this
.
normal
=
"
보통
"
this
.
hard
=
"
어려움
"
this
.
hard
=
"
어려움
"
this
.
oni
=
"
귀신
"
this
.
oni
=
"
귀신
"
this
.
songBranch
=
"
악보 분기 있습니다
"
this
.
sessionStart
=
"
온라인 세션 시작!
"
this
.
sessionStart
=
"
온라인 세션 시작!
"
this
.
sessionEnd
=
"
온라인 세션 끝내기
"
this
.
sessionEnd
=
"
온라인 세션 끝내기
"
this
.
loading
=
"
로딩 중...
"
this
.
loading
=
"
로딩 중...
"
...
@@ -457,6 +482,11 @@ function StringsKo(){
...
@@ -457,6 +482,11 @@ function StringsKo(){
this
.
good
=
"
얼쑤
"
this
.
good
=
"
얼쑤
"
this
.
ok
=
"
좋다
"
this
.
ok
=
"
좋다
"
this
.
bad
=
"
에구
"
this
.
bad
=
"
에구
"
this
.
branch
=
{
"
normal
"
:
"
보통 악보
"
,
"
advanced
"
:
"
현인 악보
"
,
"
master
"
:
"
달인 악보
"
}
this
.
pauseOptions
=
[
this
.
pauseOptions
=
[
"
연주 계속하기
"
,
"
연주 계속하기
"
,
"
처음부터 다시
"
,
"
처음부터 다시
"
,
...
...
public/src/js/titlescreen.js
View file @
13ca5e36
...
@@ -18,7 +18,11 @@ class Titlescreen{
...
@@ -18,7 +18,11 @@ class Titlescreen{
this
.
setLang
(
allStrings
[
this
.
lang
],
true
)
this
.
setLang
(
allStrings
[
this
.
lang
],
true
)
if
(
songId
){
if
(
songId
){
this
.
goNext
()
if
(
localStorage
.
getItem
(
"
tutorial
"
)
===
"
true
"
){
new
SongSelect
(
false
,
false
,
this
.
touched
,
this
.
songId
)
}
else
{
new
Tutorial
(
false
,
this
.
songId
)
}
}
else
{
}
else
{
this
.
addLangs
()
this
.
addLangs
()
...
...
public/src/js/view.js
View file @
13ca5e36
...
@@ -75,6 +75,33 @@
...
@@ -75,6 +75,33 @@
this
.
gogoTime
=
0
this
.
gogoTime
=
0
this
.
drumroll
=
[]
this
.
drumroll
=
[]
this
.
touchEvents
=
0
this
.
touchEvents
=
0
if
(
this
.
controller
.
parsedSongData
.
branches
){
this
.
branch
=
"
normal
"
this
.
branchAnimate
=
{
ms
:
-
Infinity
,
fromBranch
:
"
normal
"
}
this
.
branchMap
=
{
"
normal
"
:
{
"
bg
"
:
"
rgba(0, 0, 0, 0)
"
,
"
text
"
:
"
#d3d3d3
"
,
"
stroke
"
:
"
#393939
"
,
"
shadow
"
:
"
#000
"
},
"
advanced
"
:
{
"
bg
"
:
"
rgba(29, 129, 189, 0.4)
"
,
"
text
"
:
"
#94d7e7
"
,
"
stroke
"
:
"
#315973
"
,
"
shadow
"
:
"
#082031
"
},
"
master
"
:
{
"
bg
"
:
"
rgba(230, 29, 189, 0.4)
"
,
"
text
"
:
"
#f796ef
"
,
"
stroke
"
:
"
#7e2e6e
"
,
"
shadow
"
:
"
#3e0836
"
}
}
}
this
.
beatInterval
=
this
.
controller
.
parsedSongData
.
beatInfo
.
beatInterval
this
.
beatInterval
=
this
.
controller
.
parsedSongData
.
beatInfo
.
beatInterval
this
.
font
=
strings
.
font
this
.
font
=
strings
.
font
...
@@ -85,6 +112,7 @@
...
@@ -85,6 +112,7 @@
this
.
titleCache
=
new
CanvasCache
()
this
.
titleCache
=
new
CanvasCache
()
this
.
comboCache
=
new
CanvasCache
()
this
.
comboCache
=
new
CanvasCache
()
this
.
pauseCache
=
new
CanvasCache
()
this
.
pauseCache
=
new
CanvasCache
()
this
.
branchCache
=
new
CanvasCache
()
this
.
multiplayer
=
this
.
controller
.
multiplayer
this
.
multiplayer
=
this
.
controller
.
multiplayer
...
@@ -132,7 +160,8 @@
...
@@ -132,7 +160,8 @@
}
}
this
.
setDonBg
()
this
.
setDonBg
()
this
.
lastMousemove
=
this
.
controller
.
game
.
getAccurateTime
()
this
.
startTime
=
this
.
controller
.
game
.
getAccurateTime
()
this
.
lastMousemove
=
this
.
startTime
pageEvents
.
mouseAdd
(
this
,
this
.
onmousemove
.
bind
(
this
))
pageEvents
.
mouseAdd
(
this
,
this
.
onmousemove
.
bind
(
this
))
this
.
refresh
()
this
.
refresh
()
...
@@ -162,6 +191,7 @@
...
@@ -162,6 +191,7 @@
}
}
var
ratio
=
(
ratioX
<
ratioY
?
ratioX
:
ratioY
)
var
ratio
=
(
ratioX
<
ratioY
?
ratioX
:
ratioY
)
var
resized
=
false
if
(
this
.
winW
!==
winW
||
this
.
winH
!==
winH
){
if
(
this
.
winW
!==
winW
||
this
.
winH
!==
winH
){
this
.
winW
=
winW
this
.
winW
=
winW
this
.
winH
=
winH
this
.
winH
=
winH
...
@@ -181,6 +211,7 @@
...
@@ -181,6 +211,7 @@
}
}
this
.
fillComboCache
()
this
.
fillComboCache
()
this
.
setDonBgHeight
()
this
.
setDonBgHeight
()
resized
=
true
}
else
if
(
this
.
controller
.
game
.
paused
&&
!
document
.
hasFocus
()){
}
else
if
(
this
.
controller
.
game
.
paused
&&
!
document
.
hasFocus
()){
return
return
}
else
if
(
this
.
multiplayer
!==
2
){
}
else
if
(
this
.
multiplayer
!==
2
){
...
@@ -669,7 +700,7 @@
...
@@ -669,7 +700,7 @@
}
}
ctx
.
restore
()
ctx
.
restore
()
// B
ar pressed keys
// B
ranch background
var
keyTime
=
this
.
controller
.
getKeyTime
()
var
keyTime
=
this
.
controller
.
getKeyTime
()
var
sound
=
keyTime
[
"
don
"
]
>
keyTime
[
"
ka
"
]
?
"
don
"
:
"
ka
"
var
sound
=
keyTime
[
"
don
"
]
>
keyTime
[
"
ka
"
]
?
"
don
"
:
"
ka
"
var
padding
=
this
.
slotPos
.
paddingLeft
var
padding
=
this
.
slotPos
.
paddingLeft
...
@@ -677,12 +708,78 @@
...
@@ -677,12 +708,78 @@
var
barY
=
this
.
slotPos
.
y
-
65
*
mul
var
barY
=
this
.
slotPos
.
y
-
65
*
mul
var
barH
=
130
*
mul
var
barH
=
130
*
mul
if
(
this
.
branchAnimate
&&
ms
<=
this
.
branchAnimate
.
ms
+
300
){
var
alpha
=
Math
.
max
(
0
,
(
ms
-
this
.
branchAnimate
.
ms
)
/
300
)
ctx
.
globalAlpha
=
1
-
alpha
ctx
.
fillStyle
=
this
.
branchMap
[
this
.
branchAnimate
.
fromBranch
].
bg
ctx
.
fillRect
(
padding
,
barY
,
winW
-
padding
,
barH
)
ctx
.
globalAlpha
=
alpha
}
if
(
this
.
branch
){
ctx
.
fillStyle
=
this
.
branchMap
[
this
.
branch
].
bg
ctx
.
fillRect
(
padding
,
barY
,
winW
-
padding
,
barH
)
ctx
.
globalAlpha
=
1
}
// Current branch text
if
(
this
.
branch
){
if
(
resized
){
this
.
fillBranchCache
()
}
var
textW
=
Math
.
floor
(
260
*
mul
)
var
textH
=
Math
.
floor
(
barH
)
var
textX
=
winW
-
textW
var
oldOffset
=
0
var
newOffset
=
0
var
elapsed
=
ms
-
this
.
startTime
if
(
elapsed
<
250
){
textX
=
winW
}
else
if
(
elapsed
<
500
){
textX
+=
(
1
-
this
.
draw
.
easeOutBack
((
elapsed
-
250
)
/
250
))
*
textW
}
if
(
this
.
branchAnimate
&&
ms
-
this
.
branchAnimate
.
ms
<
310
&&
ms
>=
this
.
branchAnimate
.
ms
){
var
fromBranch
=
this
.
branchAnimate
.
fromBranch
var
elapsed
=
ms
-
this
.
branchAnimate
.
ms
var
reverse
=
fromBranch
===
"
master
"
||
fromBranch
===
"
advanced
"
&&
this
.
branch
===
"
normal
"
?
-
1
:
1
if
(
elapsed
<
65
){
oldOffset
=
elapsed
/
65
*
12
*
mul
*
reverse
ctx
.
globalAlpha
=
1
var
newAlpha
=
0
}
else
if
(
elapsed
<
215
){
var
animPoint
=
(
elapsed
-
65
)
/
150
oldOffset
=
(
12
-
animPoint
*
48
)
*
mul
*
reverse
newOffset
=
(
36
-
animPoint
*
48
)
*
mul
*
reverse
ctx
.
globalAlpha
=
this
.
draw
.
easeIn
(
1
-
animPoint
)
var
newAlpha
=
this
.
draw
.
easeIn
(
animPoint
)
}
else
{
newOffset
=
(
1
-
(
elapsed
-
215
)
/
95
)
*
-
12
*
mul
*
reverse
ctx
.
globalAlpha
=
0
var
newAlpha
=
1
}
this
.
branchCache
.
get
({
ctx
:
ctx
,
x
:
textX
,
y
:
barY
+
oldOffset
,
w
:
textW
,
h
:
textH
,
id
:
fromBranch
})
ctx
.
globalAlpha
=
newAlpha
}
this
.
branchCache
.
get
({
ctx
:
ctx
,
x
:
textX
,
y
:
barY
+
newOffset
,
w
:
textW
,
h
:
textH
,
id
:
this
.
branch
})
ctx
.
globalAlpha
=
1
}
// Go go time background
if
(
this
.
gogoTime
||
ms
<=
this
.
gogoTimeStarted
+
100
){
if
(
this
.
gogoTime
||
ms
<=
this
.
gogoTimeStarted
+
100
){
var
grd
=
ctx
.
createLinearGradient
(
padding
,
0
,
winW
,
0
)
var
grd
=
ctx
.
createLinearGradient
(
padding
,
0
,
winW
,
0
)
grd
.
addColorStop
(
0
,
"
#512a2c
"
)
grd
.
addColorStop
(
0
,
"
rgba(255, 0, 0, 0.16)
"
)
grd
.
addColorStop
(
0.4
6
,
"
#6f2a2d
"
)
grd
.
addColorStop
(
0.4
5
,
"
rgba(255, 0, 0, 0.28)
"
)
grd
.
addColorStop
(
0.7
6
,
"
#8a4763
"
)
grd
.
addColorStop
(
0.7
7
,
"
rgba(255, 83, 157, 0.4)
"
)
grd
.
addColorStop
(
1
,
"
#2c2a2c
"
)
grd
.
addColorStop
(
1
,
"
rgba(255, 83, 157, 0)
"
)
ctx
.
fillStyle
=
grd
ctx
.
fillStyle
=
grd
if
(
!
this
.
touchEnabled
){
if
(
!
this
.
touchEnabled
){
var
alpha
=
Math
.
min
(
100
,
ms
-
this
.
gogoTimeStarted
)
/
100
var
alpha
=
Math
.
min
(
100
,
ms
-
this
.
gogoTimeStarted
)
/
100
...
@@ -693,6 +790,8 @@
...
@@ -693,6 +790,8 @@
}
}
ctx
.
fillRect
(
padding
,
barY
,
winW
-
padding
,
barH
)
ctx
.
fillRect
(
padding
,
barY
,
winW
-
padding
,
barH
)
}
}
// Bar pressed keys
if
(
keyTime
[
sound
]
>
ms
-
130
){
if
(
keyTime
[
sound
]
>
ms
-
130
){
var
gradients
=
{
var
gradients
=
{
"
don
"
:
"
255, 0, 0
"
,
"
don
"
:
"
255, 0, 0
"
,
...
@@ -790,6 +889,7 @@
...
@@ -790,6 +889,7 @@
ctx
.
lineWidth
=
7
*
mul
ctx
.
lineWidth
=
7
*
mul
ctx
.
textAlign
=
"
center
"
ctx
.
textAlign
=
"
center
"
ctx
.
miterLimit
=
1
ctx
.
miterLimit
=
1
ctx
.
strokeStyle
=
"
#000
"
ctx
.
strokeText
(
strings
.
combo
,
comboX
,
comboTextY
)
ctx
.
strokeText
(
strings
.
combo
,
comboX
,
comboTextY
)
ctx
.
miterLimit
=
10
ctx
.
miterLimit
=
10
ctx
.
fillText
(
strings
.
combo
,
comboX
,
comboTextY
)
ctx
.
fillText
(
strings
.
combo
,
comboX
,
comboTextY
)
...
@@ -1102,15 +1202,23 @@
...
@@ -1102,15 +1202,23 @@
var
timeForDistance
=
this
.
posToMs
(
distanceForCircle
,
measure
.
speed
)
var
timeForDistance
=
this
.
posToMs
(
distanceForCircle
,
measure
.
speed
)
var
startingTime
=
measure
.
ms
-
timeForDistance
var
startingTime
=
measure
.
ms
-
timeForDistance
var
finishTime
=
measure
.
ms
+
this
.
posToMs
(
this
.
slotPos
.
x
-
this
.
slotPos
.
paddingLeft
+
3
,
measure
.
speed
)
var
finishTime
=
measure
.
ms
+
this
.
posToMs
(
this
.
slotPos
.
x
-
this
.
slotPos
.
paddingLeft
+
3
,
measure
.
speed
)
if
(
ms
>=
startingTime
&&
ms
<=
finishTime
){
if
(
m
easure
.
visible
&&
(
!
measure
.
branch
||
measure
.
branch
.
active
)
&&
m
s
>=
startingTime
&&
ms
<=
finishTime
){
var
measureX
=
this
.
slotPos
.
x
+
this
.
msToPos
(
measure
.
ms
-
ms
,
measure
.
speed
)
var
measureX
=
this
.
slotPos
.
x
+
this
.
msToPos
(
measure
.
ms
-
ms
,
measure
.
speed
)
this
.
ctx
.
strokeStyle
=
"
#bdbdbd
"
this
.
ctx
.
strokeStyle
=
measure
.
branchFirst
?
"
#ff0
"
:
"
#bdbdbd
"
this
.
ctx
.
lineWidth
=
3
this
.
ctx
.
lineWidth
=
3
this
.
ctx
.
beginPath
()
this
.
ctx
.
beginPath
()
this
.
ctx
.
moveTo
(
measureX
,
measureY
)
this
.
ctx
.
moveTo
(
measureX
,
measureY
)
this
.
ctx
.
lineTo
(
measureX
,
measureY
+
measureH
)
this
.
ctx
.
lineTo
(
measureX
,
measureY
+
measureH
)
this
.
ctx
.
stroke
()
this
.
ctx
.
stroke
()
}
}
if
(
this
.
multiplayer
!==
2
&&
ms
>=
measure
.
ms
&&
measure
.
nextBranch
&&
!
measure
.
viewChecked
&&
measure
.
gameChecked
){
measure
.
viewChecked
=
true
if
(
measure
.
nextBranch
.
active
!==
this
.
branch
){
this
.
branchAnimate
.
ms
=
ms
this
.
branchAnimate
.
fromBranch
=
this
.
branch
}
this
.
branch
=
measure
.
nextBranch
.
active
}
})
})
}
}
updateNoteFaces
(){
updateNoteFaces
(){
...
@@ -1137,21 +1245,21 @@
...
@@ -1137,21 +1245,21 @@
for
(
var
i
=
circles
.
length
;
i
--
;){
for
(
var
i
=
circles
.
length
;
i
--
;){
var
circle
=
circles
[
i
]
var
circle
=
circles
[
i
]
var
speed
=
circle
.
getSpeed
()
var
speed
=
circle
.
speed
var
timeForDistance
=
this
.
posToMs
(
distanceForCircle
+
this
.
slotPos
.
size
/
2
,
speed
)
var
timeForDistance
=
this
.
posToMs
(
distanceForCircle
+
this
.
slotPos
.
size
/
2
,
speed
)
var
startingTime
=
circle
.
getMS
()
-
timeForDistance
var
startingTime
=
circle
.
ms
-
timeForDistance
var
finishTime
=
circle
.
getEndTime
()
+
this
.
posToMs
(
this
.
slotPos
.
x
-
this
.
slotPos
.
paddingLeft
+
this
.
slotPos
.
size
*
2
,
speed
)
var
finishTime
=
circle
.
endTime
+
this
.
posToMs
(
this
.
slotPos
.
x
-
this
.
slotPos
.
paddingLeft
+
this
.
slotPos
.
size
*
2
,
speed
)
if
(
circle
.
getPlayed
()
<=
0
||
circle
.
getScore
()
===
0
){
if
(
circle
.
isPlayed
<=
0
||
circle
.
score
===
0
){
if
(
ms
>=
startingTime
&&
ms
<=
finishTime
&&
circle
.
getPlayed
()
!==
-
1
){
if
(
(
!
circle
.
branch
||
circle
.
branch
.
active
)
&&
ms
>=
startingTime
&&
ms
<=
finishTime
&&
circle
.
isPlayed
!==
-
1
){
this
.
drawCircle
(
circle
)
this
.
drawCircle
(
circle
)
}
}
}
else
if
(
!
circle
.
isAnimated
()
){
}
else
if
(
!
circle
.
animating
){
// Start animation to gauge
// Start animation to gauge
circle
.
animate
(
ms
)
circle
.
animate
(
ms
)
}
}
if
(
ms
>=
circle
.
ms
&&
!
circle
.
gogoChecked
){
if
(
ms
>=
circle
.
ms
&&
!
circle
.
gogoChecked
&&
(
!
circle
.
branch
||
circle
.
branch
.
active
)
){
if
(
this
.
gogoTime
!=
circle
.
gogoTime
){
if
(
this
.
gogoTime
!=
circle
.
gogoTime
){
this
.
toggleGogoTime
(
circle
)
this
.
toggleGogoTime
(
circle
)
}
}
...
@@ -1165,9 +1273,9 @@
...
@@ -1165,9 +1273,9 @@
for
(
var
i
=
0
;
i
<
circles
.
length
;
i
++
){
for
(
var
i
=
0
;
i
<
circles
.
length
;
i
++
){
var
circle
=
circles
[
i
]
var
circle
=
circles
[
i
]
if
(
circle
.
isAnimated
()
){
if
(
circle
.
animating
){
var
animT
=
circle
.
getAnimT
()
var
animT
=
circle
.
animT
if
(
ms
<
animT
+
490
){
if
(
ms
<
animT
+
490
){
if
(
circle
.
fixedPos
){
if
(
circle
.
fixedPos
){
...
@@ -1183,7 +1291,7 @@
...
@@ -1183,7 +1291,7 @@
var
pos
=
this
.
animateBezier
[
3
]
var
pos
=
this
.
animateBezier
[
3
]
this
.
drawCircle
(
circle
,
pos
,
(
ms
-
animT
-
490
)
/
160
)
this
.
drawCircle
(
circle
,
pos
,
(
ms
-
animT
-
490
)
/
160
)
}
else
{
}
else
{
circle
.
endAnimation
()
circle
.
animationEnded
=
true
}
}
}
}
}
}
...
@@ -1211,13 +1319,13 @@
...
@@ -1211,13 +1319,13 @@
var
lyricsSize
=
20
*
mul
var
lyricsSize
=
20
*
mul
var
fill
,
size
,
faceID
var
fill
,
size
,
faceID
var
type
=
circle
.
getType
()
var
type
=
circle
.
type
var
ms
=
this
.
getMS
()
var
ms
=
this
.
getMS
()
var
circleMs
=
circle
.
getMS
()
var
circleMs
=
circle
.
ms
var
endTime
=
circle
.
getEndTime
()
var
endTime
=
circle
.
endTime
var
animated
=
circle
.
isAnimated
()
var
animated
=
circle
.
animating
var
speed
=
circle
.
getSpeed
()
var
speed
=
circle
.
speed
var
played
=
circle
.
getPlayed
()
var
played
=
circle
.
isPlayed
var
drumroll
=
0
var
drumroll
=
0
var
endX
=
0
var
endX
=
0
...
@@ -1323,9 +1431,9 @@
...
@@ -1323,9 +1431,9 @@
ctx
.
fill
()
ctx
.
fill
()
ctx
.
globalAlpha
=
1
ctx
.
globalAlpha
=
1
}
}
if
(
!
circle
.
isAnimated
()
){
if
(
!
circle
.
animating
){
// Text
// Text
var
text
=
circle
.
getText
()
var
text
=
circle
.
text
var
textX
=
circlePos
.
x
var
textX
=
circlePos
.
x
var
textY
=
circlePos
.
y
+
83
*
mul
var
textY
=
circlePos
.
y
+
83
*
mul
ctx
.
font
=
lyricsSize
+
"
px Kozuka, Microsoft YaHei, sans-serif
"
ctx
.
font
=
lyricsSize
+
"
px Kozuka, Microsoft YaHei, sans-serif
"
...
@@ -1436,6 +1544,37 @@
...
@@ -1436,6 +1544,37 @@
})
})
this
.
globalAlpha
=
1
this
.
globalAlpha
=
1
}
}
fillBranchCache
(){
var
mul
=
this
.
slotPos
.
size
/
106
var
textW
=
Math
.
floor
(
260
*
mul
)
var
barH
=
Math
.
floor
(
130
*
mul
)
var
branchNames
=
this
.
controller
.
game
.
branchNames
var
textX
=
textW
-
33
*
mul
var
textY
=
63
*
mul
var
fontSize
=
(
strings
.
id
===
"
en
"
?
33
:
(
strings
.
id
===
"
ko
"
?
38
:
43
))
*
mul
this
.
branchCache
.
resize
((
textW
+
1
),
(
barH
+
1
)
*
3
,
this
.
ratio
)
for
(
var
i
in
branchNames
){
this
.
branchCache
.
set
({
w
:
textW
,
h
:
barH
,
id
:
branchNames
[
i
]
},
ctx
=>
{
var
currentMap
=
this
.
branchMap
[
branchNames
[
i
]]
ctx
.
font
=
this
.
draw
.
bold
(
this
.
font
)
+
fontSize
+
"
px
"
+
this
.
font
ctx
.
lineJoin
=
"
round
"
ctx
.
miterLimit
=
1
ctx
.
textAlign
=
"
right
"
ctx
.
textBaseline
=
"
middle
"
ctx
.
lineWidth
=
8
*
mul
ctx
.
strokeStyle
=
currentMap
.
shadow
ctx
.
strokeText
(
strings
.
branch
[
branchNames
[
i
]],
textX
,
textY
+
4
*
mul
)
ctx
.
strokeStyle
=
currentMap
.
stroke
ctx
.
strokeText
(
strings
.
branch
[
branchNames
[
i
]],
textX
,
textY
)
ctx
.
fillStyle
=
currentMap
.
text
ctx
.
fillText
(
strings
.
branch
[
branchNames
[
i
]],
textX
,
textY
)
})
}
}
toggleGogoTime
(
circle
){
toggleGogoTime
(
circle
){
this
.
gogoTime
=
circle
.
gogoTime
this
.
gogoTime
=
circle
.
gogoTime
this
.
gogoTimeStarted
=
circle
.
ms
this
.
gogoTimeStarted
=
circle
.
ms
...
@@ -1466,7 +1605,7 @@
...
@@ -1466,7 +1605,7 @@
if
(
this
.
gogoTime
){
if
(
this
.
gogoTime
){
var
circles
=
this
.
controller
.
parsedSongData
.
circles
var
circles
=
this
.
controller
.
parsedSongData
.
circles
var
lastCircle
=
circles
[
circles
.
length
-
1
]
var
lastCircle
=
circles
[
circles
.
length
-
1
]
var
endTime
=
lastCircle
.
getEndTime
()
+
3000
var
endTime
=
lastCircle
.
endTime
+
3000
if
(
ms
>=
endTime
){
if
(
ms
>=
endTime
){
this
.
toggleGogoTime
({
this
.
toggleGogoTime
({
gogoTime
:
0
,
gogoTime
:
0
,
...
...
public/src/views/debug.html
View file @
13ca5e36
...
@@ -9,6 +9,17 @@
...
@@ -9,6 +9,17 @@
<div
class=
"measure-num input-slider"
>
<div
class=
"measure-num input-slider"
>
<span
class=
"reset"
>
x
</span><input
type=
"text"
value=
""
readonly
><span
class=
"minus"
>
-
</span><span
class=
"plus"
>
+
</span>
<span
class=
"reset"
>
x
</span><input
type=
"text"
value=
""
readonly
><span
class=
"minus"
>
-
</span><span
class=
"plus"
>
+
</span>
</div>
</div>
<div
class=
"branch-hide"
>
<div>
Branch:
</div>
<div
class=
"branch-select select"
>
<span
class=
"reset"
>
x
</span><select>
<option
value=
"auto"
selected
style=
"background:#fff"
>
Auto
</option>
<option
value=
"normal"
style=
"background:#ccc"
>
Normal
</option>
<option
value=
"advanced"
style=
"background:#bdf"
>
Professional
</option>
<option
value=
"master"
style=
"background:#ebf"
>
Master
</option>
</select>
</div>
</div>
<label><input
class=
"change-restart"
type=
"checkbox"
>
Restart on change
</label>
<label><input
class=
"change-restart"
type=
"checkbox"
>
Restart on change
</label>
<label
class=
"autoplay-label"
><input
class=
"autoplay"
type=
"checkbox"
>
Auto play
</label>
<label
class=
"autoplay-label"
><input
class=
"autoplay"
type=
"checkbox"
>
Auto play
</label>
<div
class=
"bottom-btns"
>
<div
class=
"bottom-btns"
>
...
...
server.py
View file @
13ca5e36
...
@@ -185,6 +185,7 @@ async def connection(ws, path):
...
@@ -185,6 +185,7 @@ async def connection(ws, path):
if
"other_user"
in
user
and
"ws"
in
user
[
"other_user"
]:
if
"other_user"
in
user
and
"ws"
in
user
[
"other_user"
]:
if
type
==
"note"
\
if
type
==
"note"
\
or
type
==
"drumroll"
\
or
type
==
"drumroll"
\
or
type
==
"branch"
\
or
type
==
"gameresults"
:
or
type
==
"gameresults"
:
await
user
[
"other_user"
][
"ws"
]
.
send
(
msgobj
(
type
,
value
))
await
user
[
"other_user"
][
"ws"
]
.
send
(
msgobj
(
type
,
value
))
elif
type
==
"songsel"
and
user
[
"session"
]:
elif
type
==
"songsel"
and
user
[
"session"
]:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment