Complete cartoon presentation, Korean voice adoption and responsive art framing
This commit is contained in:
@@ -6,6 +6,7 @@ $adb=Join-Path $sdk 'platform-tools/adb.exe'
|
||||
$checks=[Collections.Generic.List[object]]::new(); $commands=[Collections.Generic.List[object]]::new(); $recorders=[Collections.Generic.List[object]]::new()
|
||||
$package='com.magnetismheroes.game'; $activity="$package/com.unity3d.player.UnityPlayerGameActivity"; $remote="/sdcard/Android/data/$package/files/progress.json"
|
||||
$result=[ordered]@{milestone='Composition';sourceCommit=(& git rev-parse HEAD);sourceDirty=[bool](& git status --porcelain);serial=$Serial;apkSha256=(Get-FileHash $ApkPath -Algorithm SHA256).Hash;status='failed';checks=@();commands=@()}
|
||||
$result.rendererProjection=@{fieldOfView=62;fixedWorldPivot=@(0,.65,0);rawCamera='Saved Board.camera JSON remains canonical';viewport='Landscape wm size max/min; remaining UI and physical touch helper assume sole 2400x1080 AVD'}
|
||||
$networkBefore=$null
|
||||
$physicalInput=$false
|
||||
function Adb([string[]]$Arguments) {
|
||||
@@ -55,6 +56,18 @@ function Touch([int[]]$Contacts) {
|
||||
$commands.Add(@{command=('EmulatorController.sendTouch contacts='+($Contacts -join ','));exitCode=0})
|
||||
}
|
||||
function SameJson($First,$Second) { return ($First | ConvertTo-Json -Depth 12 -Compress) -eq ($Second | ConvertTo-Json -Depth 12 -Compress) }
|
||||
function BallPoint($Board,[string]$Id) {
|
||||
$ball=@($Board.balls | Where-Object id -eq $Id)[0]; $camera=$Board.camera
|
||||
$rotation=[Numerics.Quaternion]::new($camera.rotation.x,$camera.rotation.y,$camera.rotation.z,$camera.rotation.w)
|
||||
$origin=[Numerics.Vector3]::new($camera.target.x,($camera.target.y+.65),$camera.target.z)+[Numerics.Vector3]::Transform([Numerics.Vector3]::new(0,0,-$camera.distance),$rotation)
|
||||
$local=[Numerics.Vector3]::Transform([Numerics.Vector3]::new($ball.position.x,$ball.position.y,$ball.position.z)-$origin,[Numerics.Quaternion]::Inverse($rotation))
|
||||
$size=Adb @('shell','wm','size'); if ($size -notmatch '(\d+)x(\d+)') { throw "Unknown device resolution: $size" }
|
||||
$width=[Math]::Max([int]$Matches[1],[int]$Matches[2]); $height=[Math]::Min([int]$Matches[1],[int]$Matches[2])
|
||||
$scale=($height/2)/([Math]::Tan(31*[Math]::PI/180)*$local.Z)
|
||||
return @([int][Math]::Round(($width/2)+$local.X*$scale),[int][Math]::Round(($height/2)-$local.Y*$scale))
|
||||
}
|
||||
function TapPoint([string]$Name,$Point) { Step $Name @('shell','input','tap',"$($Point[0])","$($Point[1])") }
|
||||
function DragPoint([string]$Name,$Point,[int]$Dx,[int]$Dy=0) { Step $Name @('shell','input','swipe',"$($Point[0])","$($Point[1])","$($Point[0]+$Dx)","$($Point[1]+$Dy)",'650') }
|
||||
try {
|
||||
Check 'clean-source' (!$result.sourceDirty) $result.sourceCommit
|
||||
$build=Get-Content (Join-Path $EvidenceDir 'androidbuild-evidence.json') -Raw | ConvertFrom-Json
|
||||
@@ -75,41 +88,49 @@ try {
|
||||
Step 'six-initial-face-number' @('shell','input','tap','480','560') 1200
|
||||
$sixBefore=Save 'six-before'; Check 'six-real-initial' ((($sixBefore.puzzleStates[0].groups | ForEach-Object {$_.ballIds.Count}) -join ',') -eq '1,1') 'Two initial singleton groups'
|
||||
# Hold real Android touch while observing the contact candidate; no runtime control server.
|
||||
Touch @(1009,510,401,100); Start-Sleep -Milliseconds 100; Touch @(1291,510,401,100); Step 'six-contact-candidate'
|
||||
$left=BallPoint $sixBefore.puzzleStates[0] $sixBefore.puzzleStates[0].balls[0].id
|
||||
$right=BallPoint $sixBefore.puzzleStates[0] $sixBefore.puzzleStates[0].balls[1].id
|
||||
$destination=@(($right[0]-45),$right[1])
|
||||
Touch @($left[0],$left[1],401,100); Start-Sleep -Milliseconds 100; Touch @($destination[0],$destination[1],401,100); Step 'six-contact-candidate'
|
||||
$preview=Save 'six-preview'; Check 'six-preview-not-saved' (SameJson $preview $sixBefore) 'Preview JSON equals committed initial JSON'
|
||||
Touch @(1291,510,401,0); Step 'six-success-face-number'
|
||||
Touch @($destination[0],$destination[1],401,0); Step 'six-success-face-number'
|
||||
$six=Save 'six-success'; Check 'six-final-two' ($six.completedStageIds -contains 6 -and $six.puzzleStates.Count -eq 0 -and $six.latestFreePlay.groups.Count -eq 1 -and $six.latestFreePlay.groups[0].ballIds.Count -eq 2) 'Completed6; one2 group; no unfinished'
|
||||
Check 'six-ids-preserved' ((($six.latestFreePlay.balls.id | Sort-Object) -join ',') -eq (($sixBefore.puzzleStates[0].balls.id | Sort-Object) -join ',')) 'All original IDs preserved'
|
||||
Fixture 10; StartAudio 'audio-guide-split' 12
|
||||
Step 'ten-initial-face-number' @('shell','input','tap','1920','560') 1000
|
||||
Step 'ten-choose-friend' @('shell','input','tap','1120','510'); Step 'ten-split-mode' @('shell','input','tap','312','832')
|
||||
$tenInitial=Save 'ten-initial'; $left=BallPoint $tenInitial.puzzleStates[0] $tenInitial.puzzleStates[0].balls[0].id; $right=BallPoint $tenInitial.puzzleStates[0] $tenInitial.puzzleStates[0].balls[1].id
|
||||
TapPoint 'ten-choose-friend' $left; Step 'ten-split-mode' @('shell','input','tap','312','832')
|
||||
$tenBefore=Save 'ten-before'
|
||||
Step 'ten-zero-selection-drag' @('shell','input','swipe','1120','510','850','510','500')
|
||||
DragPoint 'ten-zero-selection-drag' $left -190
|
||||
Check 'ten-zero-unchanged' (SameJson $tenBefore (Save 'ten-zero-after')) 'Zero selection preserves JSON'
|
||||
Step 'ten-select-left' @('shell','input','tap','1120','510'); Step 'ten-select-right' @('shell','input','tap','1280','510')
|
||||
Step 'ten-all-selection-drag' @('shell','input','swipe','1120','510','850','510','500')
|
||||
TapPoint 'ten-select-left' $left; TapPoint 'ten-select-right' $right
|
||||
DragPoint 'ten-all-selection-drag' $left -190
|
||||
Check 'ten-all-unchanged' (SameJson $tenBefore (Save 'ten-all-after')) 'Entire selection preserves JSON'
|
||||
Step 'ten-deselect-right' @('shell','input','tap','1280','510'); Step 'ten-selected-count-face-number'
|
||||
TapPoint 'ten-deselect-right' $right; Step 'ten-selected-count-face-number'
|
||||
# Android injection preserves the out-of-window endpoint; emulator physical touch clamps its coordinates.
|
||||
Step 'ten-outside-cancel' @('shell','input','swipe','1120','510','2500','510','650')
|
||||
Step 'ten-outside-cancel' @('shell','input','swipe',"$($left[0])","$($left[1])",'2500',"$($left[1])",'650')
|
||||
Check 'ten-outside-cancel-unchanged' (SameJson $tenBefore (Save 'ten-outside-after')) 'Off-board release keeps committed JSON'
|
||||
Step 'ten-select-again' @('shell','input','tap','1120','510'); Step 'ten-split-again' @('shell','input','tap','312','832'); Step 'ten-selection-again' @('shell','input','tap','1120','510')
|
||||
Touch @(1120,510,421,100); Touch @(1030,510,421,100); Touch @(1390,510,422,100)
|
||||
Touch @(1030,510,421,0,1390,510,422,0); Step 'ten-pinch-switch'
|
||||
TapPoint 'ten-select-again' $left; Step 'ten-split-again' @('shell','input','tap','312','832'); TapPoint 'ten-selection-again' $left
|
||||
Touch @($left[0],$left[1],421,100); Touch @(($left[0]-65),$left[1],421,100); Touch @(($right[0]+75),$right[1],422,100)
|
||||
Touch @(($left[0]-65),$left[1],421,0,($right[0]+75),$right[1],422,0); Step 'ten-pinch-switch'
|
||||
$pinch=Save 'ten-pinch-after'; Check 'ten-pinch-no-split' ($pinch.puzzleStates[0].groups.Count -eq 1 -and (SameJson $pinch.puzzleStates[0].balls $tenBefore.puzzleStates[0].balls)) 'Pinch aborts split, all ball positions unchanged'
|
||||
# Return to unchanged committed camera by restarting from the fresh fixture before the successful split.
|
||||
Fixture 10; Step 'ten-success-start' @('shell','input','tap','1920','560'); Step 'ten-success-choose' @('shell','input','tap','1120','510')
|
||||
Step 'ten-success-split' @('shell','input','tap','312','832'); Step 'ten-success-select' @('shell','input','tap','1120','510')
|
||||
Step 'ten-success-drag' @('shell','input','swipe','1120','510','850','510','650')
|
||||
Fixture 10; Step 'ten-success-start' @('shell','input','tap','1920','560'); TapPoint 'ten-success-choose' $left
|
||||
Step 'ten-success-split' @('shell','input','tap','312','832'); TapPoint 'ten-success-select' $left
|
||||
DragPoint 'ten-success-drag' $left -190
|
||||
$ten=Save 'ten-success'; Check 'ten-final-one-one-no-remerge' ($ten.completedStageIds -contains 10 -and $ten.puzzleStates.Count -eq 0 -and $ten.latestFreePlay.groups.Count -eq 2 -and @($ten.latestFreePlay.groups | Where-Object {$_.ballIds.Count -ne 1}).Count -eq 0) 'Completed10; exactly1,1; no auto-remerge'
|
||||
Fixture 14; Step 'fourteen-initial' @('shell','input','tap','1200','366'); Step 'fourteen-choose-three' @('shell','input','tap','882','510')
|
||||
Step 'fourteen-split-mode' @('shell','input','tap','312','832'); Step 'fourteen-select-end-one' @('shell','input','tap','882','510'); Step 'fourteen-select-end-two' @('shell','input','tap','1200','510')
|
||||
Step 'fourteen-disconnected-selected' @(); Step 'fourteen-disconnected-split' @('shell','input','swipe','882','510','500','510','650')
|
||||
Fixture 14; Step 'fourteen-initial' @('shell','input','tap','1200','366'); $initial=Save 'fourteen-initial-board'
|
||||
$group=$initial.puzzleStates[0].groups[0]; $left=BallPoint $initial.puzzleStates[0] $group.ballIds[0]; $right=BallPoint $initial.puzzleStates[0] $group.ballIds[2]
|
||||
TapPoint 'fourteen-choose-three' $left
|
||||
Step 'fourteen-split-mode' @('shell','input','tap','312','832'); TapPoint 'fourteen-select-end-one' $left; TapPoint 'fourteen-select-end-two' $right
|
||||
Step 'fourteen-disconnected-selected' @(); DragPoint 'fourteen-disconnected-split' $left -270
|
||||
$fourteenBefore=Save 'fourteen-unfinished-before'; $sizes=@($fourteenBefore.puzzleStates[0].groups | ForEach-Object {$_.ballIds.Count} | Sort-Object)
|
||||
Check 'fourteen-disconnected-two-results' (($sizes -join ',') -eq '1,1,2') 'Selected disconnected ends form one2 friend; rest one1; original other1'
|
||||
Restart 'fourteen-restore'; Step 'fourteen-restore-selection' @('shell','input','tap','1200','616'); Step 'fourteen-restored' @('shell','input','tap','1200','366')
|
||||
Check 'fourteen-unfinished-restored' (SameJson $fourteenBefore (Save 'fourteen-unfinished-after')) 'All unfinished JSON including IDs positions groups camera restored'
|
||||
Step 'fourteen-single-merge' @('shell','input','swipe','1041','510','1418','510','650')
|
||||
$singles=@($fourteenBefore.puzzleStates[0].groups | Where-Object {$_.ballIds.Count -eq 1})
|
||||
$left=BallPoint $fourteenBefore.puzzleStates[0] $singles[0].ballIds[0]; $right=BallPoint $fourteenBefore.puzzleStates[0] $singles[1].ballIds[0]
|
||||
Step 'fourteen-single-merge' @('shell','input','swipe',"$($left[0])","$($left[1])","$($right[0]-45)","$($right[1])",'650')
|
||||
$fourteen=Save 'fourteen-success'; Check 'fourteen-final-two-two' ($fourteen.completedStageIds -contains 14 -and $fourteen.puzzleStates.Count -eq 0 -and $fourteen.latestFreePlay.groups.Count -eq 2 -and @($fourteen.latestFreePlay.groups | Where-Object {$_.ballIds.Count -ne 2}).Count -eq 0) 'Exactly2,2 completes14 after split then merge'
|
||||
Restart 'free-restore'; Step 'free-restored' @('shell','input','tap','1200','810')
|
||||
Check 'free-json-restored' (SameJson $fourteen (Save 'free-after-restore')) 'Final free board restores all groups IDs positions camera'
|
||||
|
||||
@@ -6,6 +6,7 @@ $package='com.magnetismheroes.game'; $activity="$package/com.unity3d.player.Unit
|
||||
$remote="/sdcard/Android/data/$package/files/progress.json"
|
||||
$checks=[Collections.Generic.List[object]]::new(); $commands=[Collections.Generic.List[object]]::new(); $recorders=[Collections.Generic.List[object]]::new()
|
||||
$result=[ordered]@{milestone='Content';sourceCommit=(& git rev-parse HEAD);sourceDirty=[bool](& git status --porcelain);serial=$Serial;apkSha256=(Get-FileHash -LiteralPath $ApkPath -Algorithm SHA256).Hash;status='failed'}
|
||||
$result.rendererProjection=@{fieldOfView=62;fixedWorldPivot=@(0,.65,0);rawCamera='Saved Board.camera JSON remains canonical';viewport='Landscape wm size max/min; remaining UI and physical touch helper assume sole 2400x1080 AVD'}
|
||||
$networkBefore=$null
|
||||
function Adb([string[]]$Arguments) {
|
||||
$output=& $adb -s $Serial @Arguments 2>&1; $code=$LASTEXITCODE
|
||||
@@ -23,10 +24,12 @@ function Same($First,$Second) { return ($First | ConvertTo-Json -Depth 12 -Compr
|
||||
function BallPoint($Board,[string]$Id) {
|
||||
$ball=@($Board.balls | Where-Object id -eq $Id)[0]; $camera=$Board.camera
|
||||
$rotation=[Numerics.Quaternion]::new($camera.rotation.x,$camera.rotation.y,$camera.rotation.z,$camera.rotation.w)
|
||||
$origin=[Numerics.Vector3]::new($camera.target.x,$camera.target.y,$camera.target.z)+[Numerics.Vector3]::Transform([Numerics.Vector3]::new(0,0,-$camera.distance),$rotation)
|
||||
$origin=[Numerics.Vector3]::new($camera.target.x,($camera.target.y+.65),$camera.target.z)+[Numerics.Vector3]::Transform([Numerics.Vector3]::new(0,0,-$camera.distance),$rotation)
|
||||
$local=[Numerics.Vector3]::Transform([Numerics.Vector3]::new($ball.position.x,$ball.position.y,$ball.position.z)-$origin,[Numerics.Quaternion]::Inverse($rotation))
|
||||
$scale=540/([Math]::Tan(23*[Math]::PI/180)*$local.Z)
|
||||
return @([int][Math]::Round(1200+$local.X*$scale),[int][Math]::Round(540-$local.Y*$scale))
|
||||
$size=Adb @('shell','wm','size'); if ($size -notmatch '(\d+)x(\d+)') { throw "Unknown device resolution: $size" }
|
||||
$width=[Math]::Max([int]$Matches[1],[int]$Matches[2]); $height=[Math]::Min([int]$Matches[1],[int]$Matches[2])
|
||||
$scale=($height/2)/([Math]::Tan(31*[Math]::PI/180)*$local.Z)
|
||||
return @([int][Math]::Round(($width/2)+$local.X*$scale),[int][Math]::Round(($height/2)-$local.Y*$scale))
|
||||
}
|
||||
function TapBall([string]$Name,$Board,[string]$Id) { $point=BallPoint $Board $Id; Step $Name @('shell','input','tap',"$($point[0])","$($point[1])") }
|
||||
function StagePoint([int]$Id) { $index=$Id-1; return @([int][Math]::Round((.12+($index%6)*.152)*2400),[int][Math]::Round((1-(.76-[Math]::Floor($index/6)*.123))*1080)) }
|
||||
|
||||
@@ -6,6 +6,7 @@ $package='com.magnetismheroes.game'; $activity="$package/com.unity3d.player.Unit
|
||||
$remote="/sdcard/Android/data/$package/files/progress.json"
|
||||
$checks=[Collections.Generic.List[object]]::new(); $commands=[Collections.Generic.List[object]]::new()
|
||||
$result=[ordered]@{milestone='Persistence';sourceCommit=(& git rev-parse HEAD);sourceDirty=[bool](& git status --porcelain);serial=$Serial;apkSha256=(Get-FileHash -LiteralPath $ApkPath -Algorithm SHA256).Hash;status='failed'}
|
||||
$result.rendererProjection=@{fieldOfView=62;fixedWorldPivot=@(0,.65,0);rawCamera='Saved Board.camera JSON remains canonical';viewport='Landscape wm size max/min; remaining UI and physical touch helper assume sole 2400x1080 AVD'}
|
||||
$physicalInput=$false
|
||||
function Adb([string[]]$Arguments) {
|
||||
$output=& $adb -s $Serial @Arguments 2>&1; $code=$LASTEXITCODE
|
||||
@@ -40,10 +41,12 @@ function Touch([int[]]$Contacts) {
|
||||
function BallPoint($Board,[string]$Id) {
|
||||
$ball=@($Board.balls | Where-Object id -eq $Id)[0]; $camera=$Board.camera
|
||||
$rotation=[Numerics.Quaternion]::new($camera.rotation.x,$camera.rotation.y,$camera.rotation.z,$camera.rotation.w)
|
||||
$origin=[Numerics.Vector3]::new($camera.target.x,$camera.target.y,$camera.target.z)+[Numerics.Vector3]::Transform([Numerics.Vector3]::new(0,0,-$camera.distance),$rotation)
|
||||
$origin=[Numerics.Vector3]::new($camera.target.x,($camera.target.y+.65),$camera.target.z)+[Numerics.Vector3]::Transform([Numerics.Vector3]::new(0,0,-$camera.distance),$rotation)
|
||||
$local=[Numerics.Vector3]::Transform([Numerics.Vector3]::new($ball.position.x,$ball.position.y,$ball.position.z)-$origin,[Numerics.Quaternion]::Inverse($rotation))
|
||||
$scale=540/([Math]::Tan(23*[Math]::PI/180)*$local.Z)
|
||||
return @([int][Math]::Round(1200+$local.X*$scale),[int][Math]::Round(540-$local.Y*$scale))
|
||||
$size=Adb @('shell','wm','size'); if ($size -notmatch '(\d+)x(\d+)') { throw "Unknown device resolution: $size" }
|
||||
$width=[Math]::Max([int]$Matches[1],[int]$Matches[2]); $height=[Math]::Min([int]$Matches[1],[int]$Matches[2])
|
||||
$scale=($height/2)/([Math]::Tan(31*[Math]::PI/180)*$local.Z)
|
||||
return @([int][Math]::Round(($width/2)+$local.X*$scale),[int][Math]::Round(($height/2)-$local.Y*$scale))
|
||||
}
|
||||
function TapBall([string]$Name,$Board,[string]$Id) { $point=BallPoint $Board $Id; Step $Name @('shell','input','tap',"$($point[0])","$($point[1])") }
|
||||
function SelectStage([string]$Name,[int]$Id) {
|
||||
|
||||
Reference in New Issue
Block a user