Ejemplo n.º 1
0
        /// <summary>
        /// Cette fonction s'occupe juste de voir si à une position, pour un objet, il y a une potentielle collision (un objet ou les limites du terrain)
        /// si c'est un objet, il retourne sa composante physique (et si y'a pas de composante physique il retourne null ( un objet sans compôsante physique est comme un fantome))
        /// si c'est une limite du terrain, il crée un objet temporaire qui se comporte comme un mur
        /// </summary>
        /// <param name="p">L'objet qui veut vérifier si y'a pas de collision</param>
        /// <param name="destination">L'endroit ou il veut aller</param>
        /// <returns></returns>
        public virtual BasePhysics collisionCheck(BasePhysics p, Vect2D destination)
        {
            //On regarde si on est bien dans les boundaries du niveau
            if (destination.x < 0)
            {
                return(new BasePhysics(-1, destination.y, p.pos.layer));
            }
            else if (destination.x > this.worldLength)
            {
                return(new BasePhysics(this.worldLength, destination.y, p.pos.layer));
            }
            if (destination.y < 0)
            {
                return(new BasePhysics(destination.x, -1, p.pos.layer));
            }
            else if (destination.y > this.worldHeight)
            {
                return(new BasePhysics(destination.x, this.worldHeight, p.pos.layer));
            }
            WorldObject collided = getCollidedObject(p, destination);

            if (collided != null)
            {
                return(collided.physics);
            }
            return(null); // pas de collision !
        }
Ejemplo n.º 2
0
        public virtual Vect2D onCollide(BasePhysics obj, Vect2D hisTrajectory) //Représente la réaction de l'objet quand il subit une collision
        {
            Vect2D renvoi = (obj.pos.pos - this.pos.pos).normalize();          //Ici, repousse simplement l'objet à la case d'avant (comportement basique d'un mur)

            return(renvoi);
            //Il serait possible d'être plus fancy, en déplacant les deux objets impliqués par exemple (action, réaction)
            //On peut aussi appliquer une réaction inverse
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Quand il y a une collision, gere la communication entre les deux objets physics
        /// </summary>
        /// <param name="collided"></param>
        /// <param name="movement"></param>
        /// <returns></returns>
        public Vect2D resolveCollision(BasePhysics collided, Vect2D movement)
        {
            //verifie si il peut bouger
            Vect2D opposedMovement = collided.onCollide(this, movement);
            Vect2D newMovement     = movement - opposedMovement;

            return(newMovement);
        }
Ejemplo n.º 4
0
        public Vect2D checkTeleportation(Vect2D movement)
        {
            //Verifie si il peut se tp là. Si il y a quelque chose, la teleportation ne se fait pas
            Vect2D newMovement;

            newMovement = movement;
            BasePhysics collided = this.checkForCollision(this, movement);

            if (!collided.onTpCollide(this, movement)) //Est ce que je peux me téléporter dessus?
            {
                newMovement = new Vect2D(0, 0);
            }
            return(newMovement);
        }
Ejemplo n.º 5
0
        public WorldObject getCollidedObject(BasePhysics p, Vect2D destination)
        {
            Vect2D normalizedDirection = destination.normalize();
            Vect2D currentPosCursor    = p.pos.pos.Copy();

            for (int i = 0; i < Vect2D.getDistance(destination, new Vect2D(0, 0)); i++)
            {
                currentPosCursor += normalizedDirection;
                //Si oui on regarde si là ou on veut aller, il y a déjà un objet (détection de collision très basique)
                WorldObject collidedObject = getObjectAt(currentPosCursor.x, currentPosCursor.y);

                if (collidedObject != null && collidedObject.pos.layer == p.pos.layer)
                {
                    return(collidedObject);
                }
            }
            return(null);
        }
Ejemplo n.º 6
0
 public virtual bool onTpCollide(BasePhysics obj, Vect2D hisTrajectory) // Si un objet veut se téléporter à la position de celui ci
 {
     return(false);
 }