public ChangeVisuallyAttribute(ChangeTo to, string whenOtherPropertyName, DisplayChangeIf ifOperator, object value, bool conditionPassesIfNull)
 {
     To = to;
     WhenOtherPropertyName = whenOtherPropertyName;
     If = ifOperator;
     Value = value;
     ConditionPassesIfNull = conditionPassesIfNull;
 }
示例#2
0
 public ChangeVisuallyAttribute(ChangeTo to, string whenOtherPropertyName, DisplayChangeIf ifOperator, object value, bool conditionPassesIfNull)
 {
     To = to;
     WhenOtherPropertyName = whenOtherPropertyName;
     If    = ifOperator;
     Value = value;
     ConditionPassesIfNull = conditionPassesIfNull;
 }
 public ChangeVisuallyAttribute(ChangeTo to, string whenOtherPropertyName, DisplayChangeIf ifOperator, object value, bool conditionPassesIfNull, ComparisonValueType valueType = ComparisonValueType.String)
 {
     To = to;
     WhenOtherPropertyName = whenOtherPropertyName;
     If = ifOperator;
     Value = value;
     ConditionPassesIfNull = conditionPassesIfNull;
     ValueTypeToCompare = valueType;
 }
示例#4
0
 public ChangeVisuallyAttribute(ChangeTo to, string whenOtherPropertyName, DisplayChangeIf ifOperator, object value, bool conditionPassesIfNull, ComparisonValueType valueType = ComparisonValueType.String)
 {
     To = to;
     WhenOtherPropertyName = whenOtherPropertyName;
     If    = ifOperator;
     Value = value;
     ConditionPassesIfNull = conditionPassesIfNull;
     ValueTypeToCompare    = valueType;
 }
示例#5
0
        public void SetTrails(params Trail[] trails)
        {
            //remove exisiting trails
            Node.RemoveAllChildren();
            _safetyIndex.Clear();

            //create each trail
            if (trails == null || trails.Length == 0)
            {
                return;
            }
            var totalDelay = 0f;

            var decorationRoot  = Node.CreateChild();
            var safetyIndex     = 0;
            var safetyPositions = new Dictionary <Vector3, int>();

            foreach (var trail in trails.Where(i => i.Path != null && i.Path.Length != 0))
            {
                //create ribbon
                var ribbonNode = Node.CreateChild();
                var ribbon     = ribbonNode.CreateComponent <RibbonTrail>();
                ribbon.ViewMask    = 1;              //invisible to Selection Manager
                ribbon.CastShadows = false;
                ribbon.Material    = Material.FromColor(new Color(trail.R / 255f, trail.G / 255f, trail.B / 255f, trail.A / 255f));
                ribbon.Material.SetTechnique(0, CoreAssets.Techniques.NoTextureUnlitAlpha);                 //self illuminating
                ribbon.Lifetime = 10000f;
                ribbon.Width    = (trail.Width == 0) ? .1f : trail.Width;
                ribbonNode.SetWorldPosition(new Vector3(trail.Path[0].X, trail.Path[0].Y, trail.Path[0].Z));

                //create decoration
                var decorationNode = decorationRoot.CreateChild();
                if (trail.Decoration != null)
                {
                    var decoration = trail.Decoration.Value;
                    var start      = new Vector3(decoration.Start.X, decoration.Start.Y, decoration.Start.Z);
                    var end        = new Vector3(decoration.End.X, decoration.End.Y, decoration.End.Z);

                    //Safety
                    if (decoration.Type == TrailDecorationType.Safety)
                    {
                        if (!safetyPositions.ContainsKey(start))
                        {
                            var width  = .7f;
                            var top    = CreateShape <Cone>(decorationNode, decoration, new Vector3(0, width / 2f, 0), new Vector3(width, width, width));
                            var bottom = CreateShape <Cone>(decorationNode, decoration, new Vector3(0, -width / 2f, 0), new Vector3(width, width, width));
                            bottom.Roll(180);
                            decorationNode.SetWorldPosition(start);
                            safetyPositions.Add(start, safetyIndex);
                        }
                        else
                        {
                            _safetyIndex.AddOrUpdate(safetyIndex, safetyPositions[start], (i, e) => safetyPositions[start]);                             //if one is at the same location, then reuse it
                        }
                    }

                    //pick
                    if (decoration.Type == TrailDecorationType.Pick)
                    {
                        CreatePointer(decorationNode, .4f, false, decoration, start, end);
                    }

                    //place
                    if (decoration.Type == TrailDecorationType.Place)
                    {
                        CreatePointer(decorationNode, .4f, true, decoration, start, end);
                    }
                }
                safetyIndex++;

                //create action
                var speed   = (trail.Speed == 0) ? 50f : trail.Speed;
                var actions = trail.Path.Skip(1).Select((i, index) =>
                {
                    var pos     = new Vector3(i.X, i.Y, i.Z);
                    var prevPos = new Vector3(trail.Path[index].X, trail.Path[index].Y, trail.Path[index].Z);
                    var dist    = Vector3.Distance(pos, prevPos);
                    var time    = dist / speed;
                    totalDelay += time;
                    return(new MoveTo(time, pos));
                });

                //animate ribbon
                FiniteTimeAction[] actionsArray;
                if (totalDelay != 0)
                {
                    var time = totalDelay;
                    var a    = actions.ToList <FiniteTimeAction>();
                    a.Insert(0, new DelayTime(time));
                    actionsArray = a.ToArray();
                }
                else
                {
                    actionsArray = actions.ToArray();
                }
                ribbonNode.RunActions(new Sequence(actionsArray));

                //animate decoration
                if (trail.Decoration != null)
                {
                    float fadeTime = .2f;
                    var   nodes    = decorationNode.GetChildrenWithComponent <Shape>(true);
                    foreach (var node in nodes)
                    {
                        var target = GetDecorationAlpha(null, node);
                        ChangeDecorationAlpha(null, node, 0, 0, 0);
                        var action = new ChangeTo <float>(fadeTime, target, GetDecorationAlpha, ChangeDecorationAlpha);
                        node.RunActions(new Sequence(new FiniteTimeAction[] { new DelayTime(totalDelay), action }));
                    }
                    if (nodes.Length != 0)
                    {
                        totalDelay += fadeTime;
                    }
                }
            }
        }