public void OnAction(Entity entity)
        {
            if ((entity.Mask & MASK) == MASK || (entity.Mask & MASKT) == MASKT)
            {
                List <IComponent> components = entity.Components;

                IComponent PositionComponent = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_POSITION);
                });
                Vector3 objPos = ((ComponentPosition)PositionComponent).Position;

                IComponent geometryComponent = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_GEOMETRY);
                });
                Geometry geom = ((ComponentGeometry)geometryComponent).Geometry();

                if (entity.Name == "Pac-man")
                {
                    playerpos = PositionComponent;
                    IComponent VelocityComponent = components.Find(delegate(IComponent component)
                    {
                        return(component.ComponentType == ComponentTypes.COMPONENT_VELOCITY);
                    });
                    vel = ((ComponentVelocity)VelocityComponent).Velocity;

                    hit = false;
                    i   = -1;
                    return;
                }

                else
                {
                    IComponent CollisionComponent = components.Find(delegate(IComponent component)
                    {
                        return(component.ComponentType == ComponentTypes.COMPONENT_COLLISION);
                    });
                    string         collisoionType = ((ComponentCollision)CollisionComponent).CollisionType;
                    WallCollisions wallColl       = ((ComponentCollision)CollisionComponent).collisions();

                    if (collisoionType == "food" || collisoionType == "power")
                    {
                        IComponent audio = components.Find(delegate(IComponent component)
                        {
                            return(component.ComponentType == ComponentTypes.COMPONENT_AUDIO);
                        });
                        food((ComponentPosition)playerpos, objPos, entity, wallColl, (ComponentAudio)audio, collisoionType);
                    }
                    else if (collisoionType == "WallH" || collisoionType == "WallV" || collisoionType == "WallVT")
                    {
                        Motion((ComponentPosition)playerpos, vel, geom, objPos, collisoionType, wallColl);
                    }
                }
            }
        }
        public void food(ComponentPosition pos, Vector3 foodPos, Entity ent, WallCollisions end, ComponentAudio audio, string foodType)
        {
            Vector3 pacPos = pos.Position;

            if (timer >= 0)
            {
                if (timer > 0)
                {
                    timer += GameScene.dt;
                }
                if (timer >= 1000 && power.Name == ent.Name)
                {
                    timer = 0;
                    audio.Stop();
                    EntityManager.Remove(ent);
                }
            }
            if (end.overCollsion(pacPos, foodPos))
            {
                if (foodType == "power")
                {
                    if (power != ent && timer > 10)
                    {
                        return;
                    }
                    timer  = 0;
                    timer += GameScene.dt;
                    power  = ent;
                }
                audio.Start();
                if (foodType != "power")
                {
                    EntityManager.Remove(ent);
                    foodCount++;

                    if (end.getFood() + 1 == foodCount)
                    {
                        GameScene.endGame = true;
                    }
                }
            }
        }
Exemple #3
0
        public static WallCollisions load(string type)
        {
            WallCollisions collisions = new WallCollisions();

            switch (type)
            {
            case "food":
                collisions.addtoFood();
                break;

            case "wall":
                collisions.addtoWall();
                break;

            case "Power":
                collisions.addPower();
                break;
            }
            return(collisions);
        }
        public void PlayerHit(ComponentPosition ghostpos, ComponentPosition pacPos, WallCollisions wallCol)
        {
            Vector3 pac    = pacPos.Position;
            Vector3 newpos = ghostpos.Position;
            double  X      = Math.Round(pac.X);
            double  Z      = Math.Round(pac.Z);

            pac.X    = (float)X;
            pac.Z    = (float)Z;
            X        = Math.Round(newpos.X);
            Z        = Math.Round(newpos.Z);
            newpos.X = (float)X;
            newpos.Z = (float)Z;

            if (newpos == pac)
            {
                ((ComponentAudio)audio).Start();
                GameScene.Lives--;
                pacPos.Position   = GameScene.origin;
                ghostpos.Position = GameScene.GhostOrigin;
            }
        }
        private void Motion(ComponentPosition positions, Vector3 velocity, Geometry geom, Vector3 objPos, string collisionType, WallCollisions wallCol)
        {
            Vector3 newpos = positions.Position;
            Vector3 newvel = velocity * 15;

            newpos += newvel * GameScene.dt;
            checkCollsion(newpos, geom, objPos, collisionType, ref velocity, wallCol);


            if (hit != true && wallCol.getlength() == i)
            {
                positions.Position += (velocity * GameScene.dt);
            }
            else if (wallCol.getlength() == i)
            {
                velocity           *= -1;
                positions.Position += (velocity * GameScene.dt);
                hit = false;
            }
        }
 public void checkCollsion(Vector3 newPos, Geometry geometry, Vector3 objPos, string collisionType, ref Vector3 velocity, WallCollisions wallColl)
 {
     if (wallColl.CheckCollision(newPos, geometry.bBoxMin, geometry.bBoxMax, objPos, collisionType, ref velocity, hit))
     {
         hit = true;
     }
     i++;
     return;
 }
