void OnEnable()
 {
     rb                = GetComponent <Rigidbody2D>();
     boostTimer        = 0;
     boostDirection    = SpacecraftAction.Direction.None;
     rotationDirection = SpacecraftAction.Direction.None;
     rotationTimer     = 0;
 }
Esempio n. 2
0
    public static SpacecraftAction ParseCard(ActionCard card)
    {
        //Debug.Log(card.type);
        if (card.type.Equals("forward") || card.type.Equals("backward"))
        {
            SpacecraftAction.Direction direction = SpacecraftAction.Direction.None;
            switch (card.type)
            {
            case "forward":
                direction = SpacecraftAction.Direction.Forwards;
                break;

            case "backward":
                direction = SpacecraftAction.Direction.Backwards;
                break;
            }
            float force    = card.forceOrVelocity;
            float duration = card.duration;
            float fuelCost = card.fuelCost;
            return(new SpacecraftBoost(direction, fuelCost, force, duration));
        }
        else if (card.type.Contains("rotate"))
        {
            SpacecraftAction.Direction direction = SpacecraftAction.Direction.None;
            switch (card.type)
            {
            case "rotateLeft":
                direction = SpacecraftAction.Direction.Left;
                break;

            case "rotateRight":
                direction = SpacecraftAction.Direction.Right;
                break;
            }
            float velocity = card.forceOrVelocity;
            float duration = card.duration;
            float fuelCost = 1;
            return(new SpacecraftRotation(direction, fuelCost, velocity, duration));
        }
        else if (card.type.Equals("gravityMine"))
        {
            return(new SpacecraftWeaponAction(SpacecraftWeaponAction.WeaponType.GravityMine, card.fuelCost));
        }
        else if (card.type.Equals("laser"))
        {
            return(new SpacecraftWeaponAction(SpacecraftWeaponAction.WeaponType.Laser, card.fuelCost));
        }
        else if (card.type.Equals("rocket"))
        {
            return(new SpacecraftWeaponAction(SpacecraftWeaponAction.WeaponType.Rocket, card.fuelCost));
        }
        else if (card.type.Equals("none"))
        {
            return(new SpacecraftRotation(SpacecraftRotation.Direction.Forwards, 0, 0, 2));
        }
        return(null);
    }
 public void Rotate(SpacecraftAction.Direction direction, float speed, float duration)
 {
     if (direction == SpacecraftAction.Direction.Left || direction == SpacecraftAction.Direction.Right)
     {
         rotationDirection = direction;
         angularSpeed      = speed;
         rotationTimer     = duration;
     }
 }
 public void Boost(SpacecraftAction.Direction direction, float force, float duration)
 {
     if (direction == SpacecraftAction.Direction.Forwards || direction == SpacecraftAction.Direction.Backwards)
     {
         thrustersController.Boost(direction);
         boostDirection = direction;
         boostForce     = force;
         boostTimer     = duration;
         EventManager.TriggerEvent("spacecraft_boost_start");
     }
 }
    void Update()
    {
        if (rotationDirection != SpacecraftAction.Direction.None)
        {
            rotationTimer -= Time.deltaTime;
            float fac = Time.deltaTime;
            if (rotationTimer < 0)
            {
                fac              += rotationTimer;
                rotationTimer     = 0;
                rotationDirection = SpacecraftAction.Direction.None;
            }
            if (rotationDirection == SpacecraftAction.Direction.Left)
            {
                transform.Rotate(new Vector3(0, 0, angularSpeed * fac));
            }
            else
            {
                transform.Rotate(new Vector3(0, 0, -angularSpeed * fac));
            }

            float dot = Vector2.Dot(transform.right.normalized, rb.velocity.normalized);
            if (dot >= 0)
            {
                rb.velocity = transform.right * rb.velocity.magnitude;
            }
            else
            {
                rb.velocity = transform.right * -rb.velocity.magnitude;
            }
        }

        if (boostDirection != SpacecraftAction.Direction.None)
        {
            boostTimer -= Time.deltaTime;
            float fac = Time.deltaTime;
            if (boostTimer < 0)
            {
                fac           += boostTimer;
                boostTimer     = 0;
                boostDirection = SpacecraftAction.Direction.None;
                EventManager.TriggerEvent("spacecraft_boost_stop");
                thrustersController.StopBoost();
            }
            if (boostDirection == SpacecraftAction.Direction.Forwards)
            {
                rb.AddRelativeForce(new Vector2(boostForce * fac, 0));
            }
            else if (boostDirection == SpacecraftAction.Direction.Backwards)
            {
                rb.AddRelativeForce(new Vector2(-boostForce * fac, 0));
            }
        }
    }
    public void Boost(SpacecraftAction.Direction direction)
    {
        switch (direction)
        {
        case SpacecraftAction.Direction.Forwards:
            ActivateForwardsBoosters();
            return;

        case SpacecraftAction.Direction.Backwards:
            ActivateBackwardsBoosters();
            return;
        }
    }