public void OnUpdate()
    {
        GameObject gobj = PhysicEngine.getInstance().RayCast3DWithTag(gameObject.transform.position,
                                                                      gameObject.transform.GetForwardVector(), 5.0f, Common.tagForStealthInteractables);

        if (lastSelectedObj != gobj)
        {
            if (gobj != null)
            {
                GetScriptClass <StealthInteractableObject>(gobj).OnStealthPlayerMouseEnter();
            }
            if (lastSelectedObj != null)
            {
                GetScriptClass <StealthInteractableObject>(lastSelectedObj).OnStealthPlayerMouseLeave();
            }
        }

        if (gobj != null)
        {
            if (Common.GetStealthPlayerScript().IsStealthPlayerInteracting())
            {
                GetScriptClass <StealthInteractableObject>(gobj).OnStealthPlayerMouseInteract();
                // Logger.Log(gobj.GetName() + " was interacted with.");
            }
        }

        lastSelectedObj = gobj;
    }
        public void GameLoop()
        {
            DateTime curr_time = DateTime.UtcNow;
            DateTime last_time = curr_time;

            running = true;
            while (running)
            {
                curr_time = DateTime.UtcNow;
                TimeSpan deltaTime;
                // caculate time span between current and last time
                if ((deltaTime = curr_time - last_time).TotalMilliseconds > 0)
                {
                    PhysicEngine.Update(deltaTime);
                    GSManager.Update(deltaTime);
                }
                // correct time into fps
                float TargetSecond = 1f / TargetFps;
                if (deltaTime.TotalSeconds < TargetSecond)
                {
                    Thread.Sleep((int)(TargetSecond - deltaTime.TotalSeconds));
                }
                last_time = curr_time;
            }
        }
    public GameObject RayCastWithTag(String tag)
    {
        GameObject gobj = PhysicEngine.getInstance().RayCast3DWithTag(
            Common.GetStealthPlayerCamera().transform.position, Common.GetStealthPlayerCamera().transform.GetForwardVector(), 10000.0f, tag);

        return(gobj);
    }
Exemple #4
0
        public Galaxy(GraphicsDevice pGraphicsDevice, SharedList pSharedList, ContentManager pContentManager, Camera pCamera, HeightMap heightMap)
        {
            _sharedList = pSharedList;

            /*_emiters.Add(new Emiter(new Vector3(50f, 100f, 50f), new Vector3(-0.5f, 0f, -0.5f), _sharedList));
             *
             * _emiters.Add(new Emiter(new Vector3(0f, 100f, 0f), new Vector3(1.0f, 5f, 1.0f), _sharedList));
             * _emiters.Add(new Emiter(new Vector3(100f, 100f, 0f), new Vector3(-1.0f, 5f, 1.0f), _sharedList));
             * _emiters.Add(new Emiter(new Vector3(0f, 100f, 100f), new Vector3(1.0f, 5f, -1.0f), _sharedList));
             * _emiters.Add(new Emiter(new Vector3(100f, 100f, 100f), new Vector3(-1.0f, 5f, -1.0f), _sharedList));
             *
             * _emiters.Add(new Emiter(new Vector3(-100f, 100f, -100f), new Vector3(1.0f, 5f, 1.0f), _sharedList));
             * _emiters.Add(new Emiter(new Vector3(-200f, 100f, -100f), new Vector3(1.0f, 5f, 1.0f), _sharedList));
             * _emiters.Add(new Emiter(new Vector3(-100f, 100f, -200f), new Vector3(1.0f, 5f, 1.0f), _sharedList));
             * _emiters.Add(new Emiter(new Vector3(-200f, 100f, -200f), new Vector3(1.0f, 5f, 1.0f), _sharedList));*/

            _emiters.Add(new LinearEmiter(new Vector3(-100f, 100f, -100f), new Vector3(1.0f, 5f, 1.0f), _sharedList));

            _camera         = pCamera;
            _graphicsDevice = pGraphicsDevice;
            _contentManager = pContentManager;

            _heightMap = heightMap;

            _drawEngine   = new DrawEngine(pGraphicsDevice, pContentManager, _sharedList);
            _physicEngine = new PhysicEngine(pGraphicsDevice, pContentManager, _sharedList, _heightMap);
        }
Exemple #5
0
 /// <summary>
 /// Termina TLSA.Engine.
 /// </summary>
 /// <remarks>Libera todos las instancias del motor y termina la ejecucion del juego.</remarks>
 public static void Terminate()
 {
     Scene.Dispose();
     GameStates.Dispose();
     PhysicEngine.Dispose();
     GameInstance.Exit();
     UnloadContent();
 }
Exemple #6
0
        /// <summary>
        /// Actualiza los estados del motor.
        /// </summary>
        /// <param name="gameTime"></param>
        /// <remarks>Actualiza los estados del mapa de input de la interfaz de usuario, el estado actual del juego y el contenido del grafo de escena.</remarks>
        public static void Update(GameTime gameTime)
        {
            GameTime = gameTime;

            UIInput.Update(gameTime);       // Actualizamos el input.
            GameStates.Update(gameTime);    // Actualizamos los estados.
            Messages.Process();             // Procesamos la cola de mensajes.
            PhysicEngine.Update(gameTime);  // Actualizamos las fisicas, si estan activas.
            Scene.Update(gameTime);         // Actualizamos las entidades de la escena.
        }