Exemple #7
0
 public ComponentCollision(string Typecollision, string type)
 {
     this.collision = CollisionManager.load(Typecollision);
     typecol        = type;
 }
        private void Motion2(ComponentPosition positions, Vector3 velocity, Geometry geom, Vector3 objPos, string collisionType, WallCollisions wallCol)
        {
            Vector3 player = ((ComponentPosition)playerpos).Position;
            Vector3 newpos = positions.Position;

            /*Vector3 pos = Vector3.Normalize(newpos);
             *
             * float dot = Vector3.Dot(pos, player);
             *
             * if (dot >= player.X)
             * {
             *  velocity.X = dot;
             *  newpos += velocity * GameScene.dt;
             *  checkCollsion(newpos, geom, objPos, collisionType, ref velocity, wallCol);
             * }
             * if (dot >= player.Z)
             * {
             *  velocity.Z = -10;
             *  newpos += velocity * GameScene.dt;
             *  checkCollsion(newpos, geom, objPos, collisionType, ref velocity, wallCol);
             *
             * }*/

            Vector3 playerposv = ((ComponentPosition)playerpos).Position;

            Vector3 newvel;

            if (playerposv.X > newpos.X)
            {
                velocity.X = 8;
            }

            if (playerposv.X < newpos.X)
            {
                velocity.X = -8;
            }

            if (playerposv.Z < newpos.Z)
            {
                velocity.Z = -8;
            }
            if (playerposv.Z > newpos.Z)
            {
                velocity.Z = 8;
            }

            newvel  = velocity * 15;
            newpos += newvel * GameScene.dt;

            checkCollsion(newpos, geom, objPos, collisionType, ref velocity, wallCol);
            PlayerHit((ComponentPosition)Ghostpos, (ComponentPosition)playerpos, wallCol);

            if (hit != true && wallCol.getlength() == i)
            {
                positions.Position += (velocity * GameScene.dt);
            }
            else if (wallCol.getlength() == i)
            {
                velocity           *= -10;
                positions.Position += (velocity * GameScene.dt);
            }
        }
        public void OnAction(Entity entity)
        {
            if ((entity.Mask & MASKT) == MASKT)
            {
                List <IComponent> components = entity.Components;

                playerpos = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_POSITION);
                });

                hit = false;
                i   = 0;
            }
            else if ((entity.Mask & MASKG) == MASKG)
            {
                List <IComponent> components = entity.Components;

                Ghostpos = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_POSITION);
                });

                IComponent VelocityComponent = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_VELOCITY);
                });
                velG = ((ComponentVelocity)VelocityComponent).Velocity;

                audio = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_AUDIO);
                });
            }
            else if ((entity.Mask & MASK) == MASK)
            {
                List <IComponent> components = entity.Components;

                IComponent PositionComponent = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_POSITION);
                });
                Vector3 objPos = ((ComponentPosition)PositionComponent).Position;

                IComponent geometryComponent = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_GEOMETRY);
                });
                Geometry geom = ((ComponentGeometry)geometryComponent).Geometry();

                IComponent CollisionComponent = components.Find(delegate(IComponent component)
                {
                    return(component.ComponentType == ComponentTypes.COMPONENT_COLLISION);
                });
                string         collisoionType = ((ComponentCollision)CollisionComponent).CollisionType;
                WallCollisions wallColl       = ((ComponentCollision)CollisionComponent).collisions();

                if (collisoionType == "WallH" || collisoionType == "WallV" || collisoionType == "WallVT")
                {
                    Motion2((ComponentPosition)Ghostpos, velG, geom, objPos, collisoionType, wallColl);
                }
            }
        }