protected void UpdateTargetEntityPosition(RpgNetworkEntity entity)
    {
        if (entity == null)
        {
            return;
        }

        var targetPosition = entity.CacheTransform.position;

        CharacterEntity.PointClickMovement(targetPosition);
    }
예제 #2
0
    public static ItemDropEntity DropItem(RpgNetworkEntity dropper, int itemDataId, short level, short amount)
    {
        var gameInstance = GameInstance.Singleton;
        var dropPosition = dropper.CacheTransform.position + new Vector3(Random.Range(-1f, 1f) * gameInstance.dropDistance, 0, Random.Range(-1f, 1f) * gameInstance.dropDistance);
        // Raycast to find hit floor
        Vector3?   aboveHitPoint    = null;
        Vector3?   underHitPoint    = null;
        var        raycastLayerMask = ~(gameInstance.characterLayer.Mask | gameInstance.itemDropLayer.Mask);
        RaycastHit tempHit;

        if (Physics.Raycast(dropPosition, Vector3.up, out tempHit, 100f, raycastLayerMask))
        {
            aboveHitPoint = tempHit.point;
        }
        if (Physics.Raycast(dropPosition, Vector3.down, out tempHit, 100f, raycastLayerMask))
        {
            underHitPoint = tempHit.point;
        }
        // Set drop position to nearest hit point
        if (aboveHitPoint.HasValue && underHitPoint.HasValue)
        {
            if (Vector3.Distance(dropPosition, aboveHitPoint.Value) < Vector3.Distance(dropPosition, underHitPoint.Value))
            {
                dropPosition = aboveHitPoint.Value;
            }
            else
            {
                dropPosition = underHitPoint.Value;
            }
        }
        else if (aboveHitPoint.HasValue)
        {
            dropPosition = aboveHitPoint.Value;
        }
        else if (underHitPoint.HasValue)
        {
            dropPosition = underHitPoint.Value;
        }
        // Random rotation
        var dropRotation   = Vector3.up * Random.Range(0, 360);
        var identity       = dropper.Manager.Assets.NetworkSpawn(gameInstance.itemDropEntityPrefab.gameObject, dropPosition, Quaternion.Euler(dropRotation));
        var itemDropEntity = identity.GetComponent <ItemDropEntity>();
        var dropData       = CharacterItem.Create(itemDataId, level, amount);

        itemDropEntity.dropData = dropData;
        return(itemDropEntity);
    }