Заготовка роутера конца игры

This commit is contained in:
Сергей Бондарь 2026-08-05 13:20:53 +03:00
parent ffa123e8c1
commit 67f9167523
7 changed files with 291 additions and 15 deletions

View File

@ -35,6 +35,7 @@ Transform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1661318112489111391}
- {fileID: 1649651658890651227}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!96 &2785177574404548980
@ -308,6 +309,100 @@ MonoBehaviour:
acceleration: 200
maxFallingRotationSpeed: 500
spriteRenderer: {fileID: 5157516706225878083}
mask: {fileID: 4898561958825486297}
winDots: {fileID: 1649651658890651227}
winAnimationDuration: 1
--- !u!1 &5381885663262334684
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1649651658890651227}
- component: {fileID: 4851732468212733041}
m_Layer: 0
m_Name: WinDots
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1649651658890651227
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5381885663262334684}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -1.885, y: -1.411, z: 0}
m_LocalScale: {x: 0.1, y: 0.1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2308229979791902274}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &4851732468212733041
SpriteRenderer:
serializedVersion: 2
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5381885663262334684}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: -5330059
m_SortingLayer: 2
m_SortingOrder: 1
m_MaskInteraction: 1
m_Sprite: {fileID: 21300000, guid: 8a5c9e10e873e84469d2775643ee2963, type: 3}
m_Color: {r: 0.906171, g: 0.72264147, b: 1, a: 0.39215687}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1, y: 1}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
--- !u!1 &7100645357252458328
GameObject:
m_ObjectHideFlags: 0
@ -318,8 +413,9 @@ GameObject:
m_Component:
- component: {fileID: 1661318112489111391}
- component: {fileID: 5157516706225878083}
- component: {fileID: 4898561958825486297}
m_Layer: 0
m_Name: image
m_Name: image/mask
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -389,13 +485,72 @@ SpriteRenderer:
m_SortingLayer: 2
m_SortingOrder: 0
m_MaskInteraction: 0
m_Sprite: {fileID: 21300000, guid: 8d6432ff047c62946a41e3235f28ba57, type: 3}
m_Sprite: {fileID: 21300000, guid: 024833a84adf142449000086760fe890, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1.6384, y: 1.6384}
m_Size: {x: 1.2641976, y: 1.2641976}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
--- !u!331 &4898561958825486297
SpriteMask:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7100645357252458328}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_Sprite: {fileID: 21300000, guid: 024833a84adf142449000086760fe890, type: 3}
m_MaskAlphaCutoff: 0.2
m_FrontSortingLayerID: 0
m_BackSortingLayerID: 0
m_FrontSortingLayer: 0
m_BackSortingLayer: 0
m_FrontSortingOrder: 0
m_BackSortingOrder: 0
m_IsCustomRangeActive: 0
m_SpriteSortPoint: 0
m_MaskSource: 0

View File

@ -4287,6 +4287,50 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 233260561}
m_CullTransparentMesh: 1
--- !u!1 &240039282
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 240039284}
- component: {fileID: 240039283}
m_Layer: 0
m_Name: EndgameHandler
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &240039283
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 240039282}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f7668d2cc6a5cfd4db6e4fb4d83dd1a3, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::EndGameHandler
--- !u!4 &240039284
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 240039282}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -2.95738, y: -3.20088, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &245771467
GameObject:
m_ObjectHideFlags: 0
@ -4630,6 +4674,7 @@ MonoBehaviour:
CharactersConfigurator: {fileID: 141381088}
menuGameplayTransit: {fileID: 29868612}
turnManager: {fileID: 1329752846}
endGameHandler: {fileID: 240039283}
setPasswordPanel: {fileID: 131572818}
vitrinaPanel: {fileID: 61619038}
qrPanel: {fileID: 1060301113}
@ -4642,7 +4687,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 259182278}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 20, y: 6, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
@ -38771,16 +38816,17 @@ SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1396811479}
- {fileID: 259182280}
- {fileID: 1948752564}
- {fileID: 519420032}
- {fileID: 29868613}
- {fileID: 240039284}
- {fileID: 1122363135}
- {fileID: 1081324697}
- {fileID: 1967587903}
- {fileID: 411367487}
- {fileID: 1768372452}
- {fileID: 1259803112}
- {fileID: 259182280}
- {fileID: 1542626845}
- {fileID: 1851050357}
- {fileID: 1165555974}

