Ejemplo n.º 1
0
        public static List <ElementGroup> GetElementGroups(ProBuilderMesh mesh, PivotPoint pivot, HandleOrientation orientation, bool collectCoincident)
        {
            var groups     = new List <ElementGroup>();
            var trs        = mesh.transform.localToWorldMatrix;
            var selectMode = ProBuilderEditor.selectMode;

            switch (pivot)
            {
            case PivotPoint.IndividualOrigins:
            {
                if (selectMode.ContainsFlag(SelectMode.Vertex | SelectMode.TextureVertex))
                {
                    foreach (var list in GetVertexSelectionGroups(mesh, collectCoincident))
                    {
                        var bounds = Math.GetBounds(mesh.positionsInternal, list);
                        var rot    = UnityEngine.ProBuilder.HandleUtility.GetVertexRotation(mesh, orientation, list);
                        groups.Add(new ElementGroup(list, trs.MultiplyPoint3x4(bounds.center), rot));
                    }
                }
                else if (selectMode.ContainsFlag(SelectMode.Edge | SelectMode.TextureEdge))
                {
                    foreach (var list in GetEdgeSelectionGroups(mesh))
                    {
                        var bounds = Math.GetBounds(mesh.positionsInternal, list);
                        var rot    = UnityEngine.ProBuilder.HandleUtility.GetEdgeRotation(mesh, orientation, list);

                        List <int> indices;

                        if (collectCoincident)
                        {
                            indices = new List <int>();
                            mesh.GetCoincidentVertices(list, indices);
                        }
                        else
                        {
                            indices = list.SelectMany(x => new int[] { x.a, x.b }).ToList();
                        }

                        groups.Add(new ElementGroup(indices, trs.MultiplyPoint3x4(bounds.center), rot));
                    }
                }
                else if (selectMode.ContainsFlag(SelectMode.Face | SelectMode.TextureFace))
                {
                    foreach (var list in GetFaceSelectionGroups(mesh))
                    {
                        var        bounds = Math.GetBounds(mesh.positionsInternal, list);
                        var        rot    = UnityEngine.ProBuilder.HandleUtility.GetFaceRotation(mesh, orientation, list);
                        List <int> indices;

                        if (collectCoincident)
                        {
                            indices = new List <int>();
                            mesh.GetCoincidentVertices(list, indices);
                        }
                        else
                        {
                            indices = list.SelectMany(x => x.distinctIndexesInternal).ToList();
                        }

                        groups.Add(new ElementGroup(indices, trs.MultiplyPoint3x4(bounds.center), rot));
                    }
                }
                break;
            }

            case PivotPoint.ActiveElement:
            {
                var indices = collectCoincident
                        ? mesh.GetCoincidentVertices(mesh.selectedIndexesInternal)
                        : new List <int>(mesh.selectedIndexesInternal);

                var position = mesh.transform.position;
                var rotation = mesh.transform.rotation;

                if (selectMode.ContainsFlag(SelectMode.Face | SelectMode.TextureFace))
                {
                    var face = mesh.GetActiveFace();

                    if (face != null)
                    {
                        position = trs.MultiplyPoint3x4(Math.GetBounds(mesh.positionsInternal, face.distinctIndexesInternal).center);
                        rotation = UnityEngine.ProBuilder.HandleUtility.GetFaceRotation(mesh, orientation, new Face[] { face });
                    }
                }
                else if (selectMode.ContainsFlag(SelectMode.Edge | SelectMode.TextureEdge))
                {
                    var edge = mesh.GetActiveEdge();

                    if (edge != Edge.Empty)
                    {
                        position = trs.MultiplyPoint3x4(Math.GetBounds(mesh.positionsInternal, new int [] { edge.a, edge.b }).center);
                        rotation = UnityEngine.ProBuilder.HandleUtility.GetEdgeRotation(mesh, orientation, new Edge[] { edge });
                    }
                }
                else if (selectMode.ContainsFlag(SelectMode.Vertex | SelectMode.TextureVertex))
                {
                    var vertex = mesh.GetActiveVertex();

                    if (vertex > -1)
                    {
                        position = trs.MultiplyPoint3x4(mesh.positionsInternal[vertex]);
                        rotation = UnityEngine.ProBuilder.HandleUtility.GetVertexRotation(mesh, orientation, new int[] { vertex });
                    }
                }

                groups.Add(new ElementGroup(indices, position, rotation));
                break;
            }

            default:
            {
                var indices = collectCoincident
                        ? mesh.GetCoincidentVertices(mesh.selectedIndexesInternal)
                        : new List <int>(mesh.selectedIndexesInternal);
                var position = MeshSelection.bounds.center;
                var rotation = Quaternion.identity;

                if (selectMode.ContainsFlag(SelectMode.Face | SelectMode.TextureFace))
                {
                    var face = mesh.GetActiveFace();

                    if (face != null)
                    {
                        rotation = UnityEngine.ProBuilder.HandleUtility.GetFaceRotation(mesh, orientation, new Face[] { face });
                    }
                }
                else if (selectMode.ContainsFlag(SelectMode.Edge | SelectMode.TextureEdge))
                {
                    var edge = mesh.GetActiveEdge();

                    if (edge != Edge.Empty)
                    {
                        rotation = UnityEngine.ProBuilder.HandleUtility.GetEdgeRotation(mesh, orientation, new Edge[] { edge });
                    }
                }
                else if (selectMode.ContainsFlag(SelectMode.Vertex | SelectMode.TextureVertex))
                {
                    var vertex = mesh.GetActiveVertex();

                    if (vertex > -1)
                    {
                        rotation = UnityEngine.ProBuilder.HandleUtility.GetVertexRotation(mesh, orientation, new int[] { vertex });
                    }
                }

                groups.Add(new ElementGroup(indices, position, rotation));
                break;
            }
            }

            return(groups);
        }
 internal abstract MeshAndElementSelection GetElementSelection(ProBuilderMesh mesh, PivotPoint pivot, HandleOrientation orientation);
