Skip to content

Commit c9c03ba

Browse files
author
billsonnn
committed
Add motto changing, dancing
1 parent b2a5be0 commit c9c03ba

16 files changed

Lines changed: 104 additions & 123 deletions

File tree

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
11
using System.Threading;
22
using System.Threading.Tasks;
3+
using Orleans;
34
using Turbo.Messages.Registry;
45
using Turbo.Primitives.Messages.Incoming.Room.Avatar;
6+
using Turbo.Primitives.Orleans;
57

68
namespace Turbo.PacketHandlers.Room.Avatar;
79

8-
public class ChangeMottoMessageHandler : IMessageHandler<ChangeMottoMessage>
10+
public class ChangeMottoMessageHandler(IGrainFactory grainFactory)
11+
: IMessageHandler<ChangeMottoMessage>
912
{
13+
private readonly IGrainFactory _grainFactory = grainFactory;
14+
1015
public async ValueTask HandleAsync(
1116
ChangeMottoMessage message,
1217
MessageContext ctx,
1318
CancellationToken ct
1419
)
1520
{
16-
await ValueTask.CompletedTask.ConfigureAwait(false);
21+
if (ctx.PlayerId < 0)
22+
return;
23+
24+
var player = _grainFactory.GetPlayerGrain(ctx.PlayerId);
25+
26+
await player.SetMottoAsync(message.Text, ct).ConfigureAwait(false);
1727
}
1828
}

Turbo.PacketHandlers/Room/Engine/GetHeightMapMessageHandler.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,5 @@ public async ValueTask HandleAsync(
1515
GetHeightMapMessage message,
1616
MessageContext ctx,
1717
CancellationToken ct
18-
)
19-
{
20-
await _roomService
21-
.EnterPendingRoomForPlayerIdAsync(ctx.AsActionContext(), ctx.PlayerId, ct)
22-
.ConfigureAwait(false);
23-
}
18+
) { }
2419
}

Turbo.Players/Grains/PlayerGrain.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,24 @@ public async Task SetFigureAsync(string figure, AvatarGenderType gender, Cancell
5050
var playerPresence = _grainFactory.GetPlayerPresenceGrain((int)this.GetPrimaryKeyLong());
5151

5252
await playerPresence.OnFigureUpdatedAsync(summary, ct);
53+
54+
await WriteToDatabaseAsync(ct);
55+
}
56+
57+
public async Task SetMottoAsync(string text, CancellationToken ct)
58+
{
59+
state.State.Motto = text;
60+
state.State.LastUpdated = DateTime.UtcNow;
61+
62+
await state.WriteStateAsync(ct);
63+
64+
var summary = await GetSummaryAsync(ct);
65+
66+
var playerPresence = _grainFactory.GetPlayerPresenceGrain((int)this.GetPrimaryKeyLong());
67+
68+
await playerPresence.OnPlayerUpdatedAsync(summary, ct);
69+
70+
await WriteToDatabaseAsync(ct);
5371
}
5472

5573
private async Task HydrateAsync(CancellationToken ct)

Turbo.Players/Grains/PlayerPresenceGrain.Avatar.cs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,8 @@ namespace Turbo.Players.Grains;
99

