Esempio n. 1
0
 /// <summary>
 /// Delete a received ray.
 /// </summary>
 public void DeleteRayReceiver()
 {
     if (RayReceiver != null)
     {
         RayReceiver.HitExit(this);
         RayReceiver = null;
     }
 }
Esempio n. 2
0
    /// <summary>
    /// Save all the items.
    /// </summary>
    private void SaveItems()
    {
        foreach (Transform item in ItemsContainer.transform)
        {
            RaySensitive raySensitive = item.GetComponent <RaySensitive>();
            Debug.Log(raySensitive.ItemCode);
            SaveItem(item);
        }

        Debug.Log(_levelData.ToString());
    }
Esempio n. 3
0
    /// <summary>
    /// Save an item.
    /// </summary>
    /// <param name="item">Item to be saved.</param>
    private void SaveItem(Transform item)
    {
        JSONObject jsonObject = new JSONObject();

        jsonObject.AddField("X", BoardManager.WorldToCellPosition(item.position.x));
        jsonObject.AddField("Y", BoardManager.WorldToCellPosition(item.position.z));
        jsonObject.AddField("Draggable", false);

        RaySensitive raySensitive = item.GetComponent <RaySensitive>();

        Debug.Log(raySensitive.ItemCode);
        if (raySensitive.ItemCode == "mirror")
        {
            SaveMirrorItem(item, jsonObject);
        }
        else if (raySensitive.ItemCode == "filter")
        {
            SaveFilterItem(item, jsonObject);
        }
        else if (raySensitive.ItemCode == "prism")
        {
            SavePrismItem(item, jsonObject);
        }
        else if (raySensitive.ItemCode == "filter-mirror")
        {
            SaveFilterMirrorItem(item, jsonObject);
        }
        else if (raySensitive.ItemCode == "obstacle")
        {
            SaveObstacleItem(item, jsonObject);
        }
        else if (raySensitive.ItemCode == "standard-turret")
        {
            SaveStandardTurretItem(item, jsonObject);
        }
        else if (raySensitive.ItemCode == "missile-turret")
        {
            SaveMissileTurretItem(item, jsonObject);
        }
        else if (raySensitive.ItemCode == "laser-turret")
        {
            SaveLaserTurretItem(item, jsonObject);
        }
        else if (raySensitive.ItemCode == "light-source")
        {
            SaveLightSourceItem(item, jsonObject);
        }
        else
        {
            return;
        }
        _levelData["Entities"].Add(jsonObject);
    }
Esempio n. 4
0
        public void OnBeginDrag(PointerEventData eventData)
        {
            if (ItemQuantity <= 0)
            {
                return;
            }

            GameObject itemsContainer =
                BoardManager.Instance.EditorMode
                    ? LevelEditorTD.Instance.ItemsContainer
                    : GameManager.Instance.ItemsContainer;

            ItemQuantity--;
            _instanciatedItem = Instantiate(ItemPrefab, Input.mousePosition, Quaternion.identity, itemsContainer.transform);
            RaySensitive raySensitive = _instanciatedItem.GetComponent <RaySensitive>();

            if (raySensitive && raySensitive.MeshCollider)
            {
                raySensitive.MeshCollider.convex = false;
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Defined a ray
 /// </summary>
 /// <param name="rayEmitter">Source of the ray.</param>
 /// <param name="color">Color of the ray.</param>
 /// <param name="direction">Direction of the ray from the source.</param>
 /// <param name="parent">The ray received.</param>
 public Ray(RaySensitive rayEmitter, RayColor color, Direction direction, Ray parent)
 {
     RayEmitter         = rayEmitter;
     LineRendererParent = new GameObject(string.Format("Ray {0} {1}",
                                                       color,
                                                       direction
                                                       ));
     LineRendererParent.transform.position = rayEmitter.transform.position + VectorOffset;
     LineRendererParent.transform.rotation = rayEmitter.transform.rotation;
     LineRendererParent.transform.parent   = rayEmitter.transform;
     LineRenderer            = LineRendererParent.AddComponent <LineRenderer>();
     LineRenderer.startWidth = 0.3f;
     LineRenderer.endWidth   = 0.3f;
     LineRenderer.material   = new Material(Shader.Find("Sprites/Default"));
     LineRenderer.enabled    = true;
     Color       = color;
     Enabled     = true;
     Direction   = direction;
     RayReceiver = null;
     Parent      = parent;
     Id          = CreateId();
 }
Esempio n. 6
0
        /// <summary>
        /// Draw a line in a direction
        /// </summary>
        public void Emit()
        {
            if (Enabled)
            {
                if (LineRenderer.enabled != true)
                {
                    LineRenderer.enabled = true;
                }

                //Debug.Log(string.Format("Ray receiver: {0}", RayReceiver));
                // Update the line renderer color
                SetGradientColor();

                // Set line initial position
                LineRenderer.SetPosition(0, LineRenderer.transform.position);

                // Set the line renderer position count to two positions (only one segment)
                LineRenderer.positionCount = 2;

                int layerMask = 1 << LayerMask.NameToLayer("ActiveItems");

                // Check if the ray hits an object in the input direction
                RaycastHit hit;
                if (Physics.Raycast(
                        LineRenderer.transform.position,
                        DirectionUtility.GetDirectionAsVector3(Direction),
                        out hit,
                        Mathf.Infinity,
                        layerMask))
                {
                    // If the ray hits an object with a collider
                    if (hit.collider)
                    {
                        // Set the end position to the object that was hit position
                        LineRenderer.SetPosition(1, hit.transform.position + VectorOffset);

                        // Check if the object that was hit is a HitObject
                        var rayReceiver = hit.transform.gameObject.GetComponent <RaySensitive>();

                        // If the receiver hit by the ray is the current receiver
                        if (rayReceiver != null && rayReceiver == RayReceiver)
                        {
                            return;
                        }

                        DeleteRayReceiver();

                        if (rayReceiver != null)
                        {
                            // Store the new HitObject
                            RayReceiver = rayReceiver;
                            RayReceiver.HitEnter(this);
                        }
                    }
                    // If the ray hits an object with not collider and object and a current HitObject is set
                    else
                    {
                        DeleteRayReceiver();
                    }
                }
                // If the ray hits nothing
                else
                {
                    // Draw a line in the input direction to the infinite
                    LineRenderer.SetPosition(1, DirectionUtility.GetDirectionAsVector3(Direction) * 5000);
                    DeleteRayReceiver();
                }
            }
            else
            {
                if (LineRenderer.enabled != false)
                {
                    LineRenderer.enabled = false;
                }
            }
        }