Exemple #7
0
        /// <summary>
        /// Dibuja la escena actual.
        /// </summary>
        /// <param name="gameTime">Gestiona el dibujado del render grafico, el estado actual del juego y el contenido del grafo de escena.</param>
        public static void Draw(GameTime gameTime)
        {
            GameTime = gameTime;

            Graphics.Begin();
            {
                GameStates.Draw(gameTime);
                Scene.Draw(gameTime);
                PhysicEngine.Draw(gameTime);
            }
            Graphics.End();
            fps.Update(gameTime);           // Actualizamos la cuenta de fotogramas por segundo al finalizar las operaciones de dibujado.
        }
    public void OnUpdate()
    {
        smc.Update();

        if (Input.GetHeld(0, "SnapGrid") != 0.0f && Input.GetTriggered(0, "2") != 0.0f) // Ctrl + 2 to kill player
        {
            Kill();
        }

        if (smc.GetCurrentState() != dead && !Common.isOptions)
        {
            // Follow the player around
            if (!mouseLookOnly)
            {
                gameObject.transform.SetPosition(playerBox.transform.position);
                gameObject.transform.Translate(0, 2.0f /*playerBox.transform.scale.y*/, 0);

                Vector3 camDir = gameObject.transform.GetForwardVector();
                camDir.Y = 0.0f;
                if (Vector3.Dot(camDir, camDir) > 0.0001f * 0.0001f)                 // if not a zero vector
                {
                    camDir.Normalize();
                    playerBox.transform.LookAt(playerBox.transform.position - camDir);
                }
            }
#if ZERO
            //select objects
            GameObject gobj = PhysicEngine.getInstance().RayCast3DWithTag(
                gameObject.transform.position,
                gameObject.transform.GetForwardVector(), 10.0f, "Raycast");
            if (gobj != null)
            {
                Invoke(gobj, "OnCursorOver", false);
                if (Input.GetTriggered(0, "Xbox_X") == 1.0f)
                {
                    Invoke(gobj, "OnActivate", false);
                }
            }
            if (lastSelectedObject != gobj)
            {
                if (lastSelectedObject != null)
                {
                    Invoke(lastSelectedObject, "OnCursorLeave", false);
                }
                lastSelectedObject = gobj;
            }
#endif
        }
    }
