public static int Distance(IObject object1, IObject object2, Collision.CollisionType collisionType)
        {
            int       result       = 0;
            Rectangle intersection = Rectangle.Intersect(object1.rectangle, object2.rectangle);

            if (intersection.IsEmpty)
            {
                return(result);
            }
            else
            {
                if (collisionType == Collision.CollisionType.Above || collisionType == Collision.CollisionType.Below)
                {
                    result = intersection.Height;
                    return(result);
                }
                else if (collisionType == Collision.CollisionType.Right || collisionType == Collision.CollisionType.Left)
                {
                    result = intersection.Width;
                    return(result);
                }
                else
                {
                    return(result);
                }
            }
        }
Esempio n. 2
0
        public static int Update(IPlayer mario, IEnemy enemy, Collision.CollisionType collisionType)
        {
            switch (collisionType)
            {
            case Collision.CollisionType.Above:
                enemy.TakeDamage();

                return((int)Enum.DisableMovementType.Down);

            case Collision.CollisionType.Below:

                enemy.Attack(mario);
                mario.Attack(enemy);
                return((int)Enum.DisableMovementType.Up);

            case Collision.CollisionType.Left:

                enemy.Attack(mario);
                mario.Attack(enemy);
                return((int)Enum.DisableMovementType.Right);

            case Collision.CollisionType.Right:

                enemy.Attack(mario);
                mario.Attack(enemy);
                return((int)Enum.DisableMovementType.Left);

            default:
                return((int)Enum.DisableMovementType.None);
            }
        }
        public static void Update(ILevel level)
        {
            int getCond;

            foreach (IEnemy enemy1 in level.EnemyList)
            {
                enemy1.ChangeMovement(0);
                foreach (IBlock block in level.BlockList)
                {
                    colli   = Collision.GetCollision(enemy1, block);
                    getCond = EBlockCollisionHandler.Update(enemy1, block, colli);
                    colliList.Add(getCond);
                }
                foreach (IEnemy enemy2 in level.EnemyList)
                {
                    if (!enemy1.Equals(enemy2))
                    {
                        colli   = Collision.GetCollision(enemy1, enemy2);
                        getCond = EEnemyCollisionHandler.Update(enemy1, enemy2, colli);
                        colliList.Add(getCond);
                    }
                }
                foreach (int i in colliList)
                {
                    if (i != 0)
                    {
                        enemy1.ChangeMovement(i);
                    }
                }
                colliList.Clear();
            }
        }
Esempio n. 4
0
        public static void Update(IProjectile fireball, IBoss BossPr, Collision.CollisionType collisionType)
        {
            switch (collisionType)
            {
            case Collision.CollisionType.Above:
                fireball.Attack(BossPr);

                return;

            case Collision.CollisionType.Below:
                fireball.Attack(BossPr);

                return;

            case Collision.CollisionType.Left:
                fireball.Attack(BossPr);

                return;

            case Collision.CollisionType.Right:
                fireball.Attack(BossPr);

                return;

            default:
                return;
            }
        }
Esempio n. 5
0
        public static void Update(ILevel level)
        {
            foreach (IProjectile fireball in level.ProjectileQueue)
            {
                if (level.EnemyList.Count != 0)
                {
                    foreach (IEnemy enemy in level.EnemyList)
                    {
                        colli = Collision.GetCollision(fireball, enemy);
                        FBEnemyCollisionHandler.Update(fireball, enemy, colli);
                    }
                }
                if (level.BlockList.Count != 0)
                {
                    foreach (IBlock block in level.BlockList)
                    {
                        colli = Collision.GetCollision(fireball, block);
                        FBBlockCollisionHandler.Update(fireball, block, colli);
                    }
                }

                if (level.BossPr != null)
                {
                    colli = Collision.GetCollision(fireball, level.BossPr);
                    FBBossPrincessCollisionHandler.Update(fireball, level.BossPr, colli);
                }
                if (level.Mygame.Mario != null)
                {
                    colli = Collision.GetCollision(fireball, level.Mygame.Mario);
                    FBMarioCollisionHandler.Update(fireball, level.Mygame.Mario, colli);
                }
            }
        }