1010
internal sealed partial class PlayerPresenceGrain
1111
{
12-
public async Task OnFigureUpdatedAsync(PlayerSummarySnapshot snapshot, CancellationToken ct)
12+
public async Task OnPlayerUpdatedAsync(PlayerSummarySnapshot snapshot, CancellationToken ct)
1313
{
14-
await SendComposerAsync(
15-
new FigureUpdateEventMessageComposer
16-
{
17-
Figure = snapshot.Figure,
18-
Gender = snapshot.Gender,
19-
}
20-
);
21-
2214
if (_state.ActiveRoomId > 0)
2315
{
2416
await SendComposerAsync(
@@ -37,4 +29,17 @@ await SendComposerAsync(
3729
await room.UpdateAvatarWithPlayerAsync(snapshot, ct);
3830
}
3931
}
32+
33+
public async Task OnFigureUpdatedAsync(PlayerSummarySnapshot snapshot, CancellationToken ct)
34+
{
35+
await SendComposerAsync(
36+
new FigureUpdateEventMessageComposer
37+
{
38+
Figure = snapshot.Figure,
39+
Gender = snapshot.Gender,
40+
}
41+
);
42+
43+
await OnPlayerUpdatedAsync(snapshot, ct);
44+
}
4045
}

Turbo.Primitives/Messages/Incoming/Room/Avatar/ChangeMottoMessage.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@
22

33
namespace Turbo.Primitives.Messages.Incoming.Room.Avatar;
44

5-
public record ChangeMottoMessage : IMessageEvent { }
5+
public record ChangeMottoMessage : IMessageEvent
6+
{
7+
public required string Text { get; init; }
8+
}

Turbo.Primitives/Players/Grains/IPlayerGrain.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace Turbo.Primitives.Grains.Players;
99
public interface IPlayerGrain : IGrainWithIntegerKey
1010
{
1111
public Task SetFigureAsync(string figure, AvatarGenderType gender, CancellationToken ct);
12+
public Task SetMottoAsync(string text, CancellationToken ct);
1213
public Task<PlayerSummarySnapshot> GetSummaryAsync(CancellationToken ct);
1314

1415
public Task<PlayerExtendedProfileSnapshot> GetExtendedProfileSnapshotAsync(

Turbo.Primitives/Players/Grains/IPlayerPresenceGrain.Avatar.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ namespace Turbo.Primitives.Players.Grains;
66

77
public partial interface IPlayerPresenceGrain
88
{
9+
public Task OnPlayerUpdatedAsync(PlayerSummarySnapshot snapshot, CancellationToken ct);
910
public Task OnFigureUpdatedAsync(PlayerSummarySnapshot snapshot, CancellationToken ct);
1011
}

Turbo.Primitives/Players/Grains/IPlayerWalletGrain.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
using System.Collections.Generic;
2-
using System.Collections.Immutable;
32
using System.Threading;
43
using System.Threading.Tasks;
54
using Orleans;
6-
using Turbo.Primitives.Orleans.Snapshots.Players;
75
using Turbo.Primitives.Players.Wallet;
86

97
namespace Turbo.Primitives.Players.Grains;

Turbo.Primitives/Rooms/Object/Avatars/IRoomAvatar.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Collections.Generic;
2-
using Turbo.Primitives.Orleans.Snapshots.Players;
32
using Turbo.Primitives.Rooms.Enums;
43
using Turbo.Primitives.Rooms.Object.Logic.Avatars;
54
using Turbo.Primitives.Rooms.Snapshots.Avatars;
@@ -26,8 +25,6 @@ public interface IRoomAvatar : IRoomObject
2625
public Rotation HeadRotation { get; }
2726
public Dictionary<AvatarStatusType, string> Statuses { get; }
2827

29-
public AvatarDanceType DanceType { get; }
30-
3128
public Altitude PostureOffset { get; set; }
3229
public int GoalTileId { get; }
3330
public int NextTileId { get; set; }
@@ -43,7 +40,6 @@ public interface IRoomAvatar : IRoomObject
4340
public void SetHeight(Altitude z);
4441
public void SetBodyRotation(Rotation rot);
4542
public void SetHeadRotation(Rotation rot);
46-
public bool SetDance(AvatarDanceType danceType = AvatarDanceType.None);
4743
public void Sit(bool flag = true, Altitude? height = null, Rotation? rot = null);
4844
public void Lay(bool flag = true, Altitude? height = null, Rotation? rot = null);
4945

Turbo.Primitives/Rooms/Object/Avatars/IRoomPlayer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ public interface IRoomPlayer : IRoomAvatar<IRoomPlayer, IRoomPlayerLogic, IRoomP
1010
new IRoomPlayerLogic Logic { get; }
1111
public PlayerId PlayerId { get; }
1212
public AvatarGenderType Gender { get; }
13+
public AvatarDanceType DanceType { get; }
1314
public bool UpdateWithPlayer(PlayerSummarySnapshot snapshot);
15+
public bool SetDance(AvatarDanceType danceType = AvatarDanceType.None);
1416
}

0 commit comments

Comments
 (0)