public bool CircleCollision(Entity entity, List <Entity> collideEntities) { if (PhysicsOn) { CircleCollisionComponent eCircle = ComponentManager.Instance.GetEntityComponent <CircleCollisionComponent>(entity); Position2DComponent ePos = ComponentManager.Instance.GetEntityComponent <Position2DComponent>(entity); foreach (Entity e in collideEntities) { CircleCollisionComponent eTarget = ComponentManager.Instance.GetEntityComponent <CircleCollisionComponent>(e); Position2DComponent eTargetPos = ComponentManager.Instance.GetEntityComponent <Position2DComponent>(e); if (eTarget != null && eTargetPos != null) { double distSquare = Math.Pow(ePos.Position.X - eTargetPos.Position.X, 2) + Math.Pow(ePos.Position.Y - eTargetPos.Position.Y, 2); double totalCollisionRadius = Math.Pow(eCircle.Radius + eTarget.Radius, 2); if (distSquare - totalCollisionRadius < 0 && eCircle != eTarget) { return(true); } } } } return(false); }
private void AddMenuAndOptions(ECSEngine engine) { Entity winScreen = EntityFactory.Instance.NewEntityWithTag("LooseScreenImage"); Render2DComponent Comp = new Render2DComponent(engine.LoadContent <Texture2D>("youloose")); Position2DComponent Pos = new Position2DComponent(new Vector2(400, 210)); ComponentManager.Instance.AddComponentToEntity(winScreen, Comp); ComponentManager.Instance.AddComponentToEntity(winScreen, Pos); SceneManager.Instance.AddEntityToSceneOnLayer("LooseScreen", 0, winScreen); }
private void UpdatePos(CollisionComponent c) { ComponentManager cm = ComponentManager.Instance; Entity e = cm.GetEntityOfComponent <CollisionComponent>(c); Position2DComponent p = cm.GetEntityComponent <Position2DComponent>(e); if (p != null) { c.CollisionArea.SetX(p.Position.X); c.CollisionArea.SetY(p.Position.Y); } }
/// <summary> /// Render a string to the screen /// </summary> /// <param name="spriteBatch"></param> /// <param name="gameTime"></param> public void Render(SpriteBatch spriteBatch, GameTime gameTime) { List <Entity> entities = SceneManager.Instance.GetActiveScene().GetAllEntities(); foreach (Entity e in entities) { if (e.Visible) { TextRenderComponent t = ComponentManager.Instance.GetEntityComponent <TextRenderComponent>(e); Position2DComponent p = ComponentManager.Instance.GetEntityComponent <Position2DComponent>(e); if (p != null && t != null) { spriteBatch.DrawString(t.Font, t.Text, p.Position, t.TextColor); } } } }
/// <summary> /// Renders a sprite on the screen /// </summary> /// <param name="spriteBatch"></param> /// <param name="gameTime"></param> public void Render(SpriteBatch spriteBatch, GameTime gameTime) { try { List <List <Entity> > sceneEntities = SceneManager.Instance.GetActiveScene().GetAllLayers(); for (int i = 0; i < sceneEntities.Count; ++i) { foreach (Entity entity in sceneEntities[i]) { if (entity.Visible) { Render2DComponent r = ComponentManager.Instance.GetEntityComponent <Render2DComponent>(entity); if (r != null) { Position2DComponent p = ComponentManager.Instance.GetEntityComponent <Position2DComponent>(entity); AnimationComponent a = ComponentManager.Instance.GetEntityComponent <AnimationComponent>(entity); if (p != null) { if (a != null) { if (a.visible) { r.DestRect = new Rectangle((int)p.Position.X, (int)p.Position.Y, a.SourceRect.Width, a.SourceRect.Height); spriteBatch.Draw(r.Texture, r.DestRect, a.SourceRect, Color.White); } } else { r.DestRect = new Rectangle((int)p.Position.X, (int)p.Position.Y, r.Width, r.Height); r.SourceRect = new Rectangle(0, 0, r.Width, r.Height); spriteBatch.Draw(r.Texture, r.DestRect, r.SourceRect, Color.White); } } } } } } } catch (Exception ex) { } }
private void AddMenuAndOptions(ECSEngine engine) { Entity MenuBackground = EntityFactory.Instance.NewEntityWithTag("MainMenuBackground"); Entity SinglePlayer = EntityFactory.Instance.NewEntityWithTag("MM_SinglePlayerOption"); Entity Multiplayer = EntityFactory.Instance.NewEntityWithTag("MM_MultiPlayerOption"); Entity Exit = EntityFactory.Instance.NewEntityWithTag("MM_ExitOption"); Render2DComponent MenuBgComp = new Render2DComponent(engine.LoadContent <Texture2D>("Menu/MainMenu")); Position2DComponent MenuBgPos = new Position2DComponent(new Vector2(0, 0)); ComponentManager.Instance.AddComponentToEntity(MenuBackground, MenuBgComp); ComponentManager.Instance.AddComponentToEntity(MenuBackground, MenuBgPos); SceneManager.Instance.AddEntityToSceneOnLayer("MainMenu", 0, MenuBackground); Render2DComponent SinglePlayerOption = new Render2DComponent(engine.LoadContent <Texture2D>("Menu/SinglePlayerSelected")); Position2DComponent SinglePlayerOptionPos = new Position2DComponent(new Vector2(351, 278)); ComponentManager.Instance.AddComponentToEntity(SinglePlayer, SinglePlayerOption); ComponentManager.Instance.AddComponentToEntity(SinglePlayer, SinglePlayerOptionPos); SceneManager.Instance.AddEntityToSceneOnLayer("MainMenu", 1, SinglePlayer); SinglePlayer.Visible = true; Render2DComponent MultiPlayerOption = new Render2DComponent(engine.LoadContent <Texture2D>("Menu/MultiPlayerSelected")); Position2DComponent MultiPlayerOptionPos = new Position2DComponent(new Vector2(371, 395)); ComponentManager.Instance.AddComponentToEntity(Multiplayer, MultiPlayerOption); ComponentManager.Instance.AddComponentToEntity(Multiplayer, MultiPlayerOptionPos); SceneManager.Instance.AddEntityToSceneOnLayer("MainMenu", 1, Multiplayer); Multiplayer.Visible = false; Render2DComponent ExitOption = new Render2DComponent(engine.LoadContent <Texture2D>("Menu/ExitSelected")); Position2DComponent ExitOptionPos = new Position2DComponent(new Vector2(506, 515)); ComponentManager.Instance.AddComponentToEntity(Exit, ExitOption); ComponentManager.Instance.AddComponentToEntity(Exit, ExitOptionPos); SceneManager.Instance.AddEntityToSceneOnLayer("MainMenu", 1, Exit); Exit.Visible = false; }
private void AddMenuAndOptions(ECSEngine engine) { Entity Background = EntityFactory.Instance.NewEntity(); Entity Join = EntityFactory.Instance.NewEntityWithTag("MP_Join"); Entity Host = EntityFactory.Instance.NewEntityWithTag("MP_Host"); Entity Back = EntityFactory.Instance.NewEntityWithTag("MP_Back"); Render2DComponent MenuBgComp = new Render2DComponent(engine.LoadContent <Texture2D>("Menu/MultiPlayerMenu")); Position2DComponent MenuBgPos = new Position2DComponent(new Vector2(0, 0)); ComponentManager.Instance.AddComponentToEntity(Background, MenuBgComp); ComponentManager.Instance.AddComponentToEntity(Background, MenuBgPos); SceneManager.Instance.AddEntityToSceneOnLayer("MultiPlayerMenu", 0, Background); Render2DComponent joinPlayerOption = new Render2DComponent(engine.LoadContent <Texture2D>("Menu/MPJoinGame")); Position2DComponent joinPlayerOptionPos = new Position2DComponent(new Vector2(381, 221)); ComponentManager.Instance.AddComponentToEntity(Join, joinPlayerOption); ComponentManager.Instance.AddComponentToEntity(Join, joinPlayerOptionPos); SceneManager.Instance.AddEntityToSceneOnLayer("MultiPlayerMenu", 1, Join); Join.Visible = true; Render2DComponent hostOption = new Render2DComponent(engine.LoadContent <Texture2D>("Menu/MPHostGame")); Position2DComponent hostOptionPos = new Position2DComponent(new Vector2(367, 376)); ComponentManager.Instance.AddComponentToEntity(Host, hostOption); ComponentManager.Instance.AddComponentToEntity(Host, hostOptionPos); SceneManager.Instance.AddEntityToSceneOnLayer("MultiPlayerMenu", 1, Host); Host.Visible = false; Render2DComponent backOption = new Render2DComponent(engine.LoadContent <Texture2D>("Menu/back")); Position2DComponent backOptionPos = new Position2DComponent(new Vector2(494, 527)); ComponentManager.Instance.AddComponentToEntity(Back, backOption); ComponentManager.Instance.AddComponentToEntity(Back, backOptionPos); SceneManager.Instance.AddEntityToSceneOnLayer("MultiPlayerMenu", 1, Back); Back.Visible = false; }
/// <summary> /// Updates a child position relative to its parent /// </summary> /// <param name="gameTime"></param> public void Update(GameTime gameTime) { List <Entity> entities = ComponentManager.Instance.GetAllEntitiesWithComponentType <ParentComponent>(); if (entities == null) { return; } foreach (Entity e in entities) { if (e.Updateable) { ParentComponent parent = ComponentManager.Instance.GetEntityComponent <ParentComponent>(e); Position2DComponent parentPos = ComponentManager.Instance.GetEntityComponent <Position2DComponent>(parent.Parent); Position2DComponent myPos = ComponentManager.Instance.GetEntityComponent <Position2DComponent>(e); if (parentPos != null && myPos != null) { myPos.Position = new Vector2(parent.OffsetX, parent.OffsetY) + parentPos.Position; } } } }
/// <summary> /// Updates an entity's position /// </summary> /// <param name="gameTime"></param> public void Update(GameTime gameTime) { try { List <List <Entity> > sceneEntities = SceneManager.Instance.GetActiveScene().GetAllLayers(); for (int i = 0; i < sceneEntities.Count; ++i) { foreach (Entity e in sceneEntities[i]) { if (e.Updateable) { Velocity2DComponent v = ComponentManager.Instance.GetEntityComponent <Velocity2DComponent>(e); Position2DComponent p = ComponentManager.Instance.GetEntityComponent <Position2DComponent>(e); //TODO : Readd Collision Maybe ? //RectangleCollisionComponent r = ComponentManager.Instance.GetEntityComponent<RectangleCollisionComponent>(e); /*if (r != null) * { * int w = r.CollisionRect.Width; * int h = r.CollisionRect.Height; * r.CollisionRect = new Rectangle((int)p.Position.X, (int)p.Position.Y, w, h); * }*/ if (p != null && v != null) { p.Position += v.Velocity * v.Speed * (float)gameTime.ElapsedGameTime.TotalSeconds; } } } } } catch (Exception ex) { } }