Esempio n. 6
0
        public static int Update(IPlayer mario, IFire fire, Collision.CollisionType collisionType)
        {
            switch (collisionType)
            {
            case Collision.CollisionType.Above:
                fire.Attack(mario);

                return((int)Enum.DisableMovementType.Down);

            case Collision.CollisionType.Below:
                fire.Attack(mario);

                return((int)Enum.DisableMovementType.Up);

            case Collision.CollisionType.Left:

                fire.Attack(mario);

                return((int)Enum.DisableMovementType.Right);

            case Collision.CollisionType.Right:

                fire.Attack(mario);
                return((int)Enum.DisableMovementType.Left);

            default:
                return((int)Enum.DisableMovementType.None);
            }
        }
        static public RaycastResults Raycast(Vector2 origin, Vector2 direction, Collision.CollisionType type)
        {
            RaycastResults result = null;

            if (type == Collision.CollisionType.CircleIntersection)
            {
                foreach (Circle collider in circleColliders)
                {
                    Vector2 l   = collider.Center - origin;  //lunghezza da origine ray a centro coll
                    float   tca = Vector2.Dot(l, direction); //prodotto scalare tra lunghezza e direzione (deve essere positiva)
                    if (tca < 0)
                    {
                        continue;
                    }
                    float d = (float)Math.Sqrt(l.Length * l.Length - tca * tca);
                    if (d > collider.Radius)
                    {
                        continue;
                    }
                    float   thc      = (float)Math.Sqrt(collider.Radius * collider.Radius - d * d);
                    float   p        = tca - thc;
                    float   p1       = tca + thc;
                    Vector2 pCoords  = origin + direction * p;
                    Vector2 p1Coords = origin + direction * p1;

                    return(result = new RaycastResults(pCoords, p1Coords, collider, null, true));
                }
            }
            else if (type == Collision.CollisionType.RectsIntersection)
            {
                foreach (Rect collider in rectColliders)
                {
                    float tmin = float.MinValue;
                    float tmax = float.MaxValue;

                    float tx1 = (collider.Min.X - origin.X) * (1 / direction.X);
                    float tx2 = (collider.Max.X - origin.X) * (1 / direction.X);

                    tmin = Math.Max(tmin, Math.Min(tx1, tx2));
                    tmax = Math.Min(tmax, Math.Max(tx1, tx2));

                    float ty1 = (collider.Min.Y - origin.Y) * (1 / direction.Y);
                    float ty2 = (collider.Max.Y - origin.Y) * (1 / direction.Y);

                    tmin = Math.Max(tmin, Math.Min(ty1, ty2));
                    tmax = Math.Min(tmax, Math.Max(ty1, ty2));

                    Vector2 pCoords  = origin + direction * tmin;
                    Vector2 p1Coords = origin + direction * tmax;

                    if (tmax >= tmin)
                    {
                        return(result = new RaycastResults(pCoords, p1Coords, null, collider, true));
                    }
                }
            }

            return(null);
        }
Esempio n. 8
0
        public static int Update(IPlayer mario, IBlock block, Collision.CollisionType collisionType)
        {
            if (block is FlagpoleClass && collisionType != Collision.CollisionType.None)
            {
                block.Used();
            }
            switch (collisionType)
            {
            case Collision.CollisionType.Above:
                if (block is PenetrablePipeClass)
                {
                    if (mario.State is SMLeftCrouchState || mario.State is SMRightCrouchState || mario.State is BMLeftCrouchState || mario.State is BMRightCrouchState || mario.State is FMLeftCrouchState || mario.State is FMRightCrouchState)
                    {
                        block.Used();
                    }
                }
                return((int)Enum.DisableMovementType.Down);

            case Collision.CollisionType.Below:
                if (block is BrickClass)
                {
                    if (mario.State is SMLeftJumpState || mario.State is SMRightJumpState)
                    {
                        block.Shake();
                    }
                    else
                    {
                        block.Used();
                    }
                }
                else
                {
                    block.Used();
                }

                return((int)Enum.DisableMovementType.Up);

            case Collision.CollisionType.Left:
                if (block is UndergroundPipeClass)
                {
                    block.Used();
                }
                return((int)Enum.DisableMovementType.Right);

            case Collision.CollisionType.Right:
                return((int)Enum.DisableMovementType.Left);

            default:
                return((int)Enum.DisableMovementType.None);
            }
        }
