Esempio n. 1
0
 /// <summary>
 /// Define if the object needs to be freezed. Acts like a switch.
 /// </summary>
 protected void freezeObject()
 {
     if (m_currentObject.GetComponent <MovableObject>() != null)
     {
         m_currentObject.GetComponent <MovableObject>().isFreezed = !m_currentObject.GetComponent <MovableObject>().isFreezed;
     }
 }
Esempio n. 2
0
    void OnFruitNinjaClickedBubble(Fruit.types type)
    {
        switch (type)
        {
        case Fruit.types.GENERIC:
            fruitsManager.audioSource.PlayOneShot(ninjaOK);
            fruitsManager.audioSource.PlayOneShot(rompehielo);
            points += 1;
            break;

        case Fruit.types.BAD:
            fruitsManager.audioSource.PlayOneShot(ninjaWrong);
            points -= 1;
            break;
        }
        if (points < 0)
        {
            points = 0;
        }
        else if (points >= totalPoints)
        {
            points = totalPoints;
            Done(true);
        }
        float v = 1 - (float)points / (float)totalPoints;

        Data.Instance.ui.progressBar.SetValue(v);
        interactiveObject.GetComponent <Door> ().SetProgress(v);
    }
Esempio n. 3
0
    void OnCharacterHitInteractiveObject(InteractiveObject io)
    {
        if (state != states.PLAYING || state == states.CHANGING_LEVEL || state == states.UI_POPUP)
        {
            return;
        }

        PortalLevel portalLevel = io.GetComponent <PortalLevel> ();

        if (portalLevel != null)
        {
            if (portalLevel.ChekToCross())
            {
                selectedInteractiveObject = io;
                //anim.Idle ();
                //state = states.CHANGING_LEVEL;
                return;
            }
        }

        Door door = io.GetComponent <Door> ();



        if (door == null)
        {
            return;
        }
        if (door.state == Door.states.UNAVAILABLE)
        {
            Events.PortalUnavailable();
            return;
        }
        if (door.state == Door.states.BLOCKED || door.state == Door.states.COMPLETED)
        {
            return;
        }

        if (door.state == Door.states.CLOSED)
        {
            selectedInteractiveObject = io;
            Vector3 newPos = io.transform.localPosition;
            newPos.z -= 1.5f;
            OnFloorClicked(newPos);
            state = states.OPENING_FRUIT_NINJA;
        }
        else
        {
            selectedInteractiveObject = io;
            Door d = selectedInteractiveObject as Door;

            nextScene = Data.Instance.GetNextMGame();
            Vector3 newPos = io.transform.localPosition;
            newPos.z -= 0.35f;
            OnFloorClicked(newPos);
            state = states.ENTERING_DOOR;
        }
    }
Esempio n. 4
0
    public void PlaceGameObjectFromStaticRef(InteractiveObject _go, int _x, int _y, int _rotation, float _hight = 0)
    {
        if (_go == null || _go.gameObject == null)
        {
            return;
        }
        if (_hight == 0)
        {
            _go.transform.position = ActorMoveFSM.LineCast(new Vector3(_x, 0, _y), true);
        }
        else
        {
            _go.transform.position = new Vector3(_x, _hight, _y);
        }

        Actor actor = _go.GetComponent <Actor>();

        if (actor != null)
        {
            actor.FaceToNoLerp(_rotation);
        }
        else
        {
            _go.transform.localEulerAngles = new Vector3(0, _rotation, 0);
        }
        OnPositionChanged(_go);
    }
Esempio n. 5
0
    public void PlaceGameObjectFromServer(InteractiveObject _go, float _x, float _y, int _rotation, float _hight = 0)
    {
        if (_go == null || _go.gameObject == null)
        {
            return;
        }
        if (_hight == 0)
        {
            _go.transform.position = ActorMoveFSM.LineCast(new Vector3(_x, 0, _y), true);
        }
        else
        {
            _go.transform.position = new Vector3(_x, _hight, _y);
        }
        Vector3 dir = Utils.Int2ToDir(_rotation);

        Actor actor = _go.GetComponent <Actor>();

        if (actor != null)
        {
            actor.FaceToNoLerp(_rotation);
            actor.PositionChange();
        }
        else
        {
            _go.transform.forward = dir;
        }

        OnPositionChanged(_go);
    }
