//============== Awake void Awake() { //--------------------------------------------------------------------------------------------------------- Initialize values LocalSensitivity = System.Windows.Forms.SystemInformation.MouseSpeed; StoredSensitivity = System.Windows.Forms.SystemInformation.MouseSpeed; Self = this; Positions = new Point[0]; WindowOffset = new Vector2(System.Windows.Forms.Cursor.Position.X - Input.mousePosition.x, System.Windows.Forms.Cursor.Position.Y - (UnityEngine.Screen.height - Input.mousePosition.y)); if (CrossSceneSupport) { DontDestroyOnLoad(transform.gameObject); } }
private void Update() { MoveAndLook(); //DEBUG CODE /*if (Input.GetKeyDown(KeyCode.Alpha9)) { * foreach (AssetInventorySlot s in inventory) { * s.asset = C.c.data.assetData[Random.Range(0, C.c.data.assetData.Count)]; * s.amount = 10; * } * pui.invRender.UpdateInventoryRender(); * }*/ //virtual mouse with controller if (Cursor.lockState == CursorLockMode.None) { HardwareCursor.SetPosition(HardwareCursor.GetPosition() + new Vector2(InputManager.MovementInput(playerId).x * 600 * Time.deltaTime, -InputManager.MovementInput(playerId).y * 600 * Time.deltaTime)); if (InputManager.JumpInput(playerId)) { HardwareCursor.LeftClick(); } } //deliveries if (deliveryTimer > 0) { deliveryTimer -= Time.deltaTime; if (deliveryTimer <= 0) { C.c.StartCoroutine(C.c.Delivery()); if (upcomingDeliveries.Count > 0) { deliveryTimer = 60 * 3; } } } //hover assets for interaction assetHovering = null; lookingAtNpc = null; RaycastHit hit; if (!buildMode && usingAsset == null) { if (Physics.Raycast(cam.transform.position + cam.transform.forward * .6f, cam.transform.forward, out hit, 2f)) { if (hit.transform.CompareTag("Asset")) { var asset = hit.transform.parent.GetComponent <Asset>(); if (asset) { assetHovering = asset; asset.Hovering(this); } } else if (hit.transform.CompareTag("NPC")) { var npc = hit.transform.GetComponent <NPC>(); if (npc) { lookingAtNpc = npc; StartCoroutine(npc.InteractWithAI()); } } else if (hit.transform.GetComponent <Interactable>()) { if (InputManager.InteractInput(playerId)) { hit.transform.GetComponent <Interactable>().Use(); } } } } //Interacting with NPC if (interactingWithNpc) { rb.velocity = Vector3.zero; cam.LookAt(interactingWithNpc.interactPanel.transform); } //build mode BuildMode(); //use asset if (InputManager.InteractInput(playerId) && !isSleeping && !teleporting) { if (assetHovering) { if (usingAsset) { StopUsingAsset(); } assetHovering.Use(); } else if (usingAsset) { StopUsingAsset(); } else if (nearbyPortal) { if (!teleporting && !isSleeping) { StartCoroutine(TeleportSequence(nearbyPortal)); } } else { if (Physics.Raycast(cam.transform.position + cam.transform.forward * .6f, cam.transform.forward, out hit, 2f)) { if (hit.transform.GetComponent <Money>()) { float moneyValue = Mathf.Max(1, Mathf.Round(hit.transform.GetComponent <Money>().value)); money += moneyValue; if (hit.transform.GetComponent <Money>().isTip) { pui.CreateInfoPopup("+ $" + moneyValue + " (tip)", C.c.data.colors[0]); } else { pui.CreateInfoPopup("+ $" + Mathf.Round(moneyValue), C.c.data.colors[0]); } Destroy(hit.transform.gameObject); } else if (hit.transform.name == "AssetBeingSoldModel") { var npcAtRegister = C.c.currentShop.npcCheckoutLine[0]; AssetData assetBeingSold = npcAtRegister.inventory[0].asset; var chargeAmount = Mathf.Max(1f, Mathf.Round(assetBeingSold.currentValue)); if (assetBeingSold == C.c.data.bill) { chargeAmount = Mathf.Max(1f, Mathf.Round(npcAtRegister.owedAmount)); } var m = C.c.SpawnMoney(C.c.currentShop.register.moneySpawnPoint.position, chargeAmount); if (assetBeingSold == C.c.data.bill) { npcAtRegister.owedAmount = 0; var tip = Mathf.Round(2f - npcAtRegister.timeSpentWaiting / 30); if (tip > 0) { var tipMoney = C.c.SpawnMoney(C.c.currentShop.register.moneySpawnPoint.position, tip - Random.Range(0, .5f)); tipMoney.isTip = true; } } if (--npcAtRegister.inventory[0].amount == 0) { npcAtRegister.inventory.Add(new AssetInventorySlot()); npcAtRegister.inventory.RemoveAt(0); } if (npcAtRegister.inventory[0].amount == 0) { npcAtRegister.GoHome(); C.c.currentShop.npcCheckoutLine.RemoveAt(0); foreach (NPC n in C.c.currentShop.npcCheckoutLine) { n.UpdateInWaitingLine(); } } Destroy(hit.transform.gameObject); } } } } //Inventory if (InputManager.ToggleInventory(playerId) && !buildMode) { ToggleInventory(); } //use asset secondary use if (InputManager.SecondaryInteractInput(playerId)) { if (assetHovering) { if (usingAsset) { StopUsingAsset(); } assetHovering.UseSecondary(); } else if (usingAsset) { StopUsingAsset(); } } //put asset on sale if (InputManager.SecondaryInteractInput(playerId)) { if (assetHovering && assetHovering.playerUsing == null) { assetHovering.ToggleSelling(); } } //pick up asset if (InputManager.PickUpInput(playerId)) { if (assetHovering && !assetHovering.forceCantPickUp) { if (assetHovering.useTag == "Storage") { var stor = assetHovering.model.GetComponent <Storage>(); if (stor) { if (!stor.IsEmpty()) { stor.asset.Use(); return; } } } else if (assetHovering.useTag == "RestaurantTable") { var diningTable = assetHovering.model.GetComponent <DiningTable>(); if (diningTable) { if (diningTable.isBeingUsed()) { return; } else { diningTable.PickUpTable(); } } } if (assetHovering.selling) { assetHovering.ToggleSelling(); } var added = AddAssetToInventory(assetHovering.data); if (added) { Destroy(assetHovering.gameObject); } pui.invRender.UpdateInventoryRender(); } } //Cycle active asset if (InputManager.CycleHotbar(playerId) != 0 && usingAsset == null) { inventoryCurrentIndex += (int)InputManager.CycleHotbar(playerId); if (inventoryCurrentIndex < 0) { inventoryCurrentIndex = 0; } if (inventoryCurrentIndex >= 8) { inventoryCurrentIndex = 7; } if (currentBuildAsset) { Destroy(currentBuildAsset.gameObject); } pui.invRender.UpdateInventoryRender(); } }