Exemplo n.º 1
0
    public CreatorSystem(PhysicsScene physicsScene, CollisionMatrix collisionMatrix)
    {
        _physicsScene    = physicsScene;
        _collisionMatrix = collisionMatrix;

        _heroFilter = new EcsFilter().AllOf <HeroComponent>();

        _staticRectFilter          = new EcsFilter().AllOf <StaticRectComponent, CharacterComponent, BroadphaseRefComponent>();
        _staticCircleFilter        = new EcsFilter().AllOf <StaticCircleComponent, CharacterComponent, BroadphaseRefComponent>();
        _dynamicBlueCircleFilter   = new EcsFilter().AllOf <BlueCircleComponent, CharacterComponent, BroadphaseRefComponent>();
        _dynamicYellowCircleFilter = new EcsFilter().AllOf <YellowCircleComponent, CharacterComponent, BroadphaseRefComponent>();
    }
Exemplo n.º 2
0
    private void UpdateCollisions()
    {
        List <TankContainer> list            = new List <TankContainer>();
        CollisionMatrix      collisionMatrix = default(CollisionMatrix);
        Vector3 position = base.transform.position;

        foreach (KeyValuePair <TankContainer, float> activeCollision in activeCollisions)
        {
            TankContainer key = activeCollision.Key;
            if (key == null || key.transform == null || key.CurrentHealth <= 0f)
            {
                list.Add(key);
            }
            else
            {
                Vector3 position2 = key.transform.position;
                if ((position - position2).sqrMagnitude > activeCollision.Value + collisionRadius)
                {
                    list.Add(key);
                }
                else
                {
                    bool flag = position.x < position2.x;
                    if (key.Enemy != null && TankGame.instance.Boss != null && key.Enemy == TankGame.instance.Boss)
                    {
                        collisionMatrix.immovableLeft  |= !flag;
                        collisionMatrix.immovableRight |= flag;
                    }
                    else
                    {
                        collisionMatrix.movableLeft  |= !flag;
                        collisionMatrix.movableRight |= flag;
                    }
                }
            }
        }
        if (position.x - collisionRadius <= moveBoundaries.min)
        {
            collisionMatrix.immovableLeft = true;
        }
        else if (!float.IsInfinity(moveBoundaries.max) && position.x + collisionRadius >= moveBoundaries.max)
        {
            collisionMatrix.immovableRight = true;
        }
        this.collisionMatrix = collisionMatrix;
        foreach (TankContainer item in list)
        {
            activeCollisions.Remove(item);
        }
    }
 public void SetCollisionMatrixAndRenewDirectionIfNeeded(CollisionMatrix newMatrix)
 {
     _collisionMatrix = newMatrix;
     SetNewDirectionIfNeeded();
 }
 private void InitCollisionMatrix()
 {
     _collisionMatrix = new CollisionMatrix();
     _collisionMatrix.Init();
 }