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); }
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); }
/// <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(); }
/// <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. }
/// <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 } }
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()); * }*/ }
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; } } }
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(); } } } }
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 }
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()); } }
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(); }