Exemple #9
0
        protected override void Update(GameTime dt)
        {
            PhysicEngine.BeforeUpdate();

            if (Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            for (var i = _entities.Count - 1; i >= 0; i--)
            {
                _entities[i].Update(dt);
            }

            base.Update(dt);

            PhysicEngine.AfterUpdate();
        }
    void State_Idle_Update()
    {
        if (Input.GetTriggered((char)0, "XboxCrouch") != 0)
        {
            //smc.SetState(crouch); // Check for Crouch State
            return;
        }
        if (CheckXBoxLeftThumbInput() && PhysicEngine.getInstance().IsActive())
        {
            // playerPhysics.rigidCom.SetAwake(true);
            smc.SetState(move); // Check for Move State
            return;
        }
        if (CheckForInputIntoJump()) // Check for Jump state
        {
            return;
        }

        // Manually friction

        /*Vector3 currVel = (Vector3)playerPhysics.rigidCom.Body().LinearVelocity();
         * float currVelY = currVel.Y;
         * currVel.Y = 0.0f;
         * if (currVel.LengthSquared() > 1.00f)
         * {
         *  currVel *= 0.5f;
         *  currVel.Y = currVelY; // Do not reduce the y velocity
         *  playerPhysics.rigidCom.Body().SetLinearVelocity(currVel);
         * }
         * else*/
        {
            //Logger.Log(playerPhysics.rigidCom.Body().LinearVelocity().ToString());

            Vector3 currVel = playerPhysics.rigidCom.Body().LinearVelocity();
            if (currVel.Y * currVel.Y < 0.01f)
            {
                currVel.Y = 0.0f;
                playerPhysics.rigidCom.Body().SetAwake(false);
            }
            currVel.X = 0.0f;
            currVel.Z = 0.0f;
            playerPhysics.rigidCom.Body().SetLinearVelocity(currVel);
        }
    }
    void State_Move_Update()
    {
        if (CheckXBoxLeftThumbInput() && PhysicEngine.getInstance().IsActive() && FrameController.DT() < (1.0f / 5.0f))
        {
            // based off of thumbstick magnitude, if keyboard use default 1
            currSpeed = speedNormal;
            float thresholdForSprint = speedSprint * 16.0f * sprintDeadPercent;
            if ((thumbstickMagnitude < sprintDeadPercent) &&
                playerPhysics.rigidCom.Body().LinearVelocity().LengthSq() < thresholdForSprint * thresholdForSprint)
            {
                // unlock sprint if there is no movement on this thumbstick
                sprintLocked = false;
            }
            if (sprintLocked || Input.GetValue((char)0, "LThumb") != 0 || // left thumbstick for xbox
                Input.GetHeld(0, "MoveFaster") != 0)                      // 'shift' for keyboard
            {
                currSpeed = speedSprint;
                //if (sprint_smc.GetCurrentState() != sprinting)
                //    sprint_smc.SetState(notsprinting);

                // lock the sprint
                sprintLocked = true;
            }

            ModifySpeed(currSpeed);
        }
        else
        {
            // sprint_smc.SetState(notsprinting);
            smc.SetState(idle);
            return;
        }

        if (CheckForInputIntoJump()) // check jump
        {
            return;
        }
        if (Input.GetTriggered((char)0, "XboxCrouch") != 0)
        {
            //smc.SetState(crouch); // Check for Crouch State
            return;
        }
    }
        private void GroundSnapButton_Click(object sender, RoutedEventArgs e)
        {
            EngineManagerViewModel view = (this.DataContext as EngineManagerViewModel);

            e.Handled = true;
            if (view.SelectedGameObjects.Count == 0)
            {
                return;
            }
            EditorSubsystemManaged.getInstance().QueueAction(() =>
            {
                foreach (GameObject g in view.SelectedGameObjects)
                {
                    RayCastResult result = PhysicEngine.getInstance().RayCast3D_Output(g.transform.position, Vector3.Down, 1000);
                    if (result.hit)
                    {
                        g.transform.SetPosition(result.intersection);
                    }
                }
            });
        }
    public void OnUpdate()
    {
        //smc.Update();

        float   mouseX = Input.GetMouseX(false);
        float   mouseY = Input.GetMouseY(false);
        Vector3 pos;

        if (mouseX > oculusWidth * .5f)
        {
            //mouseX -= oculusWidth * .5f;
            //mouseX *= 2.0f;
            pos = OculusVR.getInstance().GetEyePos(1);
        }
        else
        {
            pos = OculusVR.getInstance().GetEyePos(0);
            //mouseX *= 2.0f;
        }



        //GameObject gobj = PhysicEngine.getInstance().RayCast3DWithTag(pos,
        //                  gameObject.transform.GetForwardVector(), oculusCam, (int)mouseX,
        //                  (int)mouseY, 10000.0f, "Raycast");

        GameObject gobj = PhysicEngine.getInstance().RayCast3D(pos,
                                                               gameObject.transform.GetForwardVector(), gameCam, (int)mouseX,
                                                               (int)mouseY, 10000.0f);

        if (Input.GetTriggered(0, "MouseLClick") == 1.0f)
        {
            if (gobj != null)
            {
                CMeshRenderer mesh = gobj.RequireComponent <CMeshRenderer>();
                mesh.setEnabled(!mesh.isEnabled());
            }
        }
    }
    public void OnUpdate()
    {
        if (Input.GetTriggered(0, "Autoplay") > 0.0f)
        {
            FakeInput = !FakeInput;
            playerCamScript.FakeInput = FakeInput;
        }

        if (Input.GetTriggered(0, "F1") > 0.0f)
        {
            Map.LoadOnlyMap("Assets/Levels/Monster3.mocha");
            return;
        }

        if (!playerCamScript.GetIsDead())
        {
            smc.Update();
            // sprint_smc.Update();
        }
        else if (smc.GetCurrentState() != idle) // if dead, set to idle
        {
            smc.SetState(idle);
            playerPhysics.rigidCom.Body().SetLinearVelocity(Vector3.Zero); // Stop moving immediately
        }

        if (Input.GetTriggered(0, "1") == 1.0f) // Ctrl + 1 to lock mouse
        {
            if (Input.GetHeld(0, "SnapGrid") != 0.0f)
            {
                Input.SetMouseLock(!Input.GetLockMouse());
            }
        }

        //snap player to ground if there is one
        Vector3 ray_pos = gameObject.transform.position;
        //ray_pos.Y += 1.0f;
        RayCastResult output;

        output = PhysicEngine.getInstance().RayCast3D_Output(ray_pos, new Vector3(0, -1, 0), 1.5f);
        if (output.hit)
        {
            //we found the ground
            gameObject.transform.SetPositionY(output.intersection.y + 0.35f);

            Vector3 currVel = playerPhysics.rigidCom.Body().LinearVelocity();
            currVel.Y = 0.0f;

            playerPhysics.rigidCom.Body().SetLinearVelocity(currVel);
            //Logger.Log(output.go.GetName());
            //Logger.Log(output.intersection.y.ToString());
        }


        // Scale the height down when in crouch

        /*if (smc.GetCurrentState() != crouch && playerBox.transform.scale.y < 2.0f)
         * {
         *  playerBox.transform.scale.y = Math.Min(2.0f,
         *      playerBox.transform.scale.y + 1.0f / 0.6f * FrameController.DT());
         * }*/
    }
Exemple #15
0
        public void Tick()
        {
            if (!hasInit)
            {
                Init();
            }

            while (actionQueue.Count != 0)
            {
                EditorAction a = actionQueue.Dequeue();
                //Dispatcher.CurrentDispatcher.Invoke(a, DispatcherPriority.Normal);
                if (a == null)  //wait frame
                {
                    break;
                }
                a.a();
                if (a.mres != null)
                {
                    a.mres.Set();
                    a.mres.Dispose();
                }
            }

            if (!EditorSubsystem.getInstance().IsTesting())
            {
                //draw grid lines
                if (EngineCommandBindings.DrawGrid && EngineCommandBindings.GridSize > 0)
                {
                    Vector3 camPos = EditorSubsystem.getInstance().EditorCamera().gameObject.transform.GetGlobalPosition();
                    float   startX = camPos.X;
                    float   startY = camPos.Y;
                    float   startZ = camPos.Z;
                    startX = startX - (startX % EngineCommandBindings.GridSize);
                    if (startY > 0)
                    {
                        startY = startY - (startY % EngineCommandBindings.GridSize);
                    }
                    else
                    {
                        startY = startY + (startY % EngineCommandBindings.GridSize);
                    }
                    startZ = startZ - (startZ % EngineCommandBindings.GridSize);

                    for (int y = (int)startY; y <= (int)startY + EngineCommandBindings.gridExtent / 2; y += EngineCommandBindings.GridSize)
                    {
                        //for every y, draw an x,z plane
                        for (int x = (int)startX - EngineCommandBindings.gridExtent; x <= (int)startX + EngineCommandBindings.gridExtent; x += EngineCommandBindings.GridSize)
                        {
                            //draw z
                            Renderer.getInstance().DrawLinePerma(new Vector3(x, y, startZ - EngineCommandBindings.gridExtent), new Vector3(x, y, startZ + EngineCommandBindings.gridExtent),
                                                                 new Color(0.39f, 0.60f, 0.93f, .5f));
                            for (int z = (int)startZ - EngineCommandBindings.gridExtent; z <= (int)startZ + EngineCommandBindings.gridExtent; z += EngineCommandBindings.GridSize)
                            {
                                //draw x
                                Renderer.getInstance().DrawLinePerma(new Vector3(x - EngineCommandBindings.gridExtent, y, z), new Vector3(x + EngineCommandBindings.gridExtent, y, z),
                                                                     new Color(.4f, .4f, 0.0f, .3f));
                            }
                        }
                    }
                }

                //save occasionally
                autoSaveTimer += FrameController.DT();
                if (autoSaveTimer > 30.0f)
                {
                    QueueAction(() =>
                    {
                        try
                        {
                            StateSerializer ss = new StateSerializer();
                            ss.DoRecoverySave();
                        }
                        catch (Exception e)
                        {
                            Logger.Log("FAILED TO SAVE RECOVERY SAVE: " + e.Message);
                        }
                    });
                    autoSaveTimer = 0;
                }

                //occasionally check for available assets
                ++checkforChangedAssetsTimer;
                if (checkforChangedAssetsTimer > CHECKFORCHANGEDASSETS_TIME)
                {
                    AssetManager.getInstance().CheckForChangedAssets();
                    checkforChangedAssetsTimer = 0;
                }

                //do standard updates
                if (Input.GetIsMouseInWindow(true) && EngineManagerViewModel.instance.EngineEmbedHasVisibility && EngineManagerViewModel.instance._isFocused)
                {
                    //run sub systems
                    auto_builder.Update();

                    //set tooltips
                    mouseTooltipText.gameObject.transform.SetPosition(Input.GetMouseX(true) - Engine.getInstance().GetGameWnd().GetWindowWidth() * 0.5f,
                                                                      -(Input.GetMouseY(true) - Engine.getInstance().GetGameWnd().GetWindowHeight() * 0.5f), 0);
                    editorStatusText.gameObject.transform.SetPosition(-Engine.getInstance().GetGameWnd().GetWindowWidth() * 0.49f,
                                                                      Engine.getInstance().GetGameWnd().GetWindowHeight() * 0.44f, 0);
                    editorStatusText.mText = "--- STATUS ---\\n" +
                                             "Arrow Keys Snap Prec.: " + arrowSnapPrecision.ToString("0.0") +
                                             "\\nFPS: " + (1.0f / FrameController.DT()).ToString("0.0") +
                                             "\\n---------------";

                    CCamera editorCamera = EditorSubsystem.getInstance().EditorCamera();
                    if (Input.GetTriggered(0, "F2") == 1.0f)
                    {
                        //duplicate
                        EngineCommandBindings.CMD_DuplicateObjects();
                    }

                    //select objects naively
                    GameObject gobj = GameObject.From(PhysicEngine.getInstance().RayCast3D(editorCamera.gameObject.transform.position,
                                                                                           editorCamera.gameObject.transform.GetForwardVector(), editorCamera, Input.GetMouseX(true),
                                                                                           Input.GetMouseY(true), 10000.0f));
                    if (gobj != null && gobj.GetFlag("ArtWidget"))
                    {
                        //select widget's actual object
                        gobj = GameObject.From(EditorSubsystem.getInstance().widgetManager.GetAttachedObjFromWidgetObj(gobj));
                    }
                    if (gobj != null && !gobj.GetFlag("Widget"))
                    {
                        //show tooltip if mouse over
                        mouseTooltipText.mText = gobj.GetName();

                        //select if clicked on
                        if (Input.GetTriggered(0, "MouseLClick") == 1.0f)
                        {
                            Application.Current.Dispatcher.Invoke(new Action(() =>
                            {
                                try
                                {
                                    if (Input.GetHeld(0, "AdditiveMod") == 1.0f)
                                    {
                                        GameObjectSelectionManager.RequestAdditiveSelect(gobj);
                                    }
                                    else
                                    {
                                        GameObjectSelectionManager.RequestSelect(gobj);
                                    }
                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine("Consumed Error in Hierarchy: " + e.ToString());
                                }
                            }
                                                                             ));
                        }
                    }
                    else
                    {
                        mouseTooltipText.mText = "";
                    }

                    //rotate camera and move camera
                    float dt = FrameController.getInstance().GetDeltaTime();
                    if (Input.GetHeld(0, "MoveFaster") == 1.0f)
                    {
                        dt *= 3;
                    }
                    Vector3 velocityThisFrame = new Vector3();
                    if (Input.GetHeld(0, "MouseRCLick") == 1.0f)
                    {
                        float dx = 0.25f * (Input.GetMouseDeltaX() * (3.14f / 180.0f));
                        float dy = 0.25f * (Input.GetMouseDeltaY() * (3.14f / 180.0f));
                        editorCamera.Pitch(dy);
                        editorCamera.RotateY(dx);

                        float val = Input.GetValue(0, "up");
                        velocityThisFrame.Z += val;
                        val = Input.GetValue(0, "right");
                        velocityThisFrame.X += val;
                        val = Input.GetValue(0, "down");
                        velocityThisFrame.Z -= val;
                        val = Input.GetValue(0, "left");
                        velocityThisFrame.X -= val;
                        cameraVelocity      += velocityThisFrame;
                        //cameraVelocity = cameraVelocity.Add(velocityThisFrame);
                        //MathHelper.Clamp
                        cameraVelocity.X = MathHelper.Clamp(cameraVelocity.X, -6, 6);
                        cameraVelocity.Y = MathHelper.Clamp(cameraVelocity.Y, -6, 6);
                        cameraVelocity.Z = MathHelper.Clamp(cameraVelocity.Z, -6, 6);
                        //cameraVelocity.Clamp(-6.0f, 6.0f);
                    }
                    if (velocityThisFrame.X == 0)
                    {
                        cameraVelocity.X *= 0.9f;
                    }
                    if (velocityThisFrame.Z == 0)
                    {
                        cameraVelocity.Z *= 0.9f;
                    }
                    editorCamera.Walk(cameraVelocity.Z * dt);
                    editorCamera.Strafe(cameraVelocity.X * dt);

                    //look at
                    if (_lookTimer != 0)
                    {
                        _lookTimer += FrameController.DT();
                    }
                    if (_lookTimer > 1.3f)
                    {
                        _lookTimer = 0;
                    }
                    if (Input.GetTriggered(0, "LookAt") == 1.0f)
                    {
                        if (EngineManagerViewModel.instance.SelectedGameObjects.Count == 0)
                        {
                            return;
                        }
                        GameObject selobj = EngineManagerViewModel.instance.SelectedGameObjects[0];
                        if (_lookTimer == 0)
                        {
                            _lookTimer = 1; //force the setup
                            if (selobj != null)
                            {
                                editorCamera.gameObject.transform.LookAt(selobj.transform.position);
                            }
                        }
                        else
                        {
                            editorCamera.gameObject.transform.LookAt(selobj.transform.position);
                            Vector3 forw = editorCamera.gameObject.transform.GetForwardVector();
                            editorCamera.gameObject.transform.SetPosition(selobj.transform.position - (forw * 8));
                            _lookTimer = 0;
                        }
                    }

                    //arrow keys moving
                    if (Input.GetTriggered(0, "Add") > 0)
                    {
                        arrowSnapPrecision += 0.1f;
                    }
                    if (Input.GetTriggered(0, "Sub") > 0)
                    {
                        arrowSnapPrecision -= 0.1f;
                    }
                    if (Input.GetTriggered(0, "ArrowUp") > 0)
                    {
                        foreach (var selobj in EngineManagerViewModel.instance.SelectedGameObjects)
                        {
                            selobj.transform.SetPositionZ(selobj.transform.position.z + arrowSnapPrecision);
                        }
                    }
                    if (Input.GetTriggered(0, "ArrowDown") > 0)
                    {
                        foreach (var selobj in EngineManagerViewModel.instance.SelectedGameObjects)
                        {
                            selobj.transform.SetPositionZ(selobj.transform.position.z - arrowSnapPrecision);
                        }
                    }
                    if (Input.GetTriggered(0, "ArrowRight") > 0)
                    {
                        foreach (var selobj in EngineManagerViewModel.instance.SelectedGameObjects)
                        {
                            selobj.transform.SetPositionX(selobj.transform.position.x + arrowSnapPrecision);
                        }
                    }
                    if (Input.GetTriggered(0, "ArrowLeft") > 0)
                    {
                        foreach (var selobj in EngineManagerViewModel.instance.SelectedGameObjects)
                        {
                            selobj.transform.SetPositionX(selobj.transform.position.x - arrowSnapPrecision);
                        }
                    }
                }
            }
        }
    public void OnUpdate()
    {
        float dt = FrameController.DT();

        Vector3 turretToPlayer = (Vector3)player.transform.position - (Vector3)gameObject.transform.position;

        turretToPlayer.Y = 0.0f;
        float turretToPlayerSq = Vector3.Dot(turretToPlayer, turretToPlayer);

        if (turretToPlayerSq > radiusOfFire * radiusOfFire)
        {
            return; // Do not update if player is too far away
        }
        if (currentState == 0)
        {
            timerToStayOnGuard -= dt;

            if (!playerCamScript.GetIsDead()) // Do not need to update if player is already dead
            {
                // Check if player is within sights, and not hiding behind a wall
                Vector3 turretDir = gameObject.transform.GetForwardVector();
                float   dotPdt    = Vector3.Dot(turretToPlayer, turretDir);
                // dotPdt^2 = lengthSq * cos(angle)^2. The smaller the angle, the larger the dot pdt
                if ((dotPdt > 0.0f) &&
                    (dotPdt * dotPdt >= cosAngleArcOfFire * cosAngleArcOfFire * turretToPlayerSq))
                {
                    turretToPlayer.Normalize();
                    Vector3 turretPos = (Vector3)gameObject.transform.position;
                    turretPos.Y = 1.0f;
                    // Raycast towards player and check if he is behind a wall
                    GameObject wall = PhysicEngine.getInstance().RayCast3DWithTag(
                        turretPos, turretToPlayer, 10000.0f, "TurretWall");
                    if (wall == null)
                    {
                        mSound.PlayIndependentEvent("Turret_LaserShot.vente", false, 1);
                        playerCamScript.Kill();
                    }
                }
            }

            if (timerToStayOnGuard <= 0.0f)
            {
                timerToRotate = TIME_TO_ROTATE; // Reset the timer
                currentState  = 1;              // Start rotating
                // mSound.Play("Turret_Targetting.vente"); //Turret_Rotate.vente");

                startAngle = gameObject.transform.rotation.Angles.y; // Save current angle
                // Select the angle to rotate to
                currAngleIndex = (currAngleIndex + 1 >= angleList.Count) ? 0 : currAngleIndex + 1;
            }
        }
        else // rotating
        {
            timerToRotate -= dt;
            // Tween the turret's rotation to target angle
            gameObject.transform.rotation.Angles.y +=
                (angleList[currAngleIndex] - startAngle) / TIME_TO_ROTATE * dt;

            if (timerToRotate <= 0.0f)
            {
                gameObject.transform.rotation.Angles.y = angleList[currAngleIndex];

                currentState       = 0; // Start rotating
                timerToStayOnGuard = TIME_TO_ON_GUARD;
            }
        }
    }
Exemple #17
0
    public void UpdateMouseInputs()
    {
        float dt = FrameController.DT();

        UpdateMousePosition();

        if (isPaperHeld || (rcCarScript != null && rcCarScript.isMouseHeld)) // Lock input until paper is put down
        {
            if (Input.GetTriggered(0, "MouseLClick") == 1.0f)
            {
                if (rcCarScript != null && rcCarScript.isMouseHeld)
                {
                    rcCarScript.isMouseHeld = false;
                }
                else
                {
                    pickedInteractable.OnTriggered();
                    isPaperHeld = false;
                }
            }
        }
        else
        {
            // Apply raycast of ocuPlayer's mouse to find any interactable object every frame (when mouse is not clicked)
            Vector3 ocuCamToMouse = (Vector3)gameObject.transform.position - (Vector3)ocuCam.transform.position;

            // Quick Hack to fix offset
            // Vector3 xAxis = ocuCam.transform.GetRightVector();
            // Vector3 yAxis = ocuCam.transform.GetUpVector();
            // ocuCamToMouse += xAxis * 0.055f;
            // ocuCamToMouse += yAxis * 0.12f;

            ocuCamToMouse.Normalize();
            if (Input.GetHeld(0, "MouseLClick") == 0.0f)
            {
                pickedObject = PhysicEngine.getInstance().RayCast3DWithTag(ocuCam.transform.position, ocuCamToMouse, 10000.0f, Common.tagForInteractables);

                pickedInteractable = null;
                // Check if mouse is over a valid camInMap
                if (pickedObject != null)
                {
                    pickedInteractable = GetScriptClass <InteractableObjectBaseClass>(pickedObject, false);
                    if (pickedInteractable != null)
                    {
                        pickedInteractable.OnMouseOver();

// The logic for ray casting through the camera screen into world objects
                        CameraScreen pickedScreen = pickedInteractable as CameraScreen;
                        if (pickedScreen != null && camScript.gameObjectParentedTo != null &&
                            camScript.gameObjectParentedTo != Common.GetNoiseStatic())
                        {
                            CTransform screenTrans = pickedScreen.gameObject.transform;
                            Vector3    screenPos   = screenTrans.position;
                            Vector3    rightVect   = screenTrans.GetRightVector();
                            Vector3    upVect      = screenTrans.GetUpVector();
                            Vector3    normal      = screenTrans.GetForwardVector();
                            Vector3    screenScale = screenTrans.GetScale();

                            Vector3 pointOnScreen = new Vector3();
                            MMath.RayToPlaneIntersection(normal, screenPos, ocuCamToMouse, ocuCam.transform.position, ref pointOnScreen);
                            Vector3 screenToPoint = pointOnScreen - screenPos;
                            float   xAmt          = -Vector3.Dot(screenToPoint, rightVect); // the camera screen's x is negative (to the left)
                            float   yAmt          = Vector3.Dot(screenToPoint, upVect);
                            float   xScaleOfModel = screenScale.X * 0.5f;                   // Reflect actual camera screen width in pixel units (quad is just nice 1 scale == 1 unit)
                            float   yScaleOfModel = screenScale.Y * 0.5f;
                            xAmt /= xScaleOfModel;                                          // [-0.5, 0.5]
                            yAmt /= yScaleOfModel;

                            float nearZ        = ocuCameraScreen.GetNearZ();
                            float screenWidth  = ocuCameraScreen.GetNearWindowWidth();
                            float screenHeight = ocuCameraScreen.GetNearWindowHeight();
                            xAmt *= screenWidth; // [-0.5, 0.5] -> [-w/2, w/2]
                            yAmt *= screenHeight;
                            // Use the x, y and z values through the actual camera look at directions
                            Vector3 innerCameraVect = xAmt * (Vector3)camScript.gameObjectParentedTo.transform.GetRightVector() +
                                                      yAmt * (Vector3)camScript.gameObjectParentedTo.transform.GetUpVector() +
                                                      nearZ * (Vector3)camScript.gameObjectParentedTo.transform.GetForwardVector();
                            innerCameraVect.Normalize();

                            Vector3 cameraPos = camScript.gameObjectParentedTo.transform.position +
                                                0.5f * innerCameraVect; // Move in front, so it does not ray cast to the screen itself

                            GameObject cameraInteractable = PhysicEngine.getInstance().RayCast3DWithTag(cameraPos, innerCameraVect, 10000.0f, "camInteract");
                            if (cameraInteractable != null)
                            {
                                // If there is an interactable objec through the screen, check if there is ANY object infront of it
                                GameObject nearestObj = PhysicEngine.getInstance().RayCast3D(cameraPos, innerCameraVect, 10000.0f);
                                if (nearestObj == cameraInteractable)
                                {
                                    pickedInteractable = GetScriptClass <InteractableObjectBaseClass>(cameraInteractable, false);
                                    if (pickedInteractable != null)
                                    {
                                        pickedInteractable.OnMouseOver();
                                    }
                                }
                                else // There is something blocking
                                {
                                    Logger.Log("nearer Obj found: " + nearestObj.GetName());
                                }
                            }
                        }
                    }
                }
                // If prev interactable changed or is lost, call it's mouseOverOff
                if (prevPickedInteractable != pickedInteractable)
                {
                    if (prevPickedInteractable != null)
                    {
                        prevPickedInteractable.OnMouseOverOff();
                        if (Input.GetReleased(0, "MouseLClick") == 1.0f)
                        {
                            prevPickedInteractable.OnReleased();
                        }
                    }
                    prevPickedInteractable = pickedInteractable;
                }
            } // End of if not mouse held

            if (Input.GetTriggered(0, "MouseLClick") == 1.0f)
            {
                if (pickedInteractable != null)
                {
                    pickedInteractable.OnTriggered();

                    // If picked up paper, lock the input
                    Paper pickedPaper = pickedInteractable as Paper;
                    if (pickedPaper != null)
                    {
                        if (pickedPaper.GetIsHeldUp())
                        {
                            isPaperHeld = true;
                        }
                    }
                }
            }
            if (Input.GetHeld(0, "MouseLClick") == 1.0f)
            {
                if (pickedInteractable != null)
                {
                    pickedInteractable.OnHeldMouse(mCurrMouseMovement.X, mCurrMouseMovement.Y);
                }
            }
            if (Input.GetReleased(0, "MouseLClick") == 1.0f)
            {
                if (pickedInteractable != null)
                {
                    pickedInteractable.OnReleased();
                }
            }
        }
    }
Exemple #18
0
    public void OnUpdate()
    {
        // Vector3 camPos = playerCamera.transform.position;
        // Vector3 camDir = (Vector3)playerCamera.transform.GetForwardVector();
        // gameObject.transform.SetPosition(camDir + camPos);
        // gameObject.transform.LookAt(camPos); // have the cursor look back at camera

#if ZERO
        MouseVec = Cursor.transform.GetGlobalPosition().Sub(ocuCam.gameObject.transform.position);
        MouseVec.Normalize();

        gameObject.transform.SetPositionX(MMath.Clamp(gameObject.transform.position.x, -1.54f, 2.5f));
        gameObject.transform.SetPositionY(MMath.Clamp(gameObject.transform.position.y, 0.89f, 2.5f));


        //Renderer.getInstance().DrawLine(MouseVec.Add(gameObject.transform.position), gameObject.transform.position, col);

        //Cursor.LookAt(gameObject);

        //float angle = zAxis.Dot(MouseVec) / MouseLength;

        //if(Math.Abs(Math.Acos(angle)) <= .3f)
        //{
        gameObject.transform.Translate(Input.GetMouseDeltaX() * FrameController.DT() * .025f,
                                       -Input.GetMouseDeltaY() * FrameController.DT() * .025f, 0);
        //}

        GameObject gobj = PhysicEngine.getInstance().RayCast3DWithTag(ocuCam.gameObject.transform.position,
                                                                      MouseVec, 10000.0f, "Raycast");

        if (Input.GetHeld(0, "MouseRClick") == 1.0f)
        {
            if (gobj != null)
            {
                Invoke(gobj, "OnMouseHeld", false);
            }
        }

        if (Input.GetReleased(0, "MouseLClick") == 1.0f)
        {
            //un click paper if currently there is one up
            if (PaperViewer.isPaperSelected)
            {
                paperViewer.TransitionDown();
                return;
            }

            if (gobj != null)
            {
                if (gobj.GetID() == PickCam1.GetID())
                {
                    MapScreen.mMaterial.SetTexture("map_lvl1_cam1.png");

                    SurvCam.FoVmodifier(1.5f);
                    SurvCam.gameObject.transform.SetPosition(-4.58f, 3.38f, -5.06f);
                    SurvCam.gameObject.transform.rotation.Angles.x = .62f;
                    SurvCam.gameObject.transform.rotation.Angles.y = .85f;
                    SurvCam.gameObject.transform.rotation.Angles.z = -.47f;
                }

                else if (gobj.GetID() == PickCam2.GetID())
                {
                    MapScreen.mMaterial.SetTexture("map_lvl1_cam2.png");

                    SurvCam.FoVmodifier(1.7f);
                    SurvCam.gameObject.transform.SetPosition(-17.05f, 7.48f, 47.15f);
                    SurvCam.gameObject.transform.rotation.Angles.x = .48f;
                    SurvCam.gameObject.transform.rotation.Angles.y = .80f;
                    SurvCam.gameObject.transform.rotation.Angles.z = -.31f;
                }

                else if (gobj.GetID() == PickCam3.GetID())
                {
                    MapScreen.mMaterial.SetTexture("map_lvl1_cam3.png");

                    SurvCam.FoVmodifier(1.5f);
                    SurvCam.gameObject.transform.SetPosition(-3.65f, 5.94f, 88.70f);
                    SurvCam.gameObject.transform.rotation.Angles.x = .54f;
                    SurvCam.gameObject.transform.rotation.Angles.y = .58f;
                    SurvCam.gameObject.transform.rotation.Angles.z = -.27f;
                }

                else if (gobj.GetID() == PickCam4.GetID())
                {
                    MapScreen.mMaterial.SetTexture("map_lvl2_cam1.png");

                    SurvCam.FoVmodifier(1.7f);
                    SurvCam.gameObject.transform.SetPosition(-31.73f, 45.63f, 144.12f);
                    SurvCam.gameObject.transform.rotation.Angles.x = -.53f;
                    SurvCam.gameObject.transform.rotation.Angles.y = 2.49f;
                    SurvCam.gameObject.transform.rotation.Angles.z = .24f;
                }

                else if (gobj.GetID() == PickCam5.GetID())
                {
                    MapScreen.mMaterial.SetTexture("map_lvl2_cam3.png");

                    SurvCam.FoVmodifier(1.4f);
                    SurvCam.gameObject.transform.SetPosition(-42.57f, 41.39f, 159.66f);
                    SurvCam.gameObject.transform.rotation.Angles.x = -.46f;
                    SurvCam.gameObject.transform.rotation.Angles.y = 2.59f;
                    SurvCam.gameObject.transform.rotation.Angles.z = .36f;
                }

                else if (gobj.GetID() == PickCam6.GetID())
                {
                    MapScreen.mMaterial.SetTexture("map_lvl2_cam2.png");

                    SurvCam.FoVmodifier(1.2f);
                    SurvCam.gameObject.transform.SetPosition(2.48f, 41.47f, 159.75f);
                    SurvCam.gameObject.transform.rotation.Angles.x = -.66f;
                    SurvCam.gameObject.transform.rotation.Angles.y = 4.03f;
                    SurvCam.gameObject.transform.rotation.Angles.z = -.51f;
                }

                else
                {
                    //set paper if it's a paper
                    if (gobj.GetFlag("Paper"))
                    {
                        GetScript <Paper>(gobj).Set();
                    }
                    else
                    {
                        Invoke(gobj, "OnClicked", false);
                    }
                }
            }
        }
#endif
    }
Exemple #19
0
    public void OnUpdate()
    {
        if (!foundCar)
        {
            rcCar = Common.GetRCCar();
            if (rcCar != null)
                InitCar();
            return;
        }

        if (!isMouseHeld || FrameController.DT() > (1.0f/5.0f)) // When mouse is not held down
        {
            // Reset the 'center' of the mouse position when first clicked on RC Car Controller
            SetMovementAmount(new Vector2(0.0f, 0.0f));

            // Manually slow down the car
            Vector3 currVel = (Vector3)carPhysics.rigidCom.Body().LinearVelocity();
            if (currVel.LengthSquared() > 1.00f)
            {
                currVel *= 0.5f;
                carPhysics.rigidCom.Body().SetLinearVelocity(currVel);
            }
            else
            {
                carPhysics.rigidCom.Body().SetLinearVelocity(Vector3.Zero);
            }
        }
        else
        {
            Vector2 mouseMove = surveillanceMouseScript.mCurrMouseMovement;
            UpdateOnMouseMove(mouseMove.X, mouseMove.Y);

            float dt = FrameController.DT();

            // Ensure some dead zone
            if (Math.Abs(centerPos.Y) > mouseDeadZone.Y)
            {
                Vector3 forward = rcCar.transform.GetForwardVector(); // y mouse means accel or deccel

                Vector3 currVel = forward * quadraticMovement.Y; // Make it a quadratic curve for slow speeds
                currVel.Y = 0.0f;
                carPhysics.rigidCom.Body().SetLinearVelocity(currVel);
                //Logger.Log("vel: " + currVel.ToString());
            }
            if (Math.Abs(centerPos.X) > mouseDeadZone.X)
            {
                currYRotation += MathHelper.ToDegrees(quadraticMovement.X * dt); // rotate by mouse x movement
                if (currYRotation < 0.0f) // Clamp rotation angle to [0, 360]
                    currYRotation += 360.0f;
                else if (currYRotation > 360.0f)
                    currYRotation -= 360.0f;

                rcCar.transform.Rotate(0.0f, currYRotation, 0.0f);
                //Logger.Log("rot angle: " + rcCar.transform.rotation.Angles.y.ToString());
            }
        } // End of if mouse is held down
        
        // isMouseHeld = false; // Set to false again, to be set back to true if OnHeldMouse

        rcCar.transform.Rotate(0.0f, currYRotation, 0.0f); // Prevent it from turning on the stop in idle

        // Update the model joystick's rotation based on unitMovement
        Vector3 currRotationAngle = new Vector3();
        currRotationAngle.X = MathHelper.ToDegrees(unitMovement.Y * joystickRotationLimit); // [-1,1] -> [-limit, limit]
        currRotationAngle.Z = MathHelper.ToDegrees(-unitMovement.X * joystickRotationLimit);
        gameObject.transform.Rotate(currRotationAngle);
        //gameObject.transform.rotation.Angles.x = unitMovement.Y * joystickRotationLimit; // [-1,1] -> [-limit, limit]
        //gameObject.transform.rotation.Angles.z = -unitMovement.X * joystickRotationLimit;

        //snap player to ground if there is one
        Vector3 ray_pos = rcCar.transform.position;
        //ray_pos.Y += 1.0f;
        RayCastResult output;
        output = PhysicEngine.getInstance().RayCast3D_Output(ray_pos, new Vector3(0, -1, 0), 1.0f);
        if (output.hit)
        {
            //we found the ground
            rcCar.transform.SetPositionY(output.intersection.y + 0.35f);

            Vector3 currVel = rcCarRigidCom.Body().LinearVelocity();
            currVel.Y = 0.0f;

            rcCarRigidCom.Body().SetLinearVelocity(currVel);
            //Logger.Log(output.go.GetName());
            //Logger.Log(output.intersection.y.ToString());
        }
    }
Exemple #20
0
        static void Main(string[] args)
        {
            if (SDL.SDL_Init(SDL.SDL_INIT_VIDEO) < 0)
            {
                Console.WriteLine("Unable to initiale SDL. Error: {0}", SDL.SDL_GetError());
                return;
            }

            var window = IntPtr.Zero;

            window = SDL.SDL_CreateWindow("Pippo maniack",
                                          SDL.SDL_WINDOWPOS_CENTERED,
                                          SDL.SDL_WINDOWPOS_CENTERED,
                                          1020,
                                          800,
                                          SDL.SDL_WindowFlags.SDL_WINDOW_RESIZABLE);

            if (window == IntPtr.Zero)
            {
                Console.Write("Unable to create a window. Error = {0}", SDL.SDL_GetError());
                return;
            }

            var renderer = IntPtr.Zero;

            renderer = SDL.SDL_CreateRenderer(window, -1, 0);
            if (renderer != IntPtr.Zero)
            {
                //SDL.SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
                Console.Write("Renderer created!");
            }

            //SDL.SDL_Delay(5000);

            PhysicEngine engine = new PhysicEngine();

            SDL.SDL_Rect rect;
            rect.h = 50;
            rect.w = 50;
            rect.x = 500;
            rect.y = 300;

            Coordinate x = new Coordinate(500.0f, 300.0f);
            Coordinate v = new Coordinate(0.0f, 0.0f);
            Coordinate a = new Coordinate(0.0f, 0.0f);

            Coordinate[] tens = new Coordinate[] { x, v, a };

            float  dt = 0.01f;
            float  f  = 20.0f;
            double ticks;

            SDL.SDL_Event e;
            bool          quit = false;

            while (!quit)
            {
                tens[2].x = 0.0f;
                tens[2].y = 0.0f;

                // events --------------------------------------------------------
                if (SDL.SDL_PollEvent(out e) != 0)
                {
                    Console.WriteLine(e.type);

                    switch (e.type)
                    {
                    case SDL.SDL_EventType.SDL_QUIT:
                        quit = true;
                        break;

                    case SDL.SDL_EventType.SDL_KEYDOWN:
                        switch (e.key.keysym.sym)
                        {
                        case SDL.SDL_Keycode.SDLK_q:
                            quit = true;
                            break;

                        case SDL.SDL_Keycode.SDLK_w:
                            tens[2].y = -f;
                            break;

                        case SDL.SDL_Keycode.SDLK_a:
                            tens[2].x = -f;
                            break;

                        case SDL.SDL_Keycode.SDLK_s:
                            tens[2].y = f;
                            break;

                        case SDL.SDL_Keycode.SDLK_d:
                            tens[2].x = f;
                            break;
                        }
                        break;
                    }
                }

                // update --------------------------------------------------------
                ticks = SDL.SDL_GetTicks();
                Console.WriteLine(ticks);

                tens = engine.Step(tens, dt);

                rect.x = (int)tens[0].x;
                rect.y = (int)tens[0].y;

                int line_vx1 = rect.x;
                int line_vy1 = rect.y;
                int line_vx2 = line_vx1 + (int)tens[1].x;
                int line_vy2 = line_vy1 + (int)tens[1].y;

                // borders
                if (tens[0].x >= 1020 || tens[0].x <= 0)
                {
                    tens[1].x = -tens[1].x;
                }
                if (tens[0].y >= 800 || tens[0].y <= 0)
                {
                    tens[1].y = -tens[1].y;
                }


                // render --------------------------------------------------------
                SDL.SDL_SetRenderDrawColor(renderer, 255, 200, 0, 255); // orange
                SDL.SDL_RenderClear(renderer);

                SDL.SDL_SetRenderDrawColor(renderer, 0, 150, 255, 255);   // azzurro
                SDL.SDL_RenderFillRect(renderer, ref rect);

                SDL.SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);   // rosso
                SDL.SDL_RenderDrawLine(renderer, line_vx1, line_vy1, line_vx2, line_vy2);

                SDL.SDL_RenderPresent(renderer);

                //SDL.SDL_Delay(50);
            }

            SDL.SDL_DestroyWindow(window);
            SDL.SDL_DestroyRenderer(renderer);

            SDL.SDL_Quit();
        }