Esempio n. 9
0
    public void ShootAroundEnemy(Collision.CollisionType type)
    {
        //Fire multiple shots!
        float degrees = 360 / projectileNum;

        for (int i = 0; i < projectileNum; i++)
        {
            Vector3 dir = Quaternion.AngleAxis(transform.rotation.eulerAngles.y, Vector3.up) * (transform.position + Vector3.forward);
            Vector3 f   = dir - transform.position;
            dir = Quaternion.AngleAxis(degrees * i, Vector3.up) * f;
            ShootTarget(dir + transform.position, type);
        }
        //ShootTarget(transform.position + Vector3.forward);
    }
        public void GetCollisionTestBottomAbove()
        {
            TestObject nonMario = new TestObject(100, 50, 20, 20);
            TestObject mario    = new TestObject(90, 100, 50, 50);

            for (int y = 31; y <= 49; y++)
            {
                mario.rectangle = new Rectangle(90, 100 - y, 50, 50);
                Collision.CollisionType colli = Collision.GetCollision(mario, nonMario);
                if (colli != Collision.CollisionType.Below)
                {
                    Assert.Fail();
                }
            }
        }
        public void GetCollisionTestLeft()
        {
            TestObject mario    = new TestObject(50, 100, 20, 20);
            TestObject nonMario = new TestObject(100, 90, 50, 50);

            for (int y = 31; y <= 49; y++)
            {
                mario.rectangle = new Rectangle(50 + y, 100, 20, 20);
                Collision.CollisionType colli = Collision.GetCollision(mario, nonMario);
                if (colli != Collision.CollisionType.Left)
                {
                    Assert.Fail();
                }
            }
        }
        public void GetCollisionTestRightNone()
        {
            TestObject mario    = new TestObject(100, 90, 50, 50);
            TestObject nonMario = new TestObject(50, 100, 20, 20);

            for (int y = 0; y <= 30; y++)
            {
                mario.rectangle = new Rectangle(100 - y, 90, 50, 50);
                Collision.CollisionType colli = Collision.GetCollision(mario, nonMario);
                if (colli != Collision.CollisionType.None)
                {
                    Assert.Fail();
                }
            }
        }
Esempio n. 13
0
    protected virtual void ShootTarget(Vector3 target, Collision.CollisionType type)
    {
        //Get a projectile and place it at the enemy's position
        Projectile p = ProjectileManager.instance.RequestProjectile();

        p.transform.position = ship.position + new Vector3(0, 1, 0);

        //Calculate direction to send the projectile in
        Vector3 playerPos = target;
        Vector3 dir       = (playerPos - transform.position).normalized;

        dir = AccuracyRandomizer(dir, inaccuracy);

        p.StartProjectile(type, dir, projectileSpeed, 1, this.gameObject);
    }
 public bool Casting(Collision.CollisionType type)
 {
     if (type == Collision.CollisionType.CircleIntersection)
     {
         Confirm = Physics.Raycast_C(Origin, Direction);
     }
     else if (type == Collision.CollisionType.RectsIntersection)
     {
         Confirm = Physics.Raycast_R(Origin, Direction);
     }
     else
     {
         Confirm = false;
     }
     return(Confirm);
 }
Esempio n. 15
0
        public override void Collide(List <AbsObject> collidedObjects)
        {
            bool[] directionsBlocked = new bool[] { false, false, false, false };
            Dictionary <AbsObject, Collision.CollisionType> cornerCollidedObjects = new Dictionary <AbsObject, Collision.CollisionType>();

            foreach (AbsObject obj in collidedObjects)
            {
                Collision.CollisionType type = Collision.GetCollisionType(this, obj);
                if (type == Collision.CollisionType.TSide)
                {
                    TopCollide(this, obj, directionsBlocked);
                }
                else if (type == Collision.CollisionType.RSide || type == Collision.CollisionType.LSide)
                {
                    SideCollide(this, obj, directionsBlocked);
                }
                else if (type == Collision.CollisionType.BSide)
                {
                    BottomCollide(this, obj, directionsBlocked);
                }
                else
                {
                    cornerCollidedObjects.Add(obj, type);
                }
            }
            foreach (AbsObject obj in cornerCollidedObjects.Keys)
            {
                if (cornerCollidedObjects[obj] == Collision.CollisionType.TRCorner && !directionsBlocked[0] && !directionsBlocked[1])
                {
                    SideCollide(this, obj, directionsBlocked);
                }
                else if (cornerCollidedObjects[obj] == Collision.CollisionType.TLCorner && !directionsBlocked[0] && !directionsBlocked[3])
                {
                    SideCollide(this, obj, directionsBlocked);
                }
                else if (cornerCollidedObjects[obj] == Collision.CollisionType.BRCorner && !directionsBlocked[2] && !directionsBlocked[1])
                {
                    BottomCollide(this, obj, directionsBlocked);
                }
                else if (cornerCollidedObjects[obj] == Collision.CollisionType.BLCorner && !directionsBlocked[2] && !directionsBlocked[3])
                {
                    BottomCollide(this, obj, directionsBlocked);
                }
            }
        }
