private void DrawLights(DrawStep drawStep)
        {
            drawStep.Effect.SetTextures(white);
            drawStep.Effect.Instancing = false;
            drawStep.Effect.PrepModel(sphere);

            for (int i = 0; i < lights.Count; i++)
            {
                PointLight light = lights[i];

                drawStep.Effect.Color = light.Color.ToVector3() * 2f;
                drawStep.Effect.World = Matrix.CreateScale(0.1f) *
                                        Matrix.CreateTranslation(light.Position);

                drawStep.Effect.Emissive = 1f;

                if (i == 0)
                {
                    drawStep.Effect.World = Matrix.CreateTranslation(light.Position);
                }

                foreach (var mesh in sphere.Meshes)
                {
                    mesh.Draw();
                }
            }
        }
Esempio n. 2
0
        public void Draw(DrawStep drawStep)
        {
            Matrix worldMatrix = Matrix.CreateRotationX(MathHelper.PiOver2);

            // Draw all meshes.
            foreach (var mesh in _model.Meshes)
            {
                foreach (var meshPart in mesh.MeshParts.Where(mp => mp.PrimitiveCount > 0))
                {
                    var basicEffect = (BasicEffect)meshPart.Effect;

                    drawStep.Effect.Color = basicEffect.DiffuseColor;
                    drawStep.Effect.World = _modelTransforms[mesh.ParentBone.Index] * worldMatrix;
                    drawStep.Effect.SetTextures(white);

                    foreach (var pass in drawStep.Effect.CurrentTechnique.Passes)
                    {
                        pass.Apply();

                        graphics.SetVertexBuffer(meshPart.VertexBuffer);
                        graphics.Indices = meshPart.IndexBuffer;

                        graphics.DrawIndexedPrimitives(PrimitiveType.TriangleList,
                                                       meshPart.VertexOffset, 0, meshPart.PrimitiveCount);
                    }
                }
            }
        }
Esempio n. 3
0
        public void Start(Point pos)
        {
            _startPos = pos;

            switch (DrawStepType)
            {
            case DrawStep.DrawStepType.DrawRect:
                _nowDrawing = StartDrawRect();
                break;

            case DrawStep.DrawStepType.DrawEllipse:
                _nowDrawing = StartDrawEllipse();
                break;

            case DrawStep.DrawStepType.DrawLine:
                _nowDrawing = StartDrawLine();
                break;

            case DrawStep.DrawStepType.DrawText:
                _nowDrawing = StartDrawText();
                break;
            }

            StepManager.InsertNext(_nowDrawing);

            if (_nowDrawing.Iterations != -1)
            {
                StepManager.RefreshToCurrentStep();
            }
        }
Esempio n. 4
0
 private void ClearSelection()
 {
     horizontalCircleImage.gameObject.SetActive(false);
     verticalDistanceImage.gameObject.SetActive(false);
     pathLine.gameObject.SetActive(false);
     pathLine.positionCount = 0;
     pathList.Clear();
     drawStep = DrawStep.Idle;
 }
Esempio n. 5
0
    private bool FindTargetPoint(out Vector3 targetPoint)
    {
        Vector3 mousePosition = Input.mousePosition;
        //mousePosition.z = circleCenter.z;
        Ray ray = Camera.main.ScreenPointToRay(mousePosition);

        RaycastHit[] hitInfos = Physics.RaycastAll(ray, Mathf.Infinity, layerMask);

        if (hitInfos.Length == 0)
        {
            targetPoint = Vector3.zero;
            return(false);
        }
        //Debug.Log($"Hit count: { hitInfos.Length } ");
        //Debug.Log($"circleCenter: { circleCenter }");

        bool chooseInteractable = false;

        if (drawStep != DrawStep.DrawingVerticalDistance)
        {
            chooseInteractable = true;
            drawStep           = DrawStep.DrawingHorizontalCircle;
        }

        targetPoint = hitInfos[0].point;
        foreach (RaycastHit hitInfo in hitInfos)
        {
            //Debug.Log($"collide: { hitInfo.collider.name } point: { hitInfo.point }");
            if (chooseInteractable && hitInfo.collider.tag == Tags.Interactable)
            {
                IPointInteractable pointInteractable = hitInfo.collider.GetComponentInParent <IPointInteractable>();

                if (pointInteractable != null)
                {
                    targetPoint = pointInteractable.GetPoint();
                    drawStep    = DrawStep.DrawToHotspot;

                    break;
                }
            }
            else
            {
                if (hitInfo.collider.tag != Tags.Interactable)
                {
                    targetPoint = hitInfo.point;
                }
            }
        }

        return(true);
    }
        public void Draw(DrawStep drawStep)
        {
            drawStep.Effect.SpecularIntensity = 0;
            drawStep.Effect.SpecularExponent  = 0;

            DrawLattice(drawStep);

            if (!drawStep.ShadowCastersOnly)
            {
                DrawLights(drawStep);
            }

            DrawShip(drawStep);
        }
