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

66 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;
internal class EntityCreateHandler : Handler
{
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-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
}
public void Handle(RagonBuffer buffer)
{
var attachId = buffer.ReadUShort();
var entityType = buffer.ReadUShort();
var entityId = buffer.ReadUShort();
var ownerId = buffer.ReadUShort();
var player = _playerCache.GetPlayerByPeer(ownerId);
var payload = new RagonPayload(buffer.Capacity);
payload.Read(buffer);
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
}
}