Пример #1
0
    public void ServerPerformInteraction(AimApply interaction)
    {
        if (reagentContainer.CurrentCapacity >= 5 && !safety)
        {
            Vector2
                startPos = interaction.Performer.transform
                           .position;              //TODO: use registeritem position once picked up items get fixed
            Vector2 targetPos = new Vector2(Mathf.RoundToInt(interaction.WorldPositionTarget.x),
                                            Mathf.RoundToInt(interaction.WorldPositionTarget.y));
            List <Vector3Int> positionList = MatrixManager.GetTiles(startPos, targetPos, travelDistance);
            StartCoroutine(Fire(positionList));

            var points = GetParallelPoints(startPos, targetPos, true);
            positionList = MatrixManager.GetTiles(points[0], points[1], travelDistance);
            StartCoroutine(Fire(positionList));

            points       = GetParallelPoints(startPos, targetPos, false);
            positionList = MatrixManager.GetTiles(points[0], points[1], travelDistance);
            StartCoroutine(Fire(positionList));

            var angle = Mathf.Atan2(targetPos.y - startPos.y, targetPos.x - startPos.x) * 180 / Mathf.PI;
            particleSync = angle;
            SoundManager.PlayNetworkedAtPos("Extinguish", startPos, 1);
            reagentContainer.MoveReagentsTo(5);
        }
    }
Пример #2
0
    public void ServerPerformInteraction(AimApply interaction)
    {
        //just in case
        if (reagentContainer == null)
        {
            return;
        }

        if (reagentContainer.CurrentCapacity < reagentsPerUse)
        {
            return;
        }

        Vector2           startPos     = gameObject.AssumedWorldPosServer();
        Vector2           targetPos    = new Vector2(Mathf.RoundToInt(interaction.WorldPositionTarget.x), Mathf.RoundToInt(interaction.WorldPositionTarget.y));
        List <Vector3Int> positionList = MatrixManager.GetTiles(startPos, targetPos, travelDistance);

        StartCoroutine(Fire(positionList));

        Effect.PlayParticleDirectional(this.gameObject, interaction.TargetVector);

        reagentContainer.TakeReagents(reagentsPerUse);
        SoundManager.PlayNetworkedAtPos("Spray2", startPos, 1);

        interaction.Performer.Pushable()?.NewtonianMove((-interaction.TargetVector).NormalizeToInt(), speed: 1f);
    }
Пример #3
0
    public void ServerPerformInteraction(AimApply interaction)
    {
        if (reagentContainer.CurrentCapacity < reagentsPerUse || safety)
        {
            return;
        }

        Vector2           startPos     = gameObject.AssumedWorldPosServer();
        Vector2           targetPos    = interaction.WorldPositionTarget.To2Int();
        List <Vector3Int> positionList = MatrixManager.GetTiles(startPos, targetPos, travelDistance);

        StartCoroutine(Fire(positionList));

        var points = GetParallelPoints(startPos, targetPos, true);

        positionList = MatrixManager.GetTiles(points[0], points[1], travelDistance);
        StartCoroutine(Fire(positionList));

        points       = GetParallelPoints(startPos, targetPos, false);
        positionList = MatrixManager.GetTiles(points[0], points[1], travelDistance);
        StartCoroutine(Fire(positionList));

        Effect.PlayParticleDirectional(this.gameObject, interaction.TargetVector);

        SoundManager.PlayNetworkedAtPos("Extinguish", startPos, 1);
        reagentContainer.TakeReagents(reagentsPerUse);

        interaction.Performer.Pushable()?.NewtonianMove((-interaction.TargetVector).NormalizeToInt());
    }
Пример #4
0
    private List <Vector3Int> CheckPassableTiles(Vector2 startPos, Vector2 targetPos)
    {
        List <Vector3Int> passableTiles = new List <Vector3Int>();
        List <Vector3Int> positionList  = MatrixManager.GetTiles(startPos, targetPos, travelDistance);

        for (int i = 0; i < positionList.Count; i++)
        {
            if (!MatrixManager.IsAtmosPassableAt(positionList[i], true))
            {
                return(passableTiles);
            }
            passableTiles.Add(positionList[i]);
        }
        return(passableTiles);
    }
Пример #5
0
    protected override void ServerPerformInteraction(AimApply interaction)
    {
        if (reagentContainer.CurrentCapacity >= 5)
        {
            Vector2           startPos     = interaction.Performer.transform.position;
            Vector2           targetPos    = new Vector2(Mathf.RoundToInt(interaction.WorldPositionTarget.x), Mathf.RoundToInt(interaction.WorldPositionTarget.y));
            List <Vector3Int> positionList = MatrixManager.GetTiles(startPos, targetPos, travelDistance);
            StartCoroutine(Fire(positionList));

            var angle = Mathf.Atan2(targetPos.y - startPos.y, targetPos.x - startPos.x) * 180 / Mathf.PI;
            particleSync = angle;

            reagentContainer.MoveReagentsTo(5);
            SoundManager.PlayNetworkedAtPos("Spray2", startPos, 1);
        }
    }