public HeldEvent(Vector3 position, float width, float height, Color color, WaveEventDefinition waveEventDefinition, int laneIndex) : base("Held" + waveEventDefinition.type.ToString(), GameObject.CreatePrimitive(PrimitiveType.Quad)) { container.transform.localRotation = Quaternion.Euler(90, 0, 0); body.transform.localScale = new Vector3(width, height, 1); body.transform.localRotation = Quaternion.identity; meshRenderer.material.color = color; label.SetLocalRotation(Quaternion.identity); this.position = position; this.laneIndex = laneIndex; this.waveEventDefinition = waveEventDefinition; }
private void HandleLaneHover() { if (timelineEditor.heldWave == null && stage != null && (conveyor == null || !conveyor.showing) && waveEditor.selectedWaveDefinition != null && waveEditor.waveSets == null && waveEditor.waveEventEditor == null) { Lane hoveredLane = stage.GetHoveredLane(mousePos); stage.SetLaneColor(Color.black); if (hoveredLane != null) { hoveredLane.color = Color.yellow; int laneIndex = stage.IndexOf(hoveredLane); if (Input.GetMouseButtonDown(0) && laneIndex >= 0 && waveEditor.waveEventLayouts.Count > laneIndex && !waveEditor.waveEventLayouts[laneIndex].containsMouse) { int index = stage.IndexOf(hoveredLane); WaveEventDefinition waveEventDefinition = ScriptableObject.CreateInstance <WaveEventDefinition>(); waveEventDefinition.Initialize(0, index, WaveEvent.Type.SpawnEnemy, 0, Helpers.Normalize(mousePos.x, hoveredLane.width, hoveredLane.start.x)); ScriptableObjects.Add(waveEventDefinition, waveEditor.selectedWaveDefinition); waveEditor.HideWaveEventButtons(); waveEditor.ShowWaveEventButtons(); } } if (waveEditor.heldWaveEvent != null) { waveEditor.heldWaveEvent.SetPosition(mousePos); if (Input.GetMouseButtonUp(0)) { if (hoveredLane != null) { waveEditor.heldWaveEvent.waveEventDefinition.SetLane(stage.IndexOf(hoveredLane)); waveEditor.heldWaveEvent.waveEventDefinition.entryPoint = Helpers.Normalize(mousePos.x, hoveredLane.end.x, hoveredLane.start.x); waveEditor.HideWaveEventButtons(); waveEditor.ShowWaveEventButtons(); } waveEditor.heldWaveEvent.Destroy(); waveEditor.heldWaveEvent = null; } } } }
public void ShowWaveEventButtons() { HideWaveEventButtons(); List <List <Button> > waveEventButtons = new List <List <Button> >(); for (int i = 0; _editor.stage.lanes > i; i++) { waveEventButtons.Add(new List <Button>()); Layout layout = new Layout("WaveEvent" + i.ToString() + "Layout", waveEventButtons[i].Count, 1, 0.25f, 0.1f, 1, container, false); layout.SetLocalPosition(_editor.stage.LaneBy(i).start + (Vector3.left * layout.width * 0.5f)); waveEventLayouts.Add(layout); Add(layout); } for (int i = 0; selectedWaveDefinition.waveEvents.Count > i; i++) { int index = i; int laneIndex = selectedWaveDefinition.waveEvents[index].lane; WaveEventDefinition waveEvent = selectedWaveDefinition.waveEvents[index]; Lane lane = _editor.stage.LaneBy(laneIndex); if (waveEventButtons.Count > laneIndex) { float width = 1; float height = 1; Color color = Color.white; string name = index.ToString(); switch ((WaveEvent.Type)waveEvent.type) { case WaveEvent.Type.SpawnEnemy: EnemyDefinition enemyDefinition = Definitions.Enemy((Definitions.Enemies)waveEvent.subType); EnemyLevel enemyLevel = enemyDefinition.levels[waveEvent.level]; width = enemyDefinition.width; height = lane.height - enemyDefinition.laneHeightPadding; name = enemyDefinition.name; color = enemyLevel.color; break; case WaveEvent.Type.SpawnItem: break; } Button button = new Button(name, width, height, container, "WaveEvent" + index.ToString(), fontSize: 20, Enter: (Button butt) => butt.SetColor(Color.green), Stay: (Button butt) => { if (Input.GetMouseButtonUp(0)) { for (int j = 0; waveEventButtons[laneIndex].Count > j; j++) { waveEventButtons[laneIndex][j].Hide(); } butt.Select(); _selectedWaveEvent = waveEvent; ShowWaveEventEditor(butt, index); } if (Input.GetMouseButtonDown(1)) { selectedWaveDefinition.Remove(waveEvent); ShowWaveEventButtons(); } }, Exit: (Button butt) => { if (_editor.timelineEditor.heldWave == null && heldWaveEvent == null && Input.GetMouseButton(0)) { heldWaveEvent = new HeldEvent(butt.rect.position, width, height, color, waveEvent, laneIndex); heldWaveEvent.SetText(name); } butt.SetColor(color); }, Close: (Button butt) => { if (Input.GetMouseButtonDown(0) && butt.selected && _waveTypes == null && _enemyLevels == null && _enemyTypes == null && _itemTypes == null && (waveEventEditor == null || !waveEventEditor.containsMouse)) { HideWaveEventEditor(); butt.Deselect(); for (int j = 0; waveEventButtons[selectedWaveDefinition.waveEvents[index].lane].Count > j; j++) { waveEventButtons[selectedWaveDefinition.waveEvents[index].lane][j].Show(); } } }); button.SetColor(color); waveEventButtons[laneIndex].Add(button); waveEventLayouts[laneIndex].Add(button); button.SetLocalPosition(new Vector3(waveEvent.entryPoint * lane.width, 1, 0)); } } }
public WaveEvent(WaveEventDefinition waveEventDefinition) : this(waveEventDefinition.level, waveEventDefinition.delay, waveEventDefinition.lane, ( Type )waveEventDefinition.type, waveEventDefinition.subType, waveEventDefinition.entryPoint) { }
public SpawnEnemyEvent(EnemyDefinition enemyDefinition, WaveEventDefinition waveEventDefinition) : base(waveEventDefinition) { this.enemyDefinition = enemyDefinition; }