public void ApplyToPoly(ref PolyHydra poly, AppearancePresets aPresets) { poly.PolyType = PolyType; poly.BypassOps = BypassOps; poly.TwoSided = TwoSided; poly.ConwayOperators = new List <PolyHydra.ConwayOperator>(); poly.GridType = GridType; poly.PrismP = PrismP; poly.PrismQ = PrismQ; poly.PresetName = Name; aPresets.ApplyPresetToPoly(AppearancePresetName); for (var index = 0; index < Ops.Length; index++) { var presetOp = Ops[index]; var op = new PolyHydra.ConwayOperator { opType = presetOp.OpType, faceSelections = presetOp.FaceSelections, amount = presetOp.Amount, randomize = presetOp.Randomize, disabled = presetOp.Disabled }; poly.ConwayOperators.Add(op); } }
void AddRandomOpButtonClicked() { int maxOpIndex = Enum.GetValues(typeof(PolyHydra.Ops)).Length; int opTypeIndex = Random.Range(1, maxOpIndex - 2); // No canonicalize as it's pretty rough at the moment var opType = (PolyHydra.Ops)opTypeIndex; var opConfig = poly.opconfigs[opType]; ConwayPoly.FaceSelections faceSelection = ConwayPoly.FaceSelections.None; var maxFaceSel = Enum.GetValues(typeof(ConwayPoly.FaceSelections)).Length - 1; // Exclude "None" // Keep picking a random facesel until we get one that will have an effect while (!poly.FaceSelectionIsValid(faceSelection)) { faceSelection = (ConwayPoly.FaceSelections)Random.Range(1, maxFaceSel); } // TODO pick another facesel if all faces are chosen var newOp = new PolyHydra.ConwayOperator { opType = opType, faceSelections = Random.value > 0.25f ? 0: faceSelection, randomize = Random.value > 0.8f, amount = Random.value > 0.25f ? opConfig.amountDefault : Random.Range(opConfig.amountMin, opConfig.amountMax), disabled = false }; poly.ConwayOperators.Add(newOp); AddOpItemToUI(newOp); Rebuild(); }
void AddOpItemToUI(PolyHydra.ConwayOperator op) { var opPrefab = Instantiate(OpTemplate); opPrefab.transform.SetParent(OpContainer); var opPrefabManager = opPrefab.GetComponent <OpPrefabManager>(); opPrefab.name = op.opType.ToString(); foreach (var item in Enum.GetValues(typeof(PolyHydra.Ops))) { var label = new Dropdown.OptionData(item.ToString()); opPrefabManager.OpTypeDropdown.options.Add(label); } foreach (var item in Enum.GetValues(typeof(ConwayPoly.FaceSelections))) { var label = new Dropdown.OptionData(item.ToString()); opPrefabManager.FaceSelectionDropdown.options.Add(label); } opPrefabManager.DisabledToggle.isOn = op.disabled; opPrefabManager.OpTypeDropdown.value = (int)op.opType; opPrefabManager.FaceSelectionDropdown.value = (int)op.faceSelections; opPrefabManager.AmountSlider.value = op.amount; opPrefabManager.AmountInput.text = op.amount.ToString(); opPrefabManager.RandomizeToggle.isOn = op.randomize; ConfigureOpControls(opPrefab.GetComponent <OpPrefabManager>()); opPrefabManager.OpTypeDropdown.onValueChanged.AddListener(delegate { OpTypeChanged(); }); opPrefabManager.FaceSelectionDropdown.onValueChanged.AddListener(delegate { OpsUIToPoly(); }); opPrefabManager.DisabledToggle.onValueChanged.AddListener(delegate { OpsUIToPoly(); }); opPrefabManager.AmountSlider.onValueChanged.AddListener(delegate { AmountSliderChanged(); }); opPrefabManager.AmountInput.onValueChanged.AddListener(delegate { AmountInputChanged(); }); opPrefabManager.RandomizeToggle.onValueChanged.AddListener(delegate { OpsUIToPoly(); }); opPrefabManager.UpButton.onClick.AddListener(MoveOpUp); opPrefabManager.DownButton.onClick.AddListener(MoveOpDown); opPrefabManager.DeleteButton.onClick.AddListener(DeleteOp); opPrefabManager.Index = opPrefabs.Count; // Enable/Disable down buttons as appropriate: // We are adding this at the end so it can't move down opPrefab.GetComponent <OpPrefabManager>().DownButton.enabled = false; if (opPrefabs.Count == 0) // Only one item exists { // First item can't move up opPrefab.GetComponent <OpPrefabManager>().UpButton.enabled = false; } else { // Reenable down button on the previous final item opPrefabs[opPrefabs.Count - 1].GetComponent <OpPrefabManager>().DownButton.enabled = true; } opPrefabs.Add(opPrefab); }
void AddOpButtonClicked() { var newOp = new PolyHydra.ConwayOperator { disabled = false }; poly.ConwayOperators.Add(newOp); AddOpItemToUI(newOp); Rebuild(); }