fix: the screen will be stuck when seal is killed

This commit is contained in:
Somebody
2025-05-11 10:25:12 +08:00
parent 77f67b907c
commit dd855017b5
2 changed files with 25 additions and 6 deletions

View File

@@ -283,7 +283,10 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance
Y = speed.Y
};
List<BaseMarbleGameSyncData> syncData = [];
List<BaseMarbleGameSyncData> syncData =
[
new MarbleGameEffectSyncData(seal, MarbleFrameType.Effect, 101)
];
foreach (var sealInst in Players.OfType<MarbleGamePlayerInstance>().SelectMany(x => x.SealList.Values)
.Where(x => x.OnStage))
@@ -490,15 +493,14 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance
if (target.CurHp <= 0)
{
// die
target.CurHp = 0;
// score
if (Players.OfType<MarbleGamePlayerInstance>().All(x => x.Score < 6))
{
attackerPlayer.Score++;
syncData.Add(new MarbleGameScoreSyncData((Players[0] as MarbleGamePlayerInstance)!.Score,
(Players[1] as MarbleGamePlayerInstance)!.Score, MarbleFrameType.TeamScore));
syncData.Add(new MarbleGameScoreSyncData((Players[0] as MarbleGamePlayerInstance)!.Score,
(Players[1] as MarbleGamePlayerInstance)!.Score, MarbleFrameType.TeamScore));
}
target.CurHp = 0;
}
return syncData;
@@ -538,6 +540,7 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance
X = posXBaseValue * -1f,
};
syncData.RemoveAll(x => x.ToProto().Id == seal.Id);
syncData.Add(new MarbleGameSealActionSyncData(seal, MarbleFrameType.Revive, time));
}
@@ -568,6 +571,7 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance
Y = sealB.Position.Y + moveVec.Y
};
syncData.RemoveAll(x => x.ToProto().Id == sealB.Id);
syncData.Add(new MarbleGameSealActionSyncData(sealB, MarbleFrameType.Revive, time));
}
}
@@ -584,7 +588,7 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance
{
LobbyBasicInfo = { ParentLobby.Players.Select(x => x.ToProto()) },
CurActionTeamType = CurMoveTeamType,
LevelId = 101,
LevelId = 100,
TeamAPlayer = (uint)Players[0].LobbyPlayer.Player.Uid,
TeamBPlayer = (uint)Players[1].LobbyPlayer.Player.Uid,
TeamARank = 1,

View File

@@ -38,6 +38,21 @@ public class MarbleGameHpChangeSyncData(MarbleGameSealInstance inst, MarbleFrame
}
}
public class MarbleGameEffectSyncData(MarbleGameSealInstance inst, MarbleFrameType frameType, int skillId, float time = 0f) : MarbleGameSealSyncData(inst, frameType)
{
public override MarbleGameSyncData ToProto()
{
return new MarbleGameSyncData
{
FrameType = FrameType,
Id = (uint)Instance.Id,
Time = time,
SealSkillId = (uint)skillId,
CollisionPosition = new MarbleSealVector()
};
}
}
public class MarbleGameSealSyncData(MarbleGameSealInstance inst, MarbleFrameType frameType) : BaseMarbleGameSyncData
{
public MarbleGameSealInstance Instance { get; set; } = inst.Clone();