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); } }
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); }
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()); }
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); }
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); } }