Esempio n. 6
0
    /// <summary>
    /// Überprüft das World Object auf Pushes und Kollsionen.
    /// </summary>
    /// <param name="worldObject"></param>
    private void CheckWorldObjectCollision(WorldObject worldObject)
    {
        Collider2D collider  = worldObject.GetComponent <Collider2D>();
        RayCaster  raycaster = worldObject.GetComponent <RayCaster>();

        Collider2D[]    detectedCollider = new Collider2D[1];
        ContactFilter2D contactFilter    = new ContactFilter2D();

        contactFilter.layerMask    = raycaster.collisionMask;
        contactFilter.useLayerMask = true;

        /*GameObject test = new GameObject();
         * test.layer = LayerMask.NameToLayer("Goals");
         * Debug.Log("!!!!!!!!!" + contactFilter.IsFilteringLayerMask(test));*/

        collider.OverlapCollider(contactFilter, detectedCollider);
        if (detectedCollider[0] != null && detectedCollider[0].GetComponent <InteractiveObject>())
        {
            Debug.Log("*" + worldObject.gameObject.name + " Overlap mit " + detectedCollider[0].name);
            InteractiveObject interactiveObject = detectedCollider[0].GetComponent <InteractiveObject>();
            Vector2           dir = detectedCollider[0].transform.position - worldObject.transform.position;
            float             angleBetweenObjects = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
            //Debug.Log("**Winkel dazwischen: " + angleBetweenObjects);
            Debug.DrawLine(detectedCollider[0].transform.position, worldObject.transform.position, Color.green);
            Vector2 pushDirection = GetDirectionVectorForRoundedAngle(angleBetweenObjects + 90); //Es werden 90° addiert, weil angleBetweenObjects einen anderen Standard-Winkel hat als der Rest des Spiels.
            if (CanPushObject(worldObject.GetComponent <InteractiveObject>(), interactiveObject, pushDirection))
            {
                worldObject.GetComponent <InteractiveObject>().Push(interactiveObject, pushDirection);
            }
            else if (interactiveObject.GetComponent <RayCaster>().CheckForCollisionsInDirection(pushDirection))
            {
                Debug.LogError(gameObject.name + " kann sich nicht in die angegebene Richtung bewegen, weil es zur Kollision kommen würde.");
            }
        }
    }
Esempio n. 7
0
 /// <summary>
 /// Überprüf, ob das erste übergebene WorldObject das Zweite schieben darf.
 /// </summary>
 /// <param name="pusher"></param>
 /// <param name="target"></param>
 /// <param name="pushDirection"></param>
 /// <returns></returns>
 private bool CanPushObject(InteractiveObject pusher, InteractiveObject target, Vector2 pushDirection)
 {
     if (!target.Movable)
     {
         Debug.Log("***" + pusher.name + " kann " + target.name + " nicht schieben, weil " + target.name + " nicht bewegbar ist.");
         return(false);
     }
     if (target.GetComponent <RayCaster>().CheckForCollisionsInDirection(pushDirection))
     {
         Debug.LogError("***" + target.name + " kann sich nicht in die angegebene Richtung bewegen, weil es zur Kollision kommen würde.");
         return(false);
     }
     if (Vector2.Distance(pusher.transform.position, target.transform.position) >= 0.9f)
     {
         Debug.Log("***" + pusher.name + " kann " + target.name + " nicht schieben, weil die beiden zu weit voneinander entfernt sind.");
         return(false);
     }
     if (Vector2.Distance(pusher.transform.position, new Vector2(target.posX + 0.5f, target.posY + 0.5f)) >= 1)
     {
         Debug.Log("***" + pusher.name + " kann " + target.name + " nicht schieben, weil " + pusher.name + " zu weit von " + target.name + "s Zielposition(" + target.posX + "/" + target.posY + ") entfernt ist(Distanz: " + Vector2.Distance(pusher.transform.position, new Vector2(target.posX, target.posY)) + ")");
         return(false);
     }
     if (target.posX == pusher.oldX && target.posY == pusher.oldY)
     {
         Debug.Log("***" + pusher.name + " kann " + target.name + " nicht schieben, weil es von ihm geschoben wurde.");
         return(false);
     }
     return(true);
 }
Esempio n. 8
0
 void OpenFruitNinja(InteractiveObject _interactiveObject)
 {
     totalPoints = 3 + (Data.Instance.levelsData.actualDiamondLevel * 2);
     timer       = 0;
     Data.Instance.ui.StartTimer();
     playing = true;
     Events.OnDragger(true);
     this.interactiveObject = _interactiveObject;
     points = 0;
     Data.Instance.ui.progressBar.SetValue(1);
     Game.Instance.ChangeMode(Game.modes.FRUIT_NINJA);
     fruitsManager.gameObject.SetActive(true);
     fruitsManager.Init();
     interactiveObject.GetComponent <Door> ().Reset();
     interactiveObject.GetComponent <Door> ().SetProgress(1);
 }
