package org.test.rtsgame; import loon.LTexture; import loon.action.sprite.SpriteBatch; import loon.canvas.LColorPool; import loon.event.SysKey; import loon.event.SysTouch; import loon.geom.Vector2f; import loon.utils.timer.GameTime; //菜单显示用类 public abstract class MenuEntity extends GameEntity { private java.util.ArrayList<MenuEntry> menuEntries = new java.util.ArrayList<MenuEntry>(); private int selectedEntry; protected Vector2f titlePosition = new Vector2f(); protected float titleSize = 50f; protected String titleString; protected LTexture titleTexture; public MenuEntity() { super.setTransitionOnTime(0.5f); super.setTransitionOffTime(0.5f); } @Override public void Draw(SpriteBatch batch, GameTime gameTime) { if (this.titleTexture == null) { //无图不显示 } else { batch.draw(this.titleTexture, this.titlePosition, LColorPool.get().getColor(1f, 1f, 1f, super.getTransitionAlpha())); } for (int i = 0; i < this.menuEntries.size(); i++) { MenuEntry entry = this.menuEntries.get(i); boolean isSelected = super.getIsActive() && (i == this.selectedEntry); entry.Draw(isSelected, batch, gameTime); } } @Override public void HandleInput() { if (SysTouch.getOnlyKey().isPressed() && SysKey.isKeyPressed(SysKey.BACK)) { this.OnCancel(); } else { if (SysTouch.isDown() || SysTouch.isDrag()) { for (int i = 0; i < this.menuEntries.size(); i++) { if (this.menuEntries.get(i).getGetMenuEntryHitBounds() .contains(SysTouch.x(), SysTouch.y())) { this.selectedEntry = i; if (SysTouch.isDown() || SysTouch.isDrag()) { this.OnSelectEntry(); break; } } } } } } protected void OnCancel() { super.ExitScreen(); } protected void OnSelectEntry() { this.menuEntries.get(this.selectedEntry).OnSelectEntry(); } @Override public void Update(GameTime gameTime, boolean coveredByOtherScreen) { super.Update(gameTime, coveredByOtherScreen); for (int i = 0; i < this.menuEntries.size(); i++) { boolean isSelected = super.getIsActive() && (i == this.selectedEntry); this.menuEntries.get(i).Update(isSelected, gameTime); } } protected final java.util.List<MenuEntry> getMenuEntries() { return this.menuEntries; } }