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

67 lines
2.0 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-08 21:13:31 +03:00
internal class EntityCreateHandler : IHandler
2023-03-06 10:06:43 +04:00
{
private readonly RagonClient _client;
private readonly RagonPlayerCache _playerCache;
private readonly RagonEntityCache _entityCache;
2023-07-29 10:58:06 +03:00
private readonly IRagonEntityListener _entityListener;
2023-10-11 19:37:50 +03:00
2023-03-06 10:06:43 +04:00
public EntityCreateHandler(
RagonClient client,
RagonPlayerCache playerCache,
2023-07-29 10:58:06 +03:00
RagonEntityCache entityCache,
IRagonEntityListener entityListener
2023-03-06 10:06:43 +04:00
)
{
_client = client;
_entityCache = entityCache;
_playerCache = playerCache;
2023-07-29 10:58:06 +03:00
_entityListener = entityListener;
2023-03-06 10:06:43 +04:00
}
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 attachId = reader.ReadUShort();
var entityType = reader.ReadUShort();
var entityId = reader.ReadUShort();
var ownerId = reader.ReadUShort();
2023-03-06 10:06:43 +04:00
var player = _playerCache.GetPlayerByPeer(ownerId);
2023-10-08 21:13:31 +03:00
var payload = new RagonPayload(reader.Capacity);
payload.Read(reader);
2023-03-06 10:06:43 +04:00
if (player == null)
{
RagonLog.Warn($"Owner {ownerId}|{player.Name} not found in players");
return;
}
2023-06-27 23:41:30 +03:00
var hasAuthority = _playerCache.Local.Id == player.Id;
2023-07-29 10:58:06 +03:00
var entity = _entityCache.TryGetEntity(attachId, entityType, 0, entityId, hasAuthority, out var hasCreated);
entity.AttachPayload(payload);
if (hasCreated)
_entityListener.OnEntityCreated(entity);
entity.Attach(_client, entityId, entityType, hasAuthority, player);
2023-03-06 10:06:43 +04:00
}
}