Esempio n. 16
0
    public void StartProjectile(Collision.CollisionType color, Vector3 dir, float sp, int dmg, GameObject o = null)
    {
        //Set the owner of this bullet, so that the shooter can't hurt themselves with their own bullet
        if (o != null)
        {
            shooter = o;
        }

        //Just deactivate all trails here to make things easy
        blueTrail.gameObject.SetActive(false);
        redTrail.gameObject.SetActive(false);
        purpleTrail.gameObject.SetActive(false);

        //Reset the reflected state
        reflected = false;

        //Set trajectory, damage, and speed
        damage    = dmg;
        direction = dir;
        speed     = sp;

        Color actualColor = Color.white;

        if (color == Collision.CollisionType.BLUE)
        {
            actualColor = blue;
            blueTrail.gameObject.SetActive(true);
        }
        else if (color == Collision.CollisionType.RED)
        {
            actualColor = red;
            redTrail.gameObject.SetActive(true);
        }
        else if (color == Collision.CollisionType.PURPLE)
        {
            actualColor = purple;
            purpleTrail.gameObject.SetActive(true);
        }

        collision.SetColor(color, actualColor);

        //Start the projectile duration
        StartCoroutine(ProjectileDuration());
    }
        public static int Update(IEnemy enemy, IBlock block, Collision.CollisionType collisionType)
        {
            switch (collisionType)
            {
            case Collision.CollisionType.Above:
                return((int)Enum.DisableMovementType.Down);

            case Collision.CollisionType.Below:
                return((int)Enum.DisableMovementType.Up);

            case Collision.CollisionType.Left:
                return((int)Enum.DisableMovementType.Right);

            case Collision.CollisionType.Right:
                return((int)Enum.DisableMovementType.Left);

            default:
                return((int)Enum.DisableMovementType.None);
            }
        }
Esempio n. 18
0
    public void SetColor(Collision.CollisionType c, Color actualColor)
    {
        color = c;
        GetComponentInChildren <MeshRenderer>().material.color = actualColor;

        //The only time this is called is when bullets are being re-assigned
        //So lets also set glow as well here
        if (color == CollisionType.RED)
        {
            GetComponentInChildren <MeshRenderer>().material = redMaterial;
        }
        else if (color == CollisionType.BLUE)
        {
            GetComponentInChildren <MeshRenderer>().material = blueMaterial;
        }
        else //Purple
        {
            GetComponentInChildren <MeshRenderer>().material = purpleMaterial;
        }
    }
        public static void Update(ILevel level)
        {
            int getCond;

            level.BossPr.ChangeMovement(0);
            foreach (IBlock block in level.BlockList)
            {
                colli   = Collision.GetCollision(level.BossPr, block);
                getCond = BossPrincessBlockCollisionHandler.Update(level.BossPr, block, colli);
                colliList.Add(getCond);
            }

            foreach (int i in colliList)
            {
                if (i != 0)
                {
                    level.BossPr.ChangeMovement(i);
                }
            }
            colliList.Clear();
        }
        public static void Update(IPlayer mario, IItem item, Collision.CollisionType collisionType)
        {
            switch (collisionType)
            {
            case Collision.CollisionType.Above:
                item.Used();
                break;

            case Collision.CollisionType.Below:
                item.Used();
                break;

            case Collision.CollisionType.Left:
                item.Used();
                break;

            case Collision.CollisionType.Right:
                item.Used();
                break;
            }
        }
Esempio n. 21
0
        public override void Collide(List <AbsObject> collidedObjects)
        {
            Dictionary <AbsObject, Collision.CollisionType> cornerCollidedObjects = new Dictionary <AbsObject, Collision.CollisionType>();

            foreach (AbsObject obj in collidedObjects)
            {
                Collision.CollisionType type = Collision.GetCollisionType(this, obj);
                if (type == Collision.CollisionType.TSide || type == Collision.CollisionType.TRCorner || type == Collision.CollisionType.TLCorner)
                {
                    TopCollide(obj);
                    //} else if(type == Collision.CollisionType.RSide || type == Collision.CollisionType.LSide)
                    //{
                    //    SideCollide(obj);
                    //}
                }
                else
                {
                    _objectsToNotCollide.Add(obj);
                }
            }
        }
        public static void Update(IProjectile fireball, IBlock block, Collision.CollisionType collisionType)
        {
            switch (collisionType)
            {
            case Collision.CollisionType.Above:
                fireball.TouchDown();
                return;

            case Collision.CollisionType.Below:
                fireball.Boom();
                return;

            case Collision.CollisionType.Left:
                fireball.Boom();
                return;

            case Collision.CollisionType.Right:
                fireball.Boom();
                return;

            default:
                return;
            }
        }
