背包相关——Inventory

背包GUI

var skintemp:GUIStyle;
var skintemp01:GUIStyle;
var skintemp02:GUIStyle;
var skintemp03:GUIStyle;
var skintemp04:GUIStyle;

function OnGUI()
{
   GUI.Button(Rect(10,70,50,50),"",skintemp);
   GUI.Button(Rect(70,70,50,50),"",skintemp01);
   GUI.Button(Rect(130,70,50,50),"",skintemp02);
   GUI.Button(Rect(200,70,50,50),"",skintemp03);
   GUI.Button(Rect(260,70,50,50),"",skintemp04);
}

 

背包_InventoryGrid

var bagName:String = "set a name for bag";
var bagBtnName:String = "Bag button name here";
var posBagBtn:Vector2 = Vector2(50,50);

var slotSize: float = 40;
var spacingBetweenSlots :float = 5;
var defaultTextureSlot:Texture;
var bagNumber:int;

private var numSlot = 16;
private var offsetBag : int ;
private var showBag :boolean = false;
private var bagPos:Vector2 ;
private var indexOnController:int;

private var tempTexture :Texture;

private var ctrl:PositionController;

function Start()
{
   offsetBag = bagNumber * numSlot;
  ctrl = transform.parent.GetComponent(PositionController);
  indexOnController = 0;
}

 

function OnGUI()
{
   if(GUI.Button(Rect(Screen.width - posBagBtn.x, Screen.height - posBagBtn.y,slotSize,slotSize),bagBtnName))
   {
      ToggleBag();
   }
  
   if(showBag)
   {
     Bag(bagPos.x,bagPos.y,185,200);
   }
}

function ToggleBag()
{
   if(showBag)
   {
     HideBag();
   }
   else
   {
     ShowBag();
   }
}

function HideBag()
{
  showBag = false;
  ctrl.FreePosition(indexOnController);
}

function ShowBag()
{
  showBag = true;
  var info: Vector3 = ctrl.GetPositionAvailable();
  indexOnController = info.z;
  bagPos = Vector2(info.x,info.y);
}

function BagIsBeingDisplayed()
{
   return showBag;
}

function Bag(posX:float,posY:float,sX:float,sY:float)
{
  GUI.BeginGroup(Rect(Screen.width - posX,Screen.height - posY,sX,sY));
  GUI.Box(Rect(0,0,sX,sY),bagName);
 
  for(var i=0;i<4;i++)
  {
     for(var j=0;j<4;j++)
     {
        if(ctrl.GetObjectsInBag(offsetBag + (4*i)+j) == null)
        {
           tempTexture = defaultTextureSlot; 
  } 
  else
  {
   tempTexture = ctrl.GetObjectsInBag(offsetBag+(4*i)+j).GetComponent(ObjectInfo).iconTexture;
  }
  
  if(Input.GetMouseButtonDown(0))
  {
      ctrl.SetButtonClicked(false);
  }
  
        if(GUI.Button(Rect(slotSize*j+spacingBetweenSlots*(j+1) , slotSize*i+spacingBetweenSlots*(i+1)+15,
        slotSize,slotSize),tempTexture))
        {
      ctrl.SetButtonClicked(true);
               
           if(ctrl.GetObjectsInBag(offsetBag+(4*i)+j) != null)
     {
        ctrl.mouseTextureHander.SetCursor(ctrl.GetObjectsInBag(offsetBag+(4*i)+j).GetComponent(ObjectInfo).iconTexture);
    
     ctrl.SetObjAttached(true);
     }
     //print((offsetBag+(4*i)+j));
     //print(ctrl.GetObjectsInBag((offsetBag+(4*i)+j)));
      MoveSlot((offsetBag+(4*i)+j));
        }
     }  
  }
 
  GUI.EndGroup(); 
}

function MoveSlot( indSlot : int)
{
    //ctrl.SetLastSlotUsed(indSlot);
    if(ctrl.GetObjectsInBag(indSlot) == null && !ctrl.GetSlotMovedFlag())//移动图标到新的位置
    {
  ctrl.SetObjectInBag(indSlot, ctrl.GetObjectsInBag(ctrl.GetLastSlotUsed()));
  ReleaseSlot(ctrl.GetLastSlotUsed());
  ctrl.SetSlotMovedFlag(true);
  ctrl.mouseTextureHander.ReleaseCursorIcon();
  ctrl.SetObjAttached(false);
 }
 else if(ctrl.GetObjectsInBag(indSlot) != null && ctrl.GetObjectsInBag(ctrl.GetLastSlotUsed()) != null && !ctrl.GetSlotMovedFlag()) //转换两个图标
 {
     var tmpObj : GameObject = ctrl.GetObjectsInBag(indSlot);
  ctrl.SetObjectInBag(indSlot, ctrl.GetObjectsInBag(ctrl.GetLastSlotUsed()));
  ctrl.SetObjectInBag(ctrl.GetLastSlotUsed(),tmpObj);
  ctrl.SetSlotMovedFlag(true);
  ctrl.mouseTextureHander.ReleaseCursorIcon();
  ctrl.SetObjAttached(false);
 }
 else
 {
     ctrl.SetSlotMovedFlag(false);
 }
 ctrl.SetLastSlotUsed(indSlot);
}

function ReleaseSlot(index :int)
{
    ctrl.SetObjectInBag( index, null);
}

背包_ObjectInfo

var iconTexture : Texture;
var nameOfObj : String = "Put your Object name";
var inventory : GameObject;

