void MapIconClick(mapicon_listitem_script theMapIcon) { if (itsListClickIcons.Contains(theMapIcon.itsMapIcon)) { RemoveClickMarker(theMapIcon); } else { LogInfo("Click on map icon:"+theMapIcon.itsMapIcon.GetGameObjectName(),name,this); EventMouseMapIconClicked.Trigger(this,new KGFMarkerEventArgs(theMapIcon.itsMapIcon)); } }
void MapIconLeave(mapicon_listitem_script theMapIcon) { if (theMapIcon != null) { LogInfo("Mouse left map icon:"+theMapIcon.itsMapIcon.GetGameObjectName(),name,this); itsMapIconHoveredCurrent = null; EventMouseMapIconLeft.Trigger(this,new KGFMarkerEventArgs(theMapIcon.itsMapIcon)); } }
void MapIconEnter(mapicon_listitem_script theMapIcon) { if (itsMapIconHoveredCurrent != theMapIcon) { LogInfo("Mouse entered map icon:"+theMapIcon.itsMapIcon.GetGameObjectName(),name,this); itsMapIconHoveredCurrent = theMapIcon; EventMouseMapIconEntered.Trigger(this,new KGFMarkerEventArgs(theMapIcon.itsMapIcon)); } }
/// <summary> /// Check if the mouse is over the are of a map icon and send the events /// </summary> void UpdateMapIconHover(out bool theClickOnIcon) { theClickOnIcon = false; // if (GetPanningActive()) // { // if (itsMapIconHoveredCurrent != null) // { // MapIconLeave(itsMapIconHoveredCurrent); // itsMapIconHoveredCurrent = null; // } // return; // } Vector2 aMousePosition = Input.mousePosition; aMousePosition.y = Screen.height - aMousePosition.y; // check if mouse is in area of the map if (itsTargetRect.Contains(aMousePosition) && !itsMouseEnteredMap) { itsMouseEnteredMap = true; EventMouseMapEntered.Trigger(this); LogInfo("Mouse entered map",name,this); } else if (!itsTargetRect.Contains(aMousePosition) && itsMouseEnteredMap) { itsMouseEnteredMap = false; EventMouseMapLeft.Trigger(this); LogInfo("Mouse left map",name,this); } // cleanup old hovered item if (itsMapIconHoveredCurrent != null) { if (((MonoBehaviour)itsMapIconHoveredCurrent.itsMapIcon) == null) itsMapIconHoveredCurrent = null; } // check if mouse is near any map icon Vector3? aClickWorldPointNull = GetMouseToWorldPointOnMap(); if (aClickWorldPointNull != null) { bool aFoundItem = false; for (int i=0;i<itsListMapIcons.Count;i++) { Vector3 aClickWorldPoint = aClickWorldPointNull.Value; aClickWorldPoint = ChangeVectorHeight(aClickWorldPoint,GetHeightIcons(i)); mapicon_listitem_script aListItem = itsListMapIcons[i]; float aRepSize = aListItem.GetRepresentationSize().magnitude / 2; if (Vector3.Distance(aListItem.itsRepresentationInstanceTransform.position,aClickWorldPoint) < aRepSize) { MapIconEnter(aListItem); aFoundItem = true; break; } } if (itsMapIconHoveredCurrent != null && Input.GetMouseButtonUp(0)) { { theClickOnIcon = true; MapIconClick(itsMapIconHoveredCurrent); } } if (!aFoundItem && itsMapIconHoveredCurrent != null) { MapIconLeave(itsMapIconHoveredCurrent); } } }
/// <summary> /// Compares the depth of icons /// </summary> /// <param name="theMapIcon1"></param> /// <param name="theMapIcon2"></param> /// <returns></returns> private int CompareMapIcons(mapicon_listitem_script theMapIcon1, mapicon_listitem_script theMapIcon2) { return theMapIcon1.itsMapIcon.GetDepth().CompareTo(theMapIcon2.itsMapIcon.GetDepth()); }
/// <summary> /// Register map icon /// </summary> /// <param name="theMapIcon"></param> void RegisterIcon(KGFIMapIcon theMapIcon) { // create copy of static representation GameObject aSpatialArrow = null; // create copy of representation GameObject aSpatialNewMapIcon = null; aSpatialNewMapIcon = theMapIcon.GetRepresentation(); if(aSpatialNewMapIcon == null) { LogError("missing icon representation for: "+theMapIcon.GetGameObjectName(),name,this); return; } UpdateIconLayer(theMapIcon); if (theMapIcon.GetTextureArrow() != null) { aSpatialArrow = GenerateTexturePlane(theMapIcon.GetTextureArrow(),itsDataModuleMinimap.itsShaders.itsShaderMapIcon); aSpatialArrow.transform.parent = itsContainerIconArrows; aSpatialArrow.transform.localPosition = Vector3.zero; aSpatialArrow.transform.localScale = Vector3.one; aSpatialArrow.GetComponent<MeshRenderer>().material.renderQueue = 3200; SetLayerRecursively(aSpatialArrow.gameObject,itsLayerMinimap); } // reparent it aSpatialNewMapIcon.transform.parent = itsContainerIcons; aSpatialNewMapIcon.transform.position = Vector3.zero; SetLayerRecursively(aSpatialNewMapIcon.gameObject,itsLayerMinimap); // remember it mapicon_listitem_script aNewItem = new mapicon_listitem_script(); aNewItem.itsModule = this; aNewItem.itsMapIcon = theMapIcon; aNewItem.itsRepresentationInstance = aSpatialNewMapIcon; aNewItem.itsRepresentationInstanceTransform = aSpatialNewMapIcon.transform; aNewItem.itsRotate = theMapIcon.GetRotate(); aNewItem.itsRepresentationArrowInstance = aSpatialArrow; aNewItem.itsMapIconTransform = theMapIcon.GetTransform(); aNewItem.SetVisibility(true); if (aSpatialArrow != null) aNewItem.itsRepresentationArrowInstanceTransform = aSpatialArrow.transform; aNewItem.itsCachedRepresentationSize = GetGameObjectSize(aSpatialNewMapIcon); itsListMapIcons.Add(aNewItem); itsListMapIcons.Sort(CompareMapIcons); aNewItem.UpdateIcon(); UpdateIconScale(); LogInfo(string.Format("Added icon of category '{0}' for '{1}'",theMapIcon.GetCategory(),theMapIcon.GetTransform().name),name,this); }