Ejemplo n.º 3
0
 public MeshAndElementSelection(ProBuilderMesh mesh, PivotPoint pivot, HandleOrientation orientation, bool collectCoincidentIndices)
 {
     m_Mesh          = mesh;
     m_ElementGroups = ElementGroup.GetElementGroups(mesh, pivot, orientation, collectCoincidentIndices);
 }
Ejemplo n.º 4
0
 internal override MeshAndElementSelection GetElementSelection(ProBuilderMesh mesh, PivotPoint pivot)
 {
     return(new MeshAndPositions(mesh, pivot));
 }
Ejemplo n.º 5
0
        public static List <Candle> HA_M_Candles(Instrument instrument, out InstrumentDetails instrumentDetails)
        {
            instrumentDetails = new InstrumentDetails();
            Candle        haPreviounsCandle = null;
            Candle        haCurrentCandle   = null;
            List <Candle> haCandles         = new List <Candle>();
            int           ema50Period       = 50;
            int           ema9Period        = 9;
            List <Candle> candles           = OANDA.Data.Prices.GetCandles(instrument.Name, ema50Period, "M");

            instrumentDetails.Current = candles.LastOrDefault().Close;
            EMA ema50 = new EMA(ema50Period);
            EMA ema9  = new EMA(ema9Period);
            List <MyTrade.Core.Model.Candle> wcandles = MyTrade.Core.SqliteDataAccess.WeekyCandles.LoadCandles(instrument.Name);
            PivotPoints pps  = new PivotPoints();
            PivotPoint  wpps = pps.Get(wcandles[wcandles.Count - 2], instrumentDetails.Current);

            instrumentDetails.W_PivotPoints = wpps;
            List <MyTrade.Core.Model.Candle> mcandles = MyTrade.Core.SqliteDataAccess.MonthlyCandles.LoadCandles(instrument.Name);
            PivotPoint mpps = pps.Get(mcandles[mcandles.Count - 2], instrumentDetails.Current);

            instrumentDetails.M_PivotPoints = mpps;
            instrumentDetails.TimeFrame     = Core.Constants.TimeFrame.DAILY;
            for (int i = 0; i < candles.Count; i++)
            {
                instrumentDetails.Max = Math.Max(instrumentDetails.Max, candles[i].High);

                if (i == 0)
                {
                    instrumentDetails.Min = candles[i].Low;
                    instrumentDetails.Min = Math.Min(candles[i].Low, instrumentDetails.Min);
                    haPreviounsCandle     = HeikinAshi.GeneratePrevious(candles[i]);
                    haCandles.Add(haPreviounsCandle);
                }

                else
                {
                    haCurrentCandle = HeikinAshi.Generate(haPreviounsCandle, candles[i]);

                    haCandles.Add(haCurrentCandle);
                    haPreviounsCandle = haCurrentCandle;
                }


                if (i == (candles.Count - 1))
                {
                    if (instrumentDetails.EMAs == null)
                    {
                        instrumentDetails.EMAs = new List <Core.Model.Indicators.EMA>();
                    }
                    ema50.AddDataPoint(candles[i].Close);
                    ema9.AddDataPoint(candles[i].Close);
                    instrumentDetails.EMAs.Add(new Core.Model.Indicators.EMA()
                    {
                        Period = 50, Value = ema50.Average
                    });
                    instrumentDetails.EMAs.Add(new Core.Model.Indicators.EMA()
                    {
                        Period = 9, Value = ema9.Average
                    });
                }
                else
                {
                    ema50.AddDataPoint(candles[i].Close);
                    ema9.AddDataPoint(candles[i].Close);
                }
            }


            return(haCandles);
        }
