import typing
from TransformsAI.Animo.Objects import Resolution, TypeIds
from TransformsAI.Animo.Grid import GridObject, VoxelGrid, GridTransform
from TransformsAI.Animo.Objects.Items import BallItem, ObjectInfo
from TransformsAI.Animo.Numerics import Vector2Int, Vector3Int
from System import Guid
from TransformsAI.Animo.Simulation.Intents import Intent
from System.Collections.Generic import List_1, IEnumerable_1

class BounceResolution(Resolution):
    def __init__(self, creator: GridObject, target: BallItem, aimDirection: Vector2Int) -> None: ...
    AimDirection : Vector2Int
    BallPosition : Vector3Int
    Info : ObjectInfo
    @property
    def Ball(self) -> BallItem: ...
    @Ball.setter
    def Ball(self, value: BallItem) -> BallItem: ...
    @property
    def BasePriority(self) -> int: ...
    @property
    def CanBeOnGrid(self) -> bool: ...
    @property
    def Creator(self) -> GridObject: ...
    @property
    def Direction(self) -> Vector3Int: ...
    @property
    def Grid(self) -> VoxelGrid: ...
    @property
    def InstanceId(self) -> Guid: ...
    @property
    def IsDestroyed(self) -> bool: ...
    @property
    def IsOnGrid(self) -> bool: ...
    @property
    def Position(self) -> Vector3Int: ...
    @property
    def Transform(self) -> GridTransform: ...
    @property
    def TransformOnGrid(self) -> typing.Optional[GridTransform]: ...
    @property
    def TypeId(self) -> TypeIds: ...
    @property
    def VariantId(self) -> int: ...
    @VariantId.setter
    def VariantId(self, value: int) -> int: ...
    def CalculateIntent(self) -> Intent: ...
    def Destroy(self) -> None: ...
    def ExecuteIntent(self, intent: Intent, toRecalculate: List_1[GridObject]) -> None: ...
    def HandleConflict(self, conflicts: IEnumerable_1[Intent], intent: Intent, toRecalculate: List_1[GridObject]) -> None: ...
    def Reset(self) -> None: ...