Esempio n. 7
0
    private void StartDrawingVerticalDistance()
    {
        drawStep = DrawStep.DrawingVerticalDistance;

        lastHorizontalPosition = lastPosition;

        horizontalCircleCollider.enabled           = false;
        verticalDistanceImage.transform.position   = circleCenter;
        verticalDistanceImage.transform.localScale = new Vector3(moveDistance, moveDistance, 1);
        verticalDistanceImage.gameObject.SetActive(true);

        Vector3 circleVector = lastHorizontalPosition - circleCenter;
        float   angle        = Vector3.Angle(circleVector, Vector3.right) * Mathf.Sign(-circleVector.z);

        verticalDistanceImage.transform.rotation = Quaternion.AngleAxis(angle, Vector3.up);
    }
        private void DrawShip(DrawStep drawStep)
        {
            drawStep.Effect.SetTextures(surface);
            drawStep.Effect.Emissive   = 0;
            drawStep.Effect.Color      = Color.White.ToVector3();
            drawStep.Effect.Instancing = false;

            float phi     = (1 + -0.1f * rot.X) % MathHelper.TwoPi;
            float heading = phi + MathHelper.Pi;

            Vector3 position = 100 * new Vector3((float)Math.Cos(phi), (float)Math.Sin(phi), 0) + 10 * Vector3.UnitZ;

            drawStep.Effect.PrepModel(ship);

            Matrix world = Matrix.CreateRotationX(MathHelper.PiOver2) * Matrix.CreateRotationZ(heading) * Matrix.CreateTranslation(position);

            ship.Draw(world,
                      drawStep.Camera.View,
                      drawStep.Camera.Projection);
        }
Esempio n. 9
0
    private void StartDrawingCircle()
    {
        if (pathLine.positionCount == 0)
        {
            Utils.AddPosition(pathLine, startPosition);
            circleCenter = startPosition;
        }

        lastPosition = circleCenter;

        horizontalCircleImage.transform.position   = circleCenter;
        horizontalCircleImage.transform.localScale = new Vector3(minCircleSize, minCircleSize, 1);
        horizontalCircleCollider.enabled           = true;
        horizontalCircleImage.gameObject.SetActive(true);

        verticalDistanceImage.gameObject.SetActive(false);

        drawStep = DrawStep.DrawingHorizontalCircle;

        Utils.AddPosition(pathLine, lastPosition);
    }
Esempio n. 10
0
        private void DrawLines(float[] currentCoordinates, MotionEventActions action, DrawView drawView)
        {
            int[] draw;
            try
            {
                draw = drawView.GetCoordinates(currentCoordinates);
            }
            catch (InvalidCoordinatesException)
            {
                try
                {
                    LastDrawStep = DrawStep.StartProgram;
                    int[] drawOld = drawView.GetCoordinates(lastDrawnCoordinates);
                    SendToArduino("{p;" + drawOld[0] + "," + drawOld[1] + "}");
                    drawView.DrawLine(firstPointOfLineCoordinates, lastDrawnCoordinates);
                    return;
                }
                catch (InvalidCoordinatesException)
                {
                    LastDrawStep = DrawStep.StartProgram;
                    return;
                }
            }

            if (!equalsNumbers(lastDraw, draw))
            {
                drawningStep++;
                double lastDistancea = Math.Sqrt(Math.Pow((lastDrawnCoordinates[0] - currentCoordinates[0]), 2) + Math.Pow((lastDrawnCoordinates[1] - currentCoordinates[1]), 2));
                int    stepLimit     = 2;
                if (lastDistancea < 8)
                {
                    stepLimit = 3;
                }
                if (lastDistancea < 6)
                {
                    stepLimit = 4;
                }
                if (lastDistancea < 3)
                {
                    stepLimit = 5;
                }
                if (lastDistancea <= 1)
                {
                    stepLimit = 7;
                }
                if (lastDistancea > 30)
                {
                    stepLimit = 1;
                }
                if (lastDistancea > 40)
                {
                    stepLimit = 0;
                }

                if ((LastDrawStep == DrawStep.GetAngle && drawningStep > stepLimit) || action == MotionEventActions.Up)
                {
                    float  x2x1       = 0 - firstPointOfLineCoordinates[0] - lastDrawnCoordinates[0];
                    float  x3x1       = 0 - firstPointOfLineCoordinates[0] - currentCoordinates[0];
                    float  point21    = (0 - firstPointOfLineCoordinates[1] - lastDrawnCoordinates[1]) / x2x1;
                    float  point31    = (0 - firstPointOfLineCoordinates[1] - currentCoordinates[1]) / x3x1;
                    double distance   = Math.Sqrt(Math.Pow((firstPointOfLineCoordinates[0] - currentCoordinates[0]), 2) + Math.Pow((firstPointOfLineCoordinates[1] - currentCoordinates[1]), 2));
                    double varDecided = 0.002;

                    // DO DDEBUGOWANIA
                    // Console.WriteLine("{0:F5} ; {1:F5} ; {2:F8} ; {3:F8} ; {10:F8} ; X - {4:F2} ; Y - {5:F2} ; x - {6:F2} ; y - {7:F2} ; x - {8:F2} ; y - {9:F2}", point21, point31, Math.Abs(point21 - point31), lastDistancea, firstPointOfLineCoordinates[0], firstPointOfLineCoordinates[1], lastDrawnCoordinatesOnCanva[0] , lastDrawnCoordinatesOnCanva[1] ,currentCoordinates[0], currentCoordinates[1], varDecided);
                    // -----------------

                    if (x2x1 != 0 && x3x1 != 0)
                    {
                        if (Math.Abs(point21 - point31) > (float)varDecided || action == MotionEventActions.Up || lastDistance > distance)
                        {
                            lastDraw = drawView.GetCoordinates(lastDrawnCoordinates);
                            SendToArduino("{p;" + lastDraw[0] + "," + lastDraw[1] + "}");
                            drawView.DrawLine(firstPointOfLineCoordinates, lastDrawnCoordinates);

                            firstPointOfLineCoordinates = lastDrawnCoordinates;
                            LastDrawStep = DrawStep.CreatePoint;
                        }
                    }
                    if (action == MotionEventActions.Up)
                    {
                        LastDrawStep = DrawStep.CheckedAndDraw;
                    }
                    lastDistance = distance;
                    drawningStep = 0;
                }

                if (LastDrawStep == DrawStep.CreatePoint)
                {
                    lastDistance         = Math.Sqrt((draw[0] * draw[0]) + (draw[1] * draw[1]));
                    LastDrawStep         = DrawStep.GetAngle;
                    lastDrawnCoordinates = currentCoordinates;
                }
            }

            if (action == MotionEventActions.Down && (LastDrawStep == DrawStep.CheckedAndDraw || LastDrawStep == DrawStep.StartProgram))
            {
                firstPointOfLineCoordinates = currentCoordinates;
                SendToArduino("{d;" + draw[0] + "," + draw[1] + "}");
                LastDrawStep         = DrawStep.CreatePoint;
                lastDrawnCoordinates = currentCoordinates;
                lastDistance         = 0;
                drawView.DrawPoint(currentCoordinates);
                return;
            }
            lastDrawnCoordinates = currentCoordinates;
        }
