Implement item actions, resolve #13
This commit is contained in:
parent
c16988d3fe
commit
f231252275
@ -507,6 +507,7 @@ MonoBehaviour:
|
||||
MovementSpeed: 5
|
||||
InteractionDistance: 2
|
||||
CharacterController: {fileID: 143753897266899886}
|
||||
Inventory: {fileID: 114934786006823366}
|
||||
Head: {fileID: 4900355877646882}
|
||||
--- !u!114 &114629890146295716
|
||||
MonoBehaviour:
|
||||
|
@ -5067,6 +5067,7 @@ MonoBehaviour:
|
||||
MovementSpeed: 5
|
||||
InteractionDistance: 2
|
||||
CharacterController: {fileID: 143869468979164672}
|
||||
Inventory: {fileID: 114702404122310282}
|
||||
Head: {fileID: 4883048021777868}
|
||||
--- !u!114 &114599527678381310
|
||||
MonoBehaviour:
|
||||
|
@ -6,6 +6,7 @@ using Cyber.Networking;
|
||||
using Cyber.Networking.Messages;
|
||||
using Cyber.Entities;
|
||||
using Cyber.Util;
|
||||
using Cyber.Items;
|
||||
|
||||
namespace Cyber.Controls {
|
||||
|
||||
@ -49,15 +50,18 @@ namespace Cyber.Controls {
|
||||
}
|
||||
|
||||
// Interactions
|
||||
bool Interacted = false;
|
||||
GameObject LookedAtObject = CameraUtil.GetLookedAtGameObject(Camera, Character.InteractionDistance);
|
||||
if (LookedAtObject != null) {
|
||||
Interactable LookingAt = LookedAtObject.GetComponent<Interactable>();
|
||||
if (LookingAt != null && (LookingAt.transform.position - Character.GetPosition()).magnitude < Character.InteractionDistance) {
|
||||
if (Input.GetButtonDown("Activate")) {
|
||||
InteractWith(LookingAt, InteractionType.Activate);
|
||||
Interacted = true;
|
||||
}
|
||||
if (Input.GetButtonUp("Activate")) {
|
||||
InteractWith(LookingAt, InteractionType.Deactivate);
|
||||
Interacted = true;
|
||||
}
|
||||
if (LookedAtObject != LastLookedAt) {
|
||||
InteractWith(LookingAt, InteractionType.Enter);
|
||||
@ -71,6 +75,20 @@ namespace Cyber.Controls {
|
||||
InteractWith(LastLookedAt.GetComponent<Interactable>(), InteractionType.Exit);
|
||||
LastLookedAt = null;
|
||||
}
|
||||
|
||||
// Equipment actions
|
||||
if (!Interacted) {
|
||||
// Don't use equipment if you're interacting with something
|
||||
// (ie. don't shoot at the buttons)
|
||||
if (Input.GetButtonDown("Use Item (R)")) {
|
||||
Character.UseItemInSlot(EquipSlot.RightHand);
|
||||
Client.Send(PktType.InventoryAction, new InventoryActionPkt(InventoryAction.Use, (int) EquipSlot.RightHand));
|
||||
}
|
||||
if (Input.GetButtonDown("Use Item (L)")) {
|
||||
Character.UseItemInSlot(EquipSlot.LeftHand);
|
||||
Client.Send(PktType.InventoryAction, new InventoryActionPkt(InventoryAction.Use, (int) EquipSlot.LeftHand));
|
||||
}
|
||||
}
|
||||
} else if (Character.Moving()) {
|
||||
// The debug console is open, stop the player.
|
||||
Character.Stop();
|
||||
|
@ -2,6 +2,7 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
using Cyber.Networking.Clientside;
|
||||
using Cyber.Items;
|
||||
|
||||
namespace Cyber.Entities.SyncBases {
|
||||
|
||||
@ -25,6 +26,11 @@ namespace Cyber.Entities.SyncBases {
|
||||
/// </summary>
|
||||
public CharacterController CharacterController;
|
||||
|
||||
/// <summary>
|
||||
/// The inventory of this player.
|
||||
/// </summary>
|
||||
public Inventory Inventory;
|
||||
|
||||
/// <summary>
|
||||
/// The head transform for looking around.
|
||||
/// </summary>
|
||||
@ -55,6 +61,16 @@ namespace Cyber.Entities.SyncBases {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Uses the item in the left hand if something is equipped.
|
||||
/// </summary>
|
||||
public void UseItemInSlot(EquipSlot slot) {
|
||||
Item Equipped = Inventory.Equipped.GetItem(slot);
|
||||
if (Equipped != null && Equipped.Action != null) {
|
||||
Equipped.Action(this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the character's rotation.
|
||||
/// </summary>
|
||||
|
@ -33,6 +33,7 @@ namespace Cyber.Entities.SyncBases {
|
||||
if (Server.IsRunning()) {
|
||||
Drive.AddItem(ItemDB.Singleton.Get(0));
|
||||
Drive.AddItem(ItemDB.Singleton.Get(1));
|
||||
Drive.AddItem(ItemDB.Singleton.Get(2));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,18 +2,23 @@
|
||||
namespace Cyber.Items {
|
||||
|
||||
/// <summary>
|
||||
/// Represents an inventory action
|
||||
/// Represents an inventory action.
|
||||
/// </summary>
|
||||
public enum InventoryAction : byte {
|
||||
|
||||
/// <summary>
|
||||
/// Equip an item, given int is the ID of the item equipping
|
||||
/// Equip an item, given int is the ID of the item equipping.
|
||||
/// </summary>
|
||||
Equip,
|
||||
|
||||
/// <summary>
|
||||
/// Unequip the given slot, removing anything that was inside of it.
|
||||
/// </summary>
|
||||
Unequip
|
||||
Unequip,
|
||||
|
||||
/// <summary>
|
||||
/// Use the item in the given slot.
|
||||
/// </summary>
|
||||
Use
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,12 @@
|
||||
|
||||
using Cyber.Entities.SyncBases;
|
||||
|
||||
namespace Cyber.Items {
|
||||
|
||||
/// <summary>
|
||||
/// An item, containing itemmy information.
|
||||
/// </summary>
|
||||
public class Item {
|
||||
public delegate void ItemAction(Character host);
|
||||
|
||||
/// <summary>
|
||||
/// ID of the item, used in <see cref="ItemDB"/>.
|
||||
@ -36,6 +38,11 @@ namespace Cyber.Items {
|
||||
/// </summary>
|
||||
public EquipSlot Slot;
|
||||
|
||||
/// <summary>
|
||||
/// The function that is ran when the item is used.
|
||||
/// </summary>
|
||||
public ItemAction Action;
|
||||
|
||||
/// <summary>
|
||||
/// Creates an item. This should technically be only called by ItemDB, but it's public because of "reasons".
|
||||
/// </summary>
|
||||
@ -45,13 +52,14 @@ namespace Cyber.Items {
|
||||
/// <param name="weight">The Weight of the item.</param>
|
||||
/// <param name="slot">The equip slot of the item.</param>
|
||||
/// <param name="description">The description of the item.</param>
|
||||
public Item(int id, int modelId, string name, float weight, EquipSlot slot, string description) {
|
||||
public Item(int id, int modelId, string name, float weight, EquipSlot slot, string description, ItemAction action = null) {
|
||||
ID = id;
|
||||
ModelID = modelId;
|
||||
Name = name;
|
||||
Weight = weight;
|
||||
Slot = slot;
|
||||
Description = description;
|
||||
Action = action;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -59,7 +67,7 @@ namespace Cyber.Items {
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Item Clone() {
|
||||
return new Item(ID, ModelID, Name, Weight, Slot, Description);
|
||||
return new Item(ID, ModelID, Name, Weight, Slot, Description, Action);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using Cyber.Console;
|
||||
|
||||
namespace Cyber.Items {
|
||||
|
||||
@ -20,7 +21,8 @@ namespace Cyber.Items {
|
||||
/// </summary>
|
||||
public ItemDB() {
|
||||
AddItem(new Item(Counter++, 0, "Very Long Item Name", 1.5f, EquipSlot.Hat, "This item is a rare piece of the \"way too long of a name\" technology, invented by space goblins in ancient times."));
|
||||
AddItem(new Item(Counter++, 1, "Outworldly spherical tube", .5f, EquipSlot.RightHand, "It's so spherical and smooth that it seems like it's not even from this world!"));
|
||||
AddItem(new Item(Counter++, 1, "Outworldly Spherical Tube", .5f, EquipSlot.RightHand, "It's so spherical and smooth that it seems like it's not even from this world!"));
|
||||
AddItem(new Item(Counter++, 0, "Cube Of Debuggery", 1.5f, EquipSlot.LeftHand, "Does some debuggery when you poke it.", (host) => { Term.Println("*DEBUGGERY*"); }));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -288,6 +288,17 @@ namespace Cyber.Networking.Clientside {
|
||||
EquipSlot Slot = (EquipSlot) InventoryActionPkt.RelatedInt;
|
||||
Inventory.Equipped.ClearSlot(Slot);
|
||||
break;
|
||||
case InventoryAction.Use:
|
||||
EquipSlot UseSlot = (EquipSlot) InventoryActionPkt.RelatedInt;
|
||||
Item UseItem = Inventory.Equipped.GetItem(UseSlot);
|
||||
Character Character = CurrSyncBase.GetComponent<Character>();
|
||||
if (UseItem != null && UseItem.Action != null && Character != null &&
|
||||
Player.Character != Character) {
|
||||
// Item exists, it has an action, and the character
|
||||
// isn't controlled by the client (no double-actions).
|
||||
UseItem.Action(Character);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -53,6 +53,38 @@ InputManager:
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Use Item (R)
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: left ctrl
|
||||
altNegativeButton:
|
||||
altPositiveButton: mouse 0
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Use Item (L)
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: left alt
|
||||
altNegativeButton:
|
||||
altPositiveButton: mouse 1
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Equip
|
||||
descriptiveName:
|
||||
|
Loading…
Reference in New Issue
Block a user