Esempio n. 1
0
    public override void EndExecution()
    {
        Entity hit = CubeHelper.GetEntityInPosition(EndPosition + direction.normalized);

        if (hit is RockCube || hit is MetalCube)
        {
            ((IceCube)Cube).Break();
        }
        base.EndExecution();
    }
Esempio n. 2
0
    public void Slide(Vector3 endPosition, Vector3 direction)
    {
        Level.Singleton.Entities.Remove(transform.position);
        transform.position = endPosition;
        Level.Singleton.Entities.Add(transform.position, this);
        Entity hit = CubeHelper.GetEntityInPosition(transform.position + direction.normalized);

        if (hit is RockCube) //Agregar cubo metal
        {
            Break();
        }
    }
Esempio n. 3
0
    void Update()
    {
        Vector3EqualityComparer comparer = new Vector3EqualityComparer();

        if (isClone && Vector3.Equals(transform.position, imitated.transform.position))
        {
            if (CubeHelper.GetEntityInPosition(imitated.transform.position + Vector3.down) is Cube)
            {
                Clone(CubeHelper.GetEntityInPosition(imitated.transform.position + Vector3.down));
            }
            else
            {
                UnClone();
            }
        }
    }
Esempio n. 4
0
 public override void MoveTo(Vector3 nextPosition)
 {
     if (CubeHelper.GetEntityInPosition(nextPosition + Vector3.down) is Cube)
     {
         Debug.Log("Clone!");
         collider.enabled = false;
         renderer.enabled = false;
         Debug.Log(renderer.enabled);
         transform.position = nextPosition;
         Clone(CubeHelper.GetEntityInPosition(nextPosition + Vector3.down));
         Command.EndExecution();
     }
     else
     {
         base.MoveTo(nextPosition);
     }
 }
Esempio n. 5
0
    private Vector3[] GetAvaiblePositionsRelatedTo(Vector3 direction)
    {
        List <Vector3> availablePositions = new List <Vector3>();

        if (IsWalkable(CubeHelper.GetEntityInPosition(transform.position + direction)))
        {
            Vector3 restComponents = Vector3.one - new Vector3(direction.normalized.x, direction.normalized.y, direction.normalized.z);
            if (restComponents.x == 1)
            {
                if (CubeHelper.IsFree(transform.position + direction + Vector3.right))
                {
                    availablePositions.Add(transform.position + direction + Vector3.right);
                }
                if (CubeHelper.IsFree(transform.position + direction + Vector3.left))
                {
                    availablePositions.Add(transform.position + direction + Vector3.left);
                }
            }
            if (restComponents.y == 1)
            {
                if (CubeHelper.IsFree(transform.position + direction + Vector3.up))
                {
                    availablePositions.Add(transform.position + direction + Vector3.up);
                }
                if (CubeHelper.IsFree(transform.position + direction + Vector3.down))
                {
                    availablePositions.Add(transform.position + direction + Vector3.down);
                }
            }
            if (restComponents.z == 1)
            {
                if (CubeHelper.IsFree(transform.position + direction + Vector3.forward))
                {
                    availablePositions.Add(transform.position + direction + Vector3.forward);
                }
                if (CubeHelper.IsFree(transform.position + direction + Vector3.back))
                {
                    availablePositions.Add(transform.position + direction + Vector3.back);
                }
            }
        }
        return(availablePositions.ToArray());
    }
Esempio n. 6
0
    void Update()
    {
        ray = new Ray(transform.position, transform.forward);
        if (!isAlive || lasersHitting > 0)
        {
            float distance = Mathf.Abs(Level.Dimension - transform.position.x);
            distance = Mathf.Abs(Vector3.Dot(transform.position, transform.forward) - Level.Dimension);
            if (distance > 10)
            {
                distance -= (Level.Dimension);
            }

            RaycastHit[] hits = Physics.RaycastAll(ray, distance);

            RaycastHit hit       = new RaycastHit();
            bool       isRealHit = false;
            if (hits.Length > 0 && hits[0].transform.tag != "Selector")
            {
                hit       = hits[0];
                isRealHit = true;
            }
            else
            {
                if (hits.Length > 1 && hits[1].transform.tag != "Selector")
                {
                    hit       = hits[1];
                    isRealHit = true;
                }
            }

            /*Debug.Log(isAlive);
             * foreach(RaycastHit h in hits){
             *  Debug.Log(CubeHelper.GetEntityInPosition(h.transform.position));
             * }*/

            if (isRealHit)
            {
                hitPosition = hit.transform.position;
                renderer.SetPosition(1, hitPosition);
                if (!CubeHelper.IsFree(hitPosition) && CubeHelper.GetEntityInPosition(hitPosition) is ILaserReactive)
                {
                    ILaserReactive newHit = (ILaserReactive)CubeHelper.GetEntityInPosition(hitPosition);
                    if (!newHit.Equals(reactabletHit))
                    {
                        newHit.HitByLaser(this.transform.position);
                        reactabletHit = newHit;
                    }
                }
                else
                {
                    if (reactabletHit != null)
                    {
                        reactabletHit.StopHit(this.transform.position);
                        reactabletHit = null;
                    }
                }
            }
            else
            {
                if (reactabletHit != null)
                {
                    reactabletHit.StopHit(this.transform.position);
                    reactabletHit = null;
                }
                renderer.SetPosition(1, transform.position + transform.forward * distance);
            }
        }
        else
        {
            renderer.SetPosition(1, this.transform.position);
        }
    }