Esempio n. 11
0
        private void DrawLattice(DrawStep drawStep)
        {
            var graphics = drawStep.GraphicsDevice;

            drawStep.Effect.Color             = Color.White.ToVector3();
            drawStep.Effect.SpecularExponent  = 100;
            drawStep.Effect.SpecularIntensity = 0.9f;

            switch (technique)
            {
            case 2:
                drawStep.Effect.SetTextures(surface, surfaceNormalMap, surfaceSpecularMap);
                break;

            case 1:
                drawStep.Effect.SetTextures(surface, surfaceNormalMap);
                break;

            case 0:
            default:
                drawStep.Effect.SetTextures(surface);
                break;
            }

            graphics.SamplerStates[0] = SamplerState.AnisotropicClamp;
            graphics.SamplerStates[1] = SamplerState.AnisotropicClamp;
            graphics.SamplerStates[2] = SamplerState.AnisotropicClamp;

            icosahedronInstances.Instances.Clear();

            foreach (Vector3 pt in LatticePoints(latticeSize))
            {
                Vector3 rotation = new Vector3(
                    (float)Math.Cos(this.rot.X * pt.X + pt.X),
                    (float)Math.Cos(this.rot.Y * pt.Y + pt.Y),
                    (float)Math.Cos(this.rot.Z * pt.Z + pt.Z));

                var world = Matrix.CreateRotationX(rotation.X) *
                            Matrix.CreateRotationY(rotation.Y) *
                            Matrix.CreateRotationZ(rotation.Z) *
                            Matrix.CreateTranslation(pt);

                if (pt == Vector3.Zero)
                {
                    Vector3 disp      = new Vector3(0, 0, -3);
                    float   scale     = 400;
                    float   dispScale = 0.515f;

                    Vector3 axis = new Vector3(-1, 1, 0);
                    axis.Normalize();
                    var q = Quaternion.CreateFromAxisAngle(axis, MathHelper.PiOver2 * 1.4f + MathHelper.Pi);

                    world = Matrix.CreateFromQuaternion(q) * Matrix.CreateScale(scale) * Matrix.CreateTranslation(disp * scale * dispScale);
                }

                icosahedronInstances.Instances.Add(world);

                if (!drawInstanced)
                {
                    drawStep.Effect.World      = world;
                    drawStep.Effect.Instancing = false;

                    foreach (var pass in drawStep.Effect.CurrentTechnique.Passes)
                    {
                        pass.Apply();

                        graphics.Textures[0] = surface;
                        graphics.SetVertexBuffer(icosahedron.Vertices);
                        graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, icosahedron.Vertices.VertexCount / 3);
                    }
                }
            }

            if (drawInstanced)
            {
                drawStep.Effect.World      = Matrix.Identity;
                drawStep.Effect.Instancing = true;

                icosahedronInstances.Draw(drawStep.Effect.AsEffect(), icosahedron);
            }
        }
Esempio n. 12
0
 public void Finish()
 {
     _nowDrawing = null;
 }