using System; using System.Collections.Generic; using uiwidgets; using Unity.UIWidgets.painting; using Unity.UIWidgets.rendering; using Unity.UIWidgets.widgets; using UnityEngine; using Color = Unity.UIWidgets.ui.Color; using FontStyle = Unity.UIWidgets.ui.FontStyle; using TextStyle = Unity.UIWidgets.painting.TextStyle; namespace UIWidgetsSample.RaycastableScene { public class SceneBoard : StatefulWidget { public override State createState() { return new SceneBoardState(); } } public class SceneBoardState : State { public override Widget build(BuildContext context) { return new Container( height: RaycastableSceneConfig.height, color: RaycastableSceneConfig.mainColor, child: new Row( mainAxisAlignment: MainAxisAlignment.start, children: new List() { new Padding(padding: EdgeInsets.only(left:10f)), new Text("Made with UIWidgets", style: new TextStyle( color: Colors.white, fontSize: 12, fontStyle: FontStyle.italic )), new Expanded( child: new Container( child: new Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: new List { new ActionBox( name: RaycastableSceneConfig.LightSwitchName, onChange: value => { LightController.SwitchLight(value); }), new LightSlider(), }) )), } ) ); } } public class ActionBox : StatefulWidget { public string name; public Action onChange; public ActionBox(string name, Action onChange) { this.name = name; this.onChange = onChange; } public override State createState() { return new ActionBoxState(); } } public class ActionBoxState : State { private bool value = true; public override Widget build(BuildContext context) { return new Row( children: new List() { new Text( value? RaycastableSceneConfig.LightOn : RaycastableSceneConfig.LightOff, style: RaycastableSceneConfig.fontStyle ), new Padding(padding: EdgeInsets.only(left: 7f)), new CupertinoSwitch( value: value, onChanged: valueIn => { setState(() => { value = valueIn; widget.onChange?.Invoke(value); }); } ), } ); } } class LightSlider : StatefulWidget { public override State createState() { return new LightSliderState(); } } internal class LightSliderState : State { private float _currentSliderValue = 0; private Color[] colors = new[] { Colors.white, Colors.red, Colors.green, Colors.blue, Colors.yellow, Colors.pink, Colors.brown, Colors.purple, Colors.orange, Colors.black }; public override Widget build(BuildContext context) { var indexValue = _currentSliderValue * 10; var index = (int) Mathf.Clamp(indexValue, 0, 9); var color = colors[index];//HSVColor.fromAHSV(1, _currentSliderValue * 360, 1, 1).toColor(); return new Row( children: new List() { new Text(RaycastableSceneConfig.LightSliderName, style: RaycastableSceneConfig.fontStyle), new Padding(padding: EdgeInsets.only(left: 7f)), new Slider( value: _currentSliderValue, activeColor: color, divisions: 10, onChanged: (value) => { setState(() => { _currentSliderValue = value; LightController.ChangeLightColor(value); }); } ), } ); } } } class ColorPicker : StatefulWidget { public readonly float width; public ColorPicker(float width) { this.width = width; } public override State createState() => new _ColorPickerState(); } class _ColorPickerState : State { readonly List _colors = new List() { Color.fromARGB(255, 255, 0, 0), Color.fromARGB(255, 255, 128, 0), Color.fromARGB(255, 255, 255, 0), Color.fromARGB(255, 128, 255, 0), Color.fromARGB(255, 0, 255, 0), Color.fromARGB(255, 0, 255, 128), Color.fromARGB(255, 0, 255, 255), Color.fromARGB(255, 0, 128, 255), Color.fromARGB(255, 0, 0, 255), Color.fromARGB(255, 127, 0, 255), Color.fromARGB(255, 255, 0, 255), Color.fromARGB(255, 255, 0, 127), Color.fromARGB(255, 128, 128, 128), }; public override Widget build(BuildContext context) { return new Column( children: new List { new Center( child: new Container( width: widget.width, height: 15, decoration: new BoxDecoration( border: Border.all(width: 2, color: Colors.grey[800]), borderRadius: BorderRadius.circular(15), gradient: new LinearGradient(colors: _colors) ) ) ) } ); } }