Esempio n. 23
0
        public static void Update(ILevel level)
        {
            int getCond;

            foreach (IItem item in level.ItemList)
            {
                item.ChangeMovement(0);
                foreach (IBlock block in level.BlockList)
                {
                    colli   = Collision.GetCollision(item, block);
                    getCond = IBlockCollisionHandler.Update(item, block, colli);
                    colliList.Add(getCond);
                }

                foreach (int i in colliList)
                {
                    if (i != 0)
                    {
                        item.ChangeMovement(i);
                    }
                }
                colliList.Clear();
            }
        }
Esempio n. 24
0
        public override void Collide(List <AbsObject> collidedObjects)
        {
            bool[] directionsBlocked = new bool[] { false, false, false, false };
            Dictionary <AbsObject, Collision.CollisionType> cornerCollidedObjects = new Dictionary <AbsObject, Collision.CollisionType>();

            foreach (AbsObject obj in collidedObjects)
            {
                if (obj is ItemObject)
                {
                    if (((ItemObject)obj).State == "speed")
                    {
                        this.powerState.ToFast();
                        this.audio.PlaySound("potion");
                    }
                    else if (((ItemObject)obj).State == "jump")
                    {
                        this.powerState.ToDouble();
                        this.audio.PlaySound("potion");
                    }
                    else if (((ItemObject)obj).State == "propeller")
                    {
                        this.moveState = new DoodleFlyingState(this);
                        this.audio.PlaySound("copter");
                    }
                }
                Collision.CollisionType type = Collision.GetCollisionType(this, obj);
                if (type == Collision.CollisionType.TSide)
                {
                    TopCollide(this, obj, directionsBlocked);
                }
                else if (type == Collision.CollisionType.RSide || type == Collision.CollisionType.LSide)
                {
                    SideCollide(this, obj, directionsBlocked);
                }
                else if (type == Collision.CollisionType.BSide)
                {
                    BottomCollide(this, obj, directionsBlocked);
                }
                else
                {
                    cornerCollidedObjects.Add(obj, type);
                }
            }
            foreach (AbsObject obj in cornerCollidedObjects.Keys)
            {
                if (cornerCollidedObjects[obj] == Collision.CollisionType.TRCorner && !directionsBlocked[0] && !directionsBlocked[1])
                {
                    SideCollide(this, obj, directionsBlocked);
                }
                else if (cornerCollidedObjects[obj] == Collision.CollisionType.TLCorner && !directionsBlocked[0] && !directionsBlocked[3])
                {
                    SideCollide(this, obj, directionsBlocked);
                }
                else if (cornerCollidedObjects[obj] == Collision.CollisionType.BRCorner && !directionsBlocked[2] && !directionsBlocked[1])
                {
                    BottomCollide(this, obj, directionsBlocked);
                }
                else if (cornerCollidedObjects[obj] == Collision.CollisionType.BLCorner && !directionsBlocked[2] && !directionsBlocked[3])
                {
                    BottomCollide(this, obj, directionsBlocked);
                }
            }
        }
Esempio n. 25
0
        public static void Update(ILevel level)
        {
            level.Mygame.Mario.DisableMovement(0);
            int getCond;

            foreach (IEnemy enemy in level.EnemyList)
            {
                colli = Collision.GetCollision(level.Mygame.Mario, enemy);

                getCond = MEnemyCollisionHandler.Update(level.Mygame.Mario, enemy, colli);
                colliList.Add(getCond);
            }
            foreach (IFire fire in level.FireList)
            {
                colli = Collision.GetCollision(level.Mygame.Mario, fire);

                getCond = MFireCollisionHandler.Update(level.Mygame.Mario, fire, colli);
                colliList.Add(getCond);
            }

            foreach (IItem item in level.ItemList)
            {
                colli = Collision.GetCollision(level.Mygame.Mario, item);
                if (colli != Collision.CollisionType.None)
                {
                    MItemCollisionHandler.Update(level.Mygame.Mario, item, colli);
                }
            }



            foreach (IBlock block in level.BlockList)
            {
                colli = Collision.GetCollision(level.Mygame.Mario, block);
                if (colli == Collision.CollisionType.Below)
                {
                    if (blockEnable)
                    {
                        getCond = MBlockCollisionHandler.Update(level.Mygame.Mario, block, colli);
                        colliList.Add(getCond);
                        blockEnable = false;
                    }
                }
                else
                {
                    getCond = MBlockCollisionHandler.Update(level.Mygame.Mario, block, colli);
                    colliList.Add(getCond);
                }
            }

            foreach (int i in colliList)
            {
                if (i != 0)
                {
                    level.Mygame.Mario.DisableMovement(i);
                }
            }
            colliList.Clear();

            blockEnable = true;
        }