Files
Ragon/Ragon.Client/Sources/Handler/EntityEventHandler.cs
T

54 lines
1.6 KiB
C#
Raw Normal View History

2023-03-06 10:06:43 +04:00
/*
* Copyright 2023 Eduard Kargin <kargin.eduard@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using Ragon.Protocol;
namespace Ragon.Client;
2023-10-04 14:42:59 +03:00
internal class EntityEventHandler : IHandler
2023-03-06 10:06:43 +04:00
{
private readonly RagonPlayerCache _playerCache;
private readonly RagonEntityCache _entityCache;
public EntityEventHandler(
RagonPlayerCache playerCache,
RagonEntityCache entityCache
)
{
_playerCache = playerCache;
_entityCache = entityCache;
}
2023-10-08 21:13:31 +03:00
public void Handle(RagonBuffer reader)
2023-03-06 10:06:43 +04:00
{
2023-10-08 21:13:31 +03:00
var eventCode = reader.ReadUShort();
var peerId = reader.ReadUShort();
var executionMode = (RagonReplicationMode)reader.ReadByte();
var entityId = reader.ReadUShort();
2023-03-06 10:06:43 +04:00
var player = _playerCache.GetPlayerByPeer(peerId);
if (player == null)
{
RagonLog.Warn($"Player not found for event {eventCode}");
return;
}
2023-05-07 12:46:39 +03:00
if (player.IsLocal && executionMode == RagonReplicationMode.LocalAndServer)
2023-03-06 10:06:43 +04:00
return;
2023-10-08 21:13:31 +03:00
_entityCache.OnEvent(player, entityId, eventCode, reader);
2023-03-06 10:06:43 +04:00
}
}