public void GridClicked(Point location) { PlayerCommand_View view = View as PlayerCommand_View; Player p = _PlayerList.FirstOrDefault(x => x.Name.Equals(_SelectedPlayerName)); if (p == null) { MessageBox.Show("플레이어를 선택하세요.", "실패"); return; } if (p.PosX < 0 || p.PosY < 0) { var moveSkill = p.CommonSkills.FirstOrDefault(x => x.Name.Equals("이동")); if (moveSkill == null) { moveSkill = MainFrame.GetSkillByName("이동"); } var gridPoint = view.GridItem.ToGridLocation(location); if (_CommandQueue.FirstOrDefault(x => x.SourcePlayer.Name.Equals(p.Name)) != null) { if (MessageBox.Show($"{p.Name}은 이미 이동 위치를 결정했습니다. 다시 설정하시겠습니까?[{gridPoint.X}:{gridPoint.Y}]", "재설정", MessageBoxButtons.YesNo) == DialogResult.Yes) { Command command = new Command(p, null, gridPoint, moveSkill); _CommandQueue.Remove(_CommandQueue.First(x => x.SourcePlayer.Equals(p))); _CommandQueue.Add(command); view.GridItem.RemovePoint(_SelectedPlayerName); view.GridItem.AddRealPoint(_SelectedPlayerName, gridPoint); } } else { if (MessageBox.Show($"{p.Name}의 위치를 [{gridPoint.X}:{gridPoint.Y}]로 설정하시겠습니까?", "설정", MessageBoxButtons.YesNo) == DialogResult.Yes) { Command command = new Command(p, null, view.GridItem.ToGridLocation(location), moveSkill); _CommandQueue.Add(command); view.GridItem.RemovePoint(_SelectedPlayerName); view.GridItem.AddRealPoint(_SelectedPlayerName, gridPoint); } } } else { var pitem = view.FindPlayerItemByName(p.Name); if (pitem.SelectedSkillName == null) { MessageBox.Show($"{p.Name}의 스킬을 먼저 선택하십시오.", "실패"); return; } ICommands com = null; if ((com = _CommandQueue.FirstOrDefault(x => x.SourcePlayer.Name.Equals(_SelectedPlayerName))) != null) { var result = MessageBox.Show($"{_SelectedPlayerName}(은)는 이미 {com.UsedSkill.Name}(을)를 {com.DestinationPlayer}에 사용할 것 입니다. 입력을 초기화합니까?", "경고", MessageBoxButtons.YesNo); if (result == DialogResult.No) { return; } else { _CommandQueue.Remove(_CommandQueue.FirstOrDefault(x => x.SourcePlayer.Name.Equals(_SelectedPlayerName))); var original = MainFrame.GetPlayerList().FirstOrDefault(x => x.Name.Equals(_SelectedPlayerName)); view.GridItem.RemovePoint(_SelectedPlayerName); view.GridItem.AddRealPoint(_SelectedPlayerName, new Point(original.PosX, original.PosY)); view.GridItem.DrawGrid(); } } var skill = MainFrame.GetSkillByName(pitem.SelectedSkillName.ToString()); var gridPoint = view.GridItem.ToGridLocation(location); if (MessageBox.Show($"[{_SelectedPlayerName}]의 스킬 [{skill.Name}](을)를 [{gridPoint.ToString()}]에 사용합니까?", "확인", MessageBoxButtons.YesNo) == DialogResult.Yes) { string message = ""; DialogResult messageResult = DialogResult.No; if (!view.GridItem.DuplicateCheck(gridPoint)) { message += "해당 위치에 플레이어/엔티티가 없습니다."; } if (message.Length > 0) { messageResult = MessageBox.Show($"{message} 그래도 진행합니까?", "경고", MessageBoxButtons.YesNo); } if (message.Length <= 0 || messageResult == DialogResult.Yes) { Command command = new Command(p, null, view.GridItem.ToGridLocation(location), skill); _CommandQueue.Add(command); } if (skill.Name.Equals("이동")) { view.GridItem.RemovePoint(_SelectedPlayerName); view.GridItem.AddRealPoint(_SelectedPlayerName, view.GridItem.ToGridLocation(location)); } } view.GridItem.DrawGrid(); } }
public void GridHighlight(Point p) { PlayerCommand_View view = View as PlayerCommand_View; var grid = view.GridItem; if (string.IsNullOrEmpty(_SelectedPlayerName)) { grid.SetHighlight(p, "Point", null); } else { var selectedItem = view.FindPlayerItemByName(_SelectedPlayerName).Player_Skills.SelectedItem; if (selectedItem == null) { grid.SetHighlight(p, "Point", null); return; } var selectedSkill = selectedItem.ToString(); if (selectedSkill == null) { grid.SetHighlight(p, "Point", null); return; } else { var skill = MainFrame.GetSkillByName(selectedSkill); if (skill == null) { grid.SetHighlight(p, "Point", null); return; } var type = skill.RangeType; var rangeConst = skill.RangeConst; Point cp = new Point(); if (type.Contains("Ellipse")) { int r = int.Parse(rangeConst); cp = p; if (type.Contains("Self")) { cp = grid.GetPointByPlayerName(_SelectedPlayerName); grid.SetHighlight(p, "Ellipse", r, true, cp); return; } grid.SetHighlight(p, "Ellipse", r, true); } else if (type.Contains("Rectangle")) { var wh = rangeConst.Split(':')[0].Split(','); var rp = rangeConst.Split(':')[1].Split(','); grid.SetHighlight(p, "Rectangle", new Size(int.Parse(wh[0]), int.Parse(wh[1])), new Point(int.Parse(rp[0]), int.Parse(rp[1])), true); } else if (type.Contains("Player")) { if (rangeConst.Contains("Self")) { grid.SetHighlight(p, "Player", _SelectedPlayerName); } else { grid.SetHighlight(p, "Player", "SelectOne"); } } else if (type.Contains("Filter")) { } else { grid.SetHighlight(p, "Point", null); } } } }