Esempio n. 9
0
    private void HitResult(Collision2D collision)
    {
        HealthAbility health = hitObject.GetComponent <HealthAbility>();

        health?.DoDamage(Damage);
        ShowEffects(collision);
        OnDamage();
    }
Esempio n. 10
0
    private void Pickup(InteractiveObject pickUp)
    {
        if (!_pickedUpObject.Contains(pickUp))
        {
            _pickedUpObject.Add(pickUp);

            DistanceJoint2D newJoint = _handTransform.gameObject.AddComponent <DistanceJoint2D>();
            newJoint.connectedBody   = pickUp.GetComponent <Rigidbody2D>();
            newJoint.distance        = 0.01f;
            newJoint.maxDistanceOnly = true;
        }
    }
    private void CheckHitObject(RaycastHit2D hit, ObjectType[] damagable)
    {
        InteractiveObject interactive = hit.collider.gameObject.GetComponent <InteractiveObject>();

        if (!interactive)
        {
            return;
        }
        else if (!damagable.Contains(interactive.Type))
        {
            return;
        }
        interactive.GetComponent <HealthAbility>()?.DoDamage(Damage);
    }
Esempio n. 12
0
    /// <summary>
    /// Dreht das Objekt um 90° im Uhrzeigersinn.
    /// </summary>
    public void TurnRight()
    {
        Vector2 temp = oldDirection;

        oldDirection = direction;
        direction    = new Vector2(oldDirection.y, -oldDirection.x);
        if (GetComponent <Robot>() && GetComponent <Robot>().GrabbedObject != null)
        {
            List <InteractiveObject> grabbedObjects = new List <InteractiveObject>();
            InteractiveObject        grabbedObject  = GetComponent <Robot>().GrabbedObject;
            grabbedObjects.Add(grabbedObject);
            if (grabbedObject.GetComponent <WorldObjectGroup>())
            {
                foreach (WorldObject obj in grabbedObject.GetComponent <WorldObjectGroup>().objects)
                {
                    grabbedObjects.Add(obj.GetComponent <InteractiveObject>());
                }
            }
            grabbedObject.AdjustRelativePosition("Right");
            grabbedObject.MoveToRelativePosition();
        }
        gameObject.transform.rotation = Quaternion.AngleAxis(GetFacingAngle(direction), Vector3.forward);
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        InteractiveObject interactive = collision.gameObject.GetComponent <InteractiveObject>();

        if (!interactive)
        {
            return;
        }
        else if (!damageObjects.Contains(interactive.Type))
        {
            return;
        }
        interactive.GetComponent <HealthAbility>()?.DoDamage(Damage);

        collider.enabled = false;
    }
    private void Update()
    {
        bool foundSomethingToInteractWith = false;

        RaycastHit hitInfo;

        foreach (Transform checkOrigin in _checkOrigins)
        {
            LayerMask layerMask = LayerMask.GetMask("Interactive");

            // If we are holding an item, we are only going to interact with the objects that the item we are holding can interact with
            if (_player.PlayerPickAnimator.HoldingItem)
            {
                layerMask = _player.PlayerPickAnimator.InteractivePickable.InteractLayerMask;
            }

            if (Physics.Raycast(checkOrigin.position, checkOrigin.transform.forward, out hitInfo, _checkDistance, layerMask) ||
                _player.PlayerWallClimb.CanMount)
            {
                foundSomethingToInteractWith = true;
                UIManager.Instance.SetInteractiveSignal(true);

                if (_player.PlayerPickAnimator.HoldingItem && GameManager.Instance.InputManager.Interact)
                {
                    // Here, we use the item we are holding
                    _player.PlayerPickAnimator.Use(hitInfo.transform);
                    _player.transform.forward = -hitInfo.normal;
                }
                else
                {
                    // We don't need to interact with objects when we are in climb mode
                    if (_player.PlayerState.PlayerMoveState != PlayerMoveState.WallClimbing)
                    {
                        if (GameManager.Instance.InputManager.Interact && hitInfo.transform != null)
                        {
                            InteractiveObject interactiveObject = hitInfo.transform.GetComponentInChildren <InteractiveObject>();
                            if (interactiveObject != null)
                            {
                                // If it's a breakable door, then we play the kick animation first
                                InteractiveDoor interactiveDoor = interactiveObject.GetComponent <InteractiveDoor>();
                                if (interactiveDoor != null && interactiveDoor.Breakable && interactiveDoor.IsClosed)
                                {
                                    _interactiveDoor = interactiveDoor;
                                    Quaternion lookRotation = Quaternion.LookRotation((interactiveDoor.transform.position - _player.transform.position).normalized);
                                    _player.transform.rotation = Quaternion.Euler(_player.transform.rotation.eulerAngles.x, lookRotation.eulerAngles.y, _player.transform.rotation.eulerAngles.z);
                                    //_player.transform.forward = (interactiveDoor.transform.position - _player.transform.position).normalized;

                                    _player.Animator.SetTrigger("Kick");
                                }
                                else
                                {
                                    interactiveObject.Interact(transform);
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
        if (!foundSomethingToInteractWith)
        {
            UIManager.Instance.SetInteractiveSignal(false);
        }

        // if we are holding an item and we are in front of a target object of the item we are holding, then we should set the canuse variable of playerPickAnimator script
        if (_player.PlayerPickAnimator.HoldingItem && foundSomethingToInteractWith)
        {
            _player.PlayerPickAnimator.CanUse = true;
        }
        else
        {
            _player.PlayerPickAnimator.CanUse = false;
        }
    }
Esempio n. 15
0
    public override void Execute()
    {
        Camera cam = InteractiveObject.GetComponent <Camera>();

        CameraController.switchCamera(cam);
    }
Esempio n. 16
0
    /// <summary>
    /// Überprüft, ob auf dem Feld vor dem WorldObject ein interaktives Objekt liegt.
    /// </summary>
    public DynValue CheckForInteractiveObjectInFront()
    {
        //Debug.Log(gameObject.name + " looks for an Object in its front.");
        Table sensedData = new Table(script);

        InteractiveObject temp = GetComponent <RayCaster>().CheckForInteractiveObject(myInteractiveObject.direction);

        if (temp != null)
        {
            //Wenn ein Interaktives Objekt vor dem Roboter steht wird es analysiert.
            sensedData["x"]         = temp.posX;
            sensedData["y"]         = temp.posY;
            sensedData["direction"] = temp.GetFacingAngle(temp.direction);
            sensedData["movable"]   = temp.Movable;
            sensedData["grabable"]  = temp.Grabable;
            sensedData["color"]     = "none";
            if (temp.grabbedBy != null)
            {
                sensedData["grabbedBy"] = temp.grabbedBy.name;
            }
            else
            {
                sensedData["grabbedBy"] = "none";
            }

            Robot tempBot = temp.GetComponent <Robot>();
            if (tempBot != null)
            {
                sensedData["type"] = "Robot";
            }

            WorldObject tempObj = temp.GetComponent <WorldObject>();
            if (tempObj != null)
            {
                sensedData["type"]  = tempObj.objectType;
                sensedData["color"] = tempObj.objectColor.ToString();
            }
        }
        else if (GetComponent <RayCaster>().CheckForCollisionsInDirection(myInteractiveObject.direction))
        {
            //Wenn kein Interaktives Objekt vor dem Roboter steht, er aber trotzdem kollidieren würde, muss eine Wand vor ihm sein.
            sensedData["type"]      = "Wall";
            sensedData["movable"]   = false;
            sensedData["grabable"]  = false;
            sensedData["grabbedBy"] = "none";
            sensedData["direction"] = -1;
            sensedData["color"]     = "none";
            sensedData["x"]         = myInteractiveObject.posX + myInteractiveObject.direction.x;
            sensedData["y"]         = myInteractiveObject.posY + myInteractiveObject.direction.y;
        }
        else
        {
            //Wenn auch keine Kollision stattfinden würde, ist das Tile vor dem Roboter leer.
            sensedData["type"]      = "Nothing";
            sensedData["movable"]   = false;
            sensedData["grabable"]  = false;
            sensedData["grabbedBy"] = "none";
            sensedData["direction"] = -1;
            sensedData["color"]     = "none";
            sensedData["x"]         = myInteractiveObject.posX + myInteractiveObject.direction.x;
            sensedData["y"]         = myInteractiveObject.posY + myInteractiveObject.direction.y;
        }

        return(DynValue.NewTable(sensedData));
    }
Esempio n. 17
0
 public void AddIngredient(InteractiveObject ingredient)
 {
     currentBrew.Add(ingredient.GetComponent <IngredientObject>().GetIngredient());
     CheckBrew();
 }
Esempio n. 18
0
 public void OnItemTakeByVisitor(ObtainableItem item)
 {
     barrel.GetComponent <PlaysAnimationOnSight>().isAbleToInteractAfterAnimation = false;
 }