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; } } } }
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; }
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); } } }