2022-12-25 06:18:48 +00:00
package battle
2022-12-25 12:17:22 +00:00
// TODO: Replace all "int32", "int64", "uint32" and "uint64" with just "int" for better performance in JavaScript! Reference https://github.com/gopherjs/gopherjs#performance-tips
2022-12-25 06:18:48 +00:00
type Vec2D struct {
X float64
Y float64
}
type Polygon2D struct {
Anchor * Vec2D
Points [ ] * Vec2D
}
type PlayerDownsync struct {
Id int32
VirtualGridX int32
VirtualGridY int32
DirX int32
DirY int32
VelX int32
VelY int32
Speed int32
BattleState int32
JoinIndex int32
2023-01-01 12:18:35 +00:00
ColliderRadius int32
2022-12-25 06:18:48 +00:00
Removed bool
Score int32
LastMoveGmtMillis int32
FramesToRecover int32
2022-12-31 07:47:45 +00:00
FramesInChState int32
2022-12-25 06:18:48 +00:00
Hp int32
MaxHp int32
CharacterState int32
InAir bool
2023-01-11 10:09:18 +00:00
OnWall bool
2023-01-13 03:25:20 +00:00
OnWallNormX int32
OnWallNormY int32
2023-01-01 12:18:35 +00:00
2023-01-20 03:29:27 +00:00
CapturedByInertia bool
2023-01-01 12:18:35 +00:00
ActiveSkillId int32
ActiveSkillHit int32
2023-01-04 15:48:00 +00:00
2023-01-05 02:20:01 +00:00
FramesInvinsible int32
2023-01-08 12:34:29 +00:00
BulletTeamId int32
ChCollisionTeamId int32 // not the same as "BulletTeamId", because even in the same team, we should allow inter-character collisions
2023-02-08 08:15:05 +00:00
RevivalVirtualGridX int32
RevivalVirtualGridY int32
2022-12-25 06:18:48 +00:00
}
type InputFrameDecoded struct {
Dx int32
Dy int32
BtnALevel int32
BtnBLevel int32
}
type InputFrameUpsync struct {
InputFrameId int32
Encoded uint64
}
type Barrier struct {
Boundary * Polygon2D
}
2023-01-13 03:25:20 +00:00
type BulletConfig struct {
2023-01-13 06:55:56 +00:00
StartupFrames int32 // from "OriginatedRenderFrameId"
CancellableStFrame int32 // from "OriginatedRenderFrameId"
CancellableEdFrame int32 // from "OriginatedRenderFrameId"
ActiveFrames int32
2022-12-31 07:47:45 +00:00
2022-12-25 06:18:48 +00:00
// for defender
2023-01-01 07:43:25 +00:00
HitStunFrames int32
BlockStunFrames int32
2023-01-01 12:18:35 +00:00
PushbackVelX int32
PushbackVelY int32
2023-01-01 07:43:25 +00:00
Damage int32
2023-01-05 02:20:01 +00:00
SelfLockVelX int32
SelfLockVelY int32
2023-01-01 07:43:25 +00:00
HitboxOffsetX int32
HitboxOffsetY int32
HitboxSizeX int32
HitboxSizeY int32
2023-01-15 05:11:19 +00:00
BlowUp bool
ExplosionFrames int32
SpeciesId int32 // For fireball, this SpeciesId specifies both the active animation and the explosion animation, for melee it specifies the explosion animation
2023-01-01 14:51:46 +00:00
CancelTransit map [ int ] int
2023-01-13 06:55:56 +00:00
}
2023-01-08 12:34:29 +00:00
2023-01-13 06:55:56 +00:00
type BulletBattleAttr struct {
BulletLocalId int32 // for referencing cached nodes in frontend rendering
// for offender
OriginatedRenderFrameId int32 // Copied from the first bullet for all subsequent bullets
OffenderJoinIndex int32 // Copied to favor collision handling of the dispatched bullet
TeamId int32
2022-12-25 06:18:48 +00:00
}
2022-12-28 10:06:05 +00:00
type MeleeBullet struct {
2023-01-15 05:11:19 +00:00
BlState int32 // bullet state, e.g. STARTUP, ACTIVE, EXPLODING
FramesInBlState int32
BattleAttr * BulletBattleAttr
Bullet * BulletConfig
2022-12-28 10:06:05 +00:00
}
type FireballBullet struct {
2023-01-15 05:11:19 +00:00
VirtualGridX int32
VirtualGridY int32
DirX int32
DirY int32
VelX int32
VelY int32
Speed int32
BlState int32 // bullet state, e.g. STARTUP, ACTIVE, EXPLODING
FramesInBlState int32
BattleAttr * BulletBattleAttr
Bullet * BulletConfig
2022-12-28 10:06:05 +00:00
}
2022-12-31 07:47:45 +00:00
type Skill struct {
2023-01-01 07:43:25 +00:00
BattleLocalId int32
RecoveryFrames int32
RecoveryFramesOnBlock int32
RecoveryFramesOnHit int32
2023-01-01 14:51:46 +00:00
ReleaseTriggerType int32 // 1: rising-edge, 2: falling-edge
BoundChState int32
2023-01-01 07:43:25 +00:00
Hits [ ] interface { } // Hits within a "Skill" are automatically triggered
2023-01-15 05:11:19 +00:00
// [WARN] Multihit of a fireball is more difficult to handle than that of melee, because we have to count from the fireball's first hit; the situation becomes even more complicated when a multihit fireball is in a crowd -- remains to be designed
2022-12-31 07:47:45 +00:00
}
2022-12-25 06:18:48 +00:00
type RoomDownsyncFrame struct {
2023-01-10 04:08:15 +00:00
Id int32
PlayersArr [ ] * PlayerDownsync
CountdownNanos int64
MeleeBullets [ ] * MeleeBullet
FireballBullets [ ] * FireballBullet
BackendUnconfirmedMask uint64
ShouldForceResync bool
BulletLocalIdCounter int32
2022-12-25 06:18:48 +00:00
}
2022-12-28 10:06:05 +00:00
type InputFrameDownsync struct {
InputFrameId int32
InputList [ ] uint64
ConfirmedList uint64
}
2023-01-08 12:34:29 +00:00
type NpcPatrolCue struct {
FlAct uint64 // Encoded input when collided with this cue & facing left
FrAct uint64 // Encoded input when collided with this cue & facing right
X float64
Y float64
}