private var decr : boolean;

function Start()
{
  decr = false;
}

function OnMouseOver()
{
   ToggleAlpha(0.3,1);
   if(Input.GetMouseButtonDown(0))
   {
       renderer.material.color.a = 1;
       inventory.GetComponent(PositionController).SaveObjectInInventory(transform.gameObject);
   }
}

function OnMouseExit()
{
   renderer.material.color.a = 1;
}

function ToggleAlpha(minV : float, maxV : float)
{
   if(renderer.material.color.a > minV && decr)
   {
      renderer.material.color.a -= 1*Time.deltaTime;
   }
   else
   {
      renderer.material.color.a += Time.deltaTime;
   }
  
 if(renderer.material.color.a > maxV )
   {
      decr = true;
   }
   else if(renderer.material.color.a < minV)
   {
      decr = false;
   }
}

 

背包_MouseTextureHanding

function Start()
{
  transform.GetComponent(GUITexture).enabled = false;
}

function Update ()
{
   transform.position = Vector3(Input.mousePosition.x/Screen.width,Input.mousePosition.y/Screen.height,0);
}

function ReleaseCursorIcon()
{
    transform.GetComponent(GUITexture).enabled = false;
 Screen.showCursor = true;
}

function SetCursor(t : Texture)
{
    transform.GetComponent(GUITexture).texture = t;
 transform.GetComponent(GUITexture).enabled = true;
 Screen.showCursor = false;
 
}

 

背包_PositionController

var mouseTextureHander : MouseTextureHanding;

private var buttonClicked : boolean = false;//获取按钮是否按下
private var objAttached : boolean = false; //TRUE 当一个模型从背包中选择

private var posBags: Vector2[];
private var flagAvailable : Array;
private var indexBags:int;
private var toggleAllBags :boolean = false;

private var objectsInBag : GameObject[];
private var LastSlotUsed :int = 63; //获取最后一次被点击的图标
private var slotMovedFlag : boolean = false; //控制是否可以移动

function Start()
{
  objectsInBag = new GameObject[64];
  flagAvailable = new Array();
 
  posBags = [Vector2(195,260),Vector2(195,465),Vector2(385,260),Vector2(385,465)];
  for(var i=0 ; i<posBags.length; i++)
  {
     flagAvailable.push(true);
  }
  indexBags = 0;
}

//快捷键
function Update()
{
   if(Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.B))
   {
       for(var child : Transform in transform)
    {
        if(child.GetComponent(InventoryGrid) == null)
     {
        break;
     }
    
     if(toggleAllBags)
     {
        child.GetComponent(InventoryGrid).HideBag();
     }
     else
     {
     if(!child.GetComponent(InventoryGrid).BagIsBeingDisplayed())
     {
         child.GetComponent(InventoryGrid).ShowBag();
     }
     }
    }
   
    if(toggleAllBags)
    {
      toggleAllBags = false;
    }
    else
    {
      toggleAllBags = true;
    }
   }
  
      if(Input.GetMouseButtonUp(0) && !buttonClicked && objAttached)
    {
        ReleaseObjectFromInventory(LastSlotUsed);
     LastSlotUsed = 63;
     objAttached = false;
    }
}

function GetPositionAvailable()
{
   var found :boolean = false;
   for(indexBags = 0 ; indexBags < flagAvailable.length;indexBags++)
   {
       if(flagAvailable[indexBags])
    {
       found = true;
    break;
    }
   }
  
   if(!found)
   {
      Debug.Log("Erro:Please ADD ");
   return;
   }
   flagAvailable[indexBags] = false;
   return Vector3(posBags[indexBags].x , posBags[indexBags].y , indexBags);
}

function FreePosition(t:int)
{
    flagAvailable[t] = true;
}

function ReleaseObjectFromInventory( t : int)
{
   mouseTextureHander.ReleaseCursorIcon();
   objectsInBag[t].transform.parent = null ;
   Destroy (objectsInBag[t]);
   objectsInBag[t] = null;
  
  
   /*
   objectsInBag[t].active = true;
   objectsInBag[t].transform.localPosition+= Vector3(0,1,0.5);
   objectsInBag[t].transform.parent = null ;
   mouseTextureHander.ReleaseCursorIcon();
   objectsInBag[t] = null;
   */
}

function SaveObjectInInventory(obj :GameObject)
{
   for(var i : int = 0; i < objectsInBag.length;i++)
   {
      if(objectsInBag[i] == null)
   {
      objectsInBag[i] = obj;
   obj.transform.localPosition = Vector3.zero;
   obj.active = false;
   obj.transform.parent = transform;
   return;
   }
   }
}

function GetObjectsInBag(t : int)
{
   return objectsInBag[t];
}

function SetObjectInBag(t : int , obj : GameObject)
{
   objectsInBag[t] = obj;
}

function SetLastSlotUsed( t : int)
{
   LastSlotUsed = t;
}

function GetLastSlotUsed()
{
   return LastSlotUsed;
}

function SetSlotMovedFlag( val : boolean)
{
   slotMovedFlag = val;
}

function GetSlotMovedFlag()
{
   return slotMovedFlag;
}

function GetButtonClicked()
{
   return buttonClicked;
}

function SetButtonClicked(val : boolean)
{
    buttonClicked = val;
}

function GetObjectAttached()
{
   return objAttached;
}

function SetObjAttached(val :boolean)
{
   objAttached = val;
}

 

posted @ 2012-04-10 14:22  渡蓝  阅读(347)  评论(0)    收藏  举报