View File

@ -65,6 +65,7 @@ public class GameManager : MonoBehaviour
[SerializeField] private MenuGameplayTransit menuGameplayTransit;
[SerializeField] TurnManager turnManager;
public EndGameHandler endGameHandler;
//public PvpPointer pvpPointer;
//public MovesAndTimeCounter movesAndTimeCounter;

View File

@ -1,4 +1,5 @@
using UnityEngine;
using DG.Tweening;
using UnityEngine;
public class Chip : MonoBehaviour
{
@ -7,14 +8,26 @@ public class Chip : MonoBehaviour
[SerializeField] float maxFallingRotationSpeed = 500;
[SerializeField] private SpriteRenderer spriteRenderer;
[SerializeField] private SpriteMask mask;
[Header("Победная анимация")]
[SerializeField] private Transform winDots;
[SerializeField] private float winAnimationDuration = 1;
private float chipVelocity = 0;
private float rotationSpeed = 0;
private float winDotsPosition = 1.5f;
private Tween winTween;
public void Configure(Sprite sprite, Team team)
{
spriteRenderer.sprite = sprite;
mask.sprite = sprite;
this.team = team;
mask.enabled = false;
winDots.gameObject.SetActive(false);
}
public virtual void RemoveFromField()
@ -49,4 +62,28 @@ public class Chip : MonoBehaviour
public void SetRandomRotationSpeed() => rotationSpeed = Random.Range(-maxFallingRotationSpeed, maxFallingRotationSpeed);
public void Rotate() => transform.Rotate(Vector3.forward * rotationSpeed * Time.deltaTime);
public void WinAnimation()
{
if(winTween != null)
{
winTween.Kill();
winTween = null;
}
mask.enabled = true;
winDots.gameObject.SetActive(true);
Vector2 startPosition = new Vector2(winDotsPosition, winDotsPosition);
winDots.localPosition = startPosition;
winTween = winDots.DOLocalMove(-startPosition, winAnimationDuration).SetEase(Ease.Linear);
winTween.onComplete = () =>
{
mask.enabled = false;
winDots.gameObject.SetActive(false);
};
winTween.PlayForward();
}
}

View File

@ -0,0 +1,38 @@
using System.Collections.Generic;
using UnityEngine;
public class EndGameHandler : MonoBehaviour
{
public void HandleEndGame(Team lastPlayer, GameMode gameMode, CheckResult lastResult)
{
print("Конец игры");
if (lastResult.Draw)
DrawHandler();
else
WinHandler(winner: lastPlayer,
gameMode: gameMode,
winChipsCoords: lastResult.WinningIndexes);
}
private void DrawHandler()
{
print("Это ничья");
}
private void WinHandler(Team winner, GameMode gameMode, HashSet<(int row, int col)> winChipsCoords)
{
Debug.Log($"Победа {winner}; Режим {gameMode}");
PlayWinChipsAnimation(winChipsCoords);
}
private void PlayWinChipsAnimation(HashSet<(int row, int col)> winChipsCoords)
{
Chip[,] grid = Board.Instance.Grid;
foreach (var winCoord in winChipsCoords)
grid[winCoord.col, winCoord.row].WinAnimation();
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f7668d2cc6a5cfd4db6e4fb4d83dd1a3

View File

@ -1,9 +1,8 @@
using Cysharp.Threading.Tasks.Triggers;
using System;
using System;
using UnityEngine;
public class TurnManager : MonoBehaviour
{
{//todo: добавить отслеживание по таймеру
[Header("Players")]
[SerializeField] private Player player1;
[SerializeField] private Player player2;
@ -92,13 +91,11 @@ public class TurnManager : MonoBehaviour
{
isGameOver = true;
currentPlayer.Sleep();
ControlsPerformer.Instance.SetControlable(null);
BasePlayer lastPlayer = (BasePlayer)currentPlayer;
Team lastPlayerTeam = ((BasePlayer)currentPlayer).team;
var result = FieldChecker.lastResult;
Debug.Log($"end: {result.End}; draw: {result.Draw}; lastPlayer: {lastPlayer.team}");
GameManager.instance.endGameHandler.HandleEndGame(lastPlayerTeam, gameMode, result);
}
}