Ejemplo n.º 6
0
 internal override MeshAndElementSelection GetElementSelection(ProBuilderMesh mesh, PivotPoint pivot, HandleOrientation orientation)
 {
     return(new MeshAndTextures(mesh, pivot, orientation));
 }
Ejemplo n.º 7
0
        public override void PostInitialize()
        {
            bool oldShapeManagerSuppressAdd = FlatRedBall.Math.Geometry.ShapeManager.SuppressAddingOnVisibilityTrue;

            FlatRedBall.Math.Geometry.ShapeManager.SuppressAddingOnVisibilityTrue = true;
            base.PostInitialize();
            if (SpriteInstance.Parent == null)
            {
                SpriteInstance.CopyAbsoluteToRelative();
                SpriteInstance.AttachTo(this, false);
            }
            if (SpriteInstance.Parent == null)
            {
                base.SpriteInstance.X = 0f;
            }
            else
            {
                base.SpriteInstance.RelativeX = 0f;
            }
            if (SpriteInstance.Parent == null)
            {
                base.SpriteInstance.Y = 0f;
            }
            else
            {
                base.SpriteInstance.RelativeY = 0f;
            }
            base.SpriteInstance.Texture            = AllParticles;
            base.SpriteInstance.LeftTexturePixel   = 1802f;
            base.SpriteInstance.RightTexturePixel  = 1908f;
            base.SpriteInstance.TopTexturePixel    = 1741f;
            base.SpriteInstance.BottomTexturePixel = 1897f;
            base.SpriteInstance.TextureScale       = 1f;
            base.SpriteInstance.AnimationChains    = BaseStructureAnimationChainListFile;
            base.SpriteInstance.CurrentChainName   = "FireTower";
            if (mAxisAlignedRectangleInstance.Parent == null)
            {
                mAxisAlignedRectangleInstance.CopyAbsoluteToRelative();
                mAxisAlignedRectangleInstance.AttachTo(this, false);
            }
            base.AxisAlignedRectangleInstance.Width  = 64f;
            base.AxisAlignedRectangleInstance.Height = 64f;
            if (LightSpriteInstance.Parent == null)
            {
                LightSpriteInstance.CopyAbsoluteToRelative();
                LightSpriteInstance.AttachTo(this, false);
            }
            if (LightSpriteInstance.Parent == null)
            {
                base.LightSpriteInstance.X = 19f;
            }
            else
            {
                base.LightSpriteInstance.RelativeX = 19f;
            }
            if (LightSpriteInstance.Parent == null)
            {
                base.LightSpriteInstance.Y = 70f;
            }
            else
            {
                base.LightSpriteInstance.RelativeY = 70f;
            }
            if (LightSpriteInstance.Parent == null)
            {
                base.LightSpriteInstance.Z = -1f;
            }
            else
            {
                base.LightSpriteInstance.RelativeZ = -1f;
            }
            base.LightSpriteInstance.Texture            = AllParticles;
            base.LightSpriteInstance.LeftTexturePixel   = 1792f;
            base.LightSpriteInstance.RightTexturePixel  = 2048f;
            base.LightSpriteInstance.TopTexturePixel    = 1792f;
            base.LightSpriteInstance.BottomTexturePixel = 2048f;
            base.LightSpriteInstance.TextureScale       = 1f;
            base.LightSpriteInstance.Width            = 1f;
            base.LightSpriteInstance.Height           = 1f;
            base.LightSpriteInstance.AnimationChains  = StructureGlowAnimationChainList;
            base.LightSpriteInstance.CurrentChainName = "FireGlow";
            #if FRB_MDX
            LightSpriteInstance.ColorOperation = Microsoft.DirectX.Direct3D.TextureOperation.Modulate;
            #else
            base.LightSpriteInstance.ColorOperation = FlatRedBall.Graphics.ColorOperation.Modulate;
            #endif
            base.LightSpriteInstance.Blue  = 0.5f;
            base.LightSpriteInstance.Alpha = 1f;
            if (AimSpriteInstance.Parent == null)
            {
                AimSpriteInstance.CopyAbsoluteToRelative();
                AimSpriteInstance.AttachTo(this, false);
            }
            if (AimSpriteInstance.Parent == null)
            {
                base.AimSpriteInstance.X = 19f;
            }
            else
            {
                base.AimSpriteInstance.RelativeX = 19f;
            }
            if (AimSpriteInstance.Parent == null)
            {
                base.AimSpriteInstance.Y = 102f;
            }
            else
            {
                base.AimSpriteInstance.RelativeY = 102f;
            }
            if (AimSpriteInstance.Parent == null)
            {
                base.AimSpriteInstance.Z = 1f;
            }
            else
            {
                base.AimSpriteInstance.RelativeZ = 1f;
            }
            base.AimSpriteInstance.Texture            = AllParticles;
            base.AimSpriteInstance.LeftTexturePixel   = 1988f;
            base.AimSpriteInstance.RightTexturePixel  = 2023f;
            base.AimSpriteInstance.TopTexturePixel    = 1844f;
            base.AimSpriteInstance.BottomTexturePixel = 1925f;
            base.AimSpriteInstance.TextureScale       = 1f;
            if (PivotPoint.Parent == null)
            {
                PivotPoint.CopyAbsoluteToRelative();
                PivotPoint.AttachTo(this, false);
            }
            if (PivotPoint.Parent == null)
            {
                base.PivotPoint.X = 19f;
            }
            else
            {
                base.PivotPoint.RelativeX = 19f;
            }
            if (PivotPoint.Parent == null)
            {
                base.PivotPoint.Y = 70f;
            }
            else
            {
                base.PivotPoint.RelativeY = 70f;
            }
            if (LightAimSpriteInstance.Parent == null)
            {
                LightAimSpriteInstance.CopyAbsoluteToRelative();
                LightAimSpriteInstance.AttachTo(this, false);
            }
            base.LightAimSpriteInstance.Texture          = AllParticles;
            base.LightAimSpriteInstance.TextureScale     = 1f;
            base.LightAimSpriteInstance.AnimationChains  = StructureGlowAnimationChainList;
            base.LightAimSpriteInstance.CurrentChainName = "FireAimGlow";
            base.LightAimSpriteInstance.Visible          = true;
            FlatRedBall.Math.Geometry.ShapeManager.SuppressAddingOnVisibilityTrue = oldShapeManagerSuppressAdd;
        }
Ejemplo n.º 8
0
 internal abstract MeshAndElementSelection GetElementSelection(ProBuilderMesh mesh, PivotPoint pivot);