private void Awake()
 {
     World.Calculate();
     Controlable.Calculate();
     FreeWay.Calculate();
     Car.Calculate();
 }
Beispiel #2
0
    // Update is called once per frame
    void Update()
    {

        Ray my_ray = my_camera.ScreenPointToRay(Input.mousePosition);
        Debug.DrawRay(my_ray.origin, 20 * my_ray.direction);

        RaycastHit info_on_hit;

        if (Physics.Raycast(my_ray, out info_on_hit))
        {
            Controlable my_object = info_on_hit.transform.GetComponent<Controlable>();
            if (currently_selected_object)
            {
                if (my_object != currently_selected_object)
                {
                    currently_selected_object.deselect();
                    my_object.isSelected();
                    currently_selected_object = my_object;
                }
            }
            else
            {
                my_object.isSelected();
                currently_selected_object = my_object;
            }

            my_object.isSelected = true;
            my_object.move_up();
        }
        }
Beispiel #3
0
 private static void Casulties(float victoryScore, Controlable target)
 {
     foreach (Unit unit in target.Units)
     {
         float UnitCount = unit.UnitCount;
         UnitCount     -= UnitCount * victoryScore;
         unit.UnitCount = Convert.ToInt32(Math.Floor(UnitCount));
     }
 }
Beispiel #4
0
 //Action
 public void Attack(Controlable target)
 {
     //tjekker om positionen er 1 tile væk
     if ((Position.X == target.Position.X + 1 || Position.X == target.Position.X - 1 || Position.X == target.Position.X) && (Position.Y == target.Position.Y + 1 || Position.Y == target.Position.Y - 1 || Position.Y == target.Position.Y))
     {
         // tjek hvis den ikke er diagonal og ikke sig selv
         if (target.Position.X != Position.X ^ target.Position.Y != Position.Y)
         {
             Game.Combat(this, target, Worldspace);
         }
     }
 }
Beispiel #5
0
        public static CombatOutcome Combat(WorldspaceUnit attacker, Controlable defender, Worldspace worldspace)
        {
            int attackerDmg = 0;
            int defenderDmg = 0;

            for (int i = 0; i < attacker.Units.Count; i++)
            {
                attackerDmg += attacker.Units[i].Damage;
            }

            for (int i = 0; i < defender.Units.Count; i++)
            {
                defenderDmg += defender.Units[i].Damage;
            }

            if (attackerDmg > defenderDmg)
            {
                worldspace.Space[defender.Position.X, defender.Position.Y].TopLayer = new EmptySpace();
                if (defender.GetType() == typeof(WorldspaceUnit))
                {
                    defender.Owner.ActiveUnits.Remove((WorldspaceUnit)defender);
                }
                else
                {
                    defender.Owner.ActiveStructures.Remove((WorldspaceStructure)defender);
                }
                Casulties(defenderDmg / attackerDmg, attacker);
                return(CombatOutcome.Victory);
            }
            else if (attackerDmg < defenderDmg)
            {
                worldspace.Space[attacker.Position.X, attacker.Position.Y].TopLayer = new EmptySpace();
                attacker.Owner.ActiveUnits.Remove(attacker);
                Casulties(attackerDmg / defenderDmg, defender);
                return(CombatOutcome.Defeat);
            }
            else
            {
                worldspace.Space[defender.Position.X, defender.Position.Y].TopLayer = new EmptySpace();
                worldspace.Space[attacker.Position.X, attacker.Position.Y].TopLayer = new EmptySpace();
                if (defender.GetType() == typeof(WorldspaceUnit))
                {
                    defender.Owner.ActiveUnits.Remove((WorldspaceUnit)defender);
                }
                else
                {
                    defender.Owner.ActiveStructures.Remove((WorldspaceStructure)defender);
                }
                attacker.Owner.ActiveUnits.Remove(attacker);
                return(CombatOutcome.Draw);
            }
        }
        static ISolidWeapon CreateSubWeapon()
        {
            ISolidWeapon solidweapon = new Controlable(
                SubDefaultLifeTime,
                new PhysicsState(),
                DefaultBodyFlags,
                SubDefaultShape,
                new ShipMovementInfo(DefaultMovementInfo),
                new ShipState(SubDefaultState),
                new ControlableSounds(),
                new WeaponsLogic(TargetingInfo.All,
                                 new EffectCollection(SubDefaultEffectCollection)));

            return(solidweapon);
        }
Beispiel #7
0
        static ISolidWeapon CreateWeapon()
        {
            ISolidWeapon w = new Controlable(
                DefaultLifeTime,
                new PhysicsState(),
                DefaultBodyFlags,
                DefaultShape,
                new ShipMovementInfo(DefaultMovementInfo),
                new ShipState(DefaultState),
                new ControlableSounds(),
                new WeaponsLogic(TargetingInfo.All,
                                 new EffectCollection(DefaultEffectCollection)));

            w.ControlHandler = new DefaultControlHandler();
            w.AddControler(null, new MissileControler(TargetingInfo.FromRequireAll(TargetingTypes.Enemy | TargetingTypes.Ship)));
            return(w);
        }
        static ISolidWeapon[] CreateWeapons()
        {
            Coefficients coe   = TimeWarp.Coefficients;
            int          count = 4;

            ISolidWeapon[] weapons = new ISolidWeapon[count];
            for (int pos = 0; pos < count; ++pos)
            {
                float radius = 5 + 5 * pos;
                weapons[pos] = new Controlable(
                    DefaultLifeTimes[pos],
                    MassInertia.FromSolidCylinder(.1f, radius),
                    new PhysicsState(),
                    DefaultBodyFlags,
                    new ICollidableBodyPart[] { new RigidBodyPart(ALVector2D.Zero, (Polygon2D)Polygon2D.FromNumberofSidesAndRadius(8, radius), coe) },
                    new ShipMovementInfo(DefaultMovementInfo),
                    new ShipState(DefaultState[pos]),
                    new ControlableSounds("EnergyChargeUp", null),
                    new WeaponsLogic(TargetingInfo.All,
                                     new EffectCollection(DefaultEffectCollections[pos])));
            }
            return(weapons);
        }
    void Update()
    {
        if (my_obj && ((Input.acceleration.x > 2 || Input.acceleration.x < -2) || (Input.acceleration.y > 2 || Input.acceleration.y < -2) || (Input.acceleration.z > 2 || Input.acceleration.z < -2)))
        {
            my_obj.transform.localScale += new Vector3(1, 1, 1);
        }

        if (my_obj && my_gyro != Input.gyro)
        {
            my_obj.transform.rotation = my_gyro.attitude;
            print(my_obj.transform.rotation);
        }
        my_gyro = Input.gyro;
        if (Input.touchCount > 0)
        {
            if (tapped)
            {
                countdown -= Time.deltaTime;
            }

            if (Input.touchCount == 2)
            {
                Touch touch1 = Input.GetTouch(0);
                Touch touch2 = Input.GetTouch(1);

                Vector2 touchOnePrevPos    = touch1.position - touch1.deltaPosition;
                Vector2 touchTwoPrevPos    = touch2.position - touch2.deltaPosition;
                float   prevTouchDeltaMag  = (touchOnePrevPos - touchTwoPrevPos).magnitude;
                float   touchDeltaMag      = (touch1.position - touch2.position).magnitude;
                float   deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag;
                float   pinchAmount        = deltaMagnitudeDiff * 0.2f * Time.deltaTime;

                if (deltaMagnitudeDiff > 2 || deltaMagnitudeDiff < -2)
                {
                    if (my_obj)
                    {
                        my_obj.transform.localScale -= new Vector3(pinchAmount, pinchAmount, pinchAmount);
                    }
                    if (!my_obj)
                    {
                        Vector3 focalPoint  = Vector3.zero;
                        Vector3 direction   = my_camera.transform.position - focalPoint;
                        float   newDistance = direction.magnitude / deltaMagnitudeDiff;
                        my_camera.transform.position = newDistance * direction.normalized;
                    }
                }

                else
                {
                    Vector2 diff = touch2.position - touch1.position;



                    var angle = Mathf.Rad2Deg * (Mathf.Atan2(diff.y, diff.x));

                    previousTouch2 = touch2;
                    if (my_obj)
                    {
                        var initialobj_orie = my_obj.transform.rotation;
                        my_obj.transform.rotation = initialobj_orie * Quaternion.AngleAxis(angle - initialobj_angle, my_obj.transform.forward);
                        initialobj_angle          = angle;
                    }
                    else
                    {
                        var initialcam_orie = my_camera.transform.rotation;
                        my_camera.transform.rotation = initialcam_orie * Quaternion.AngleAxis(angle - initialcam_angle, my_camera.transform.forward);
                        initialcam_angle             = angle;
                    }
                }
            }



            if (Input.GetTouch(0).phase == TouchPhase.Began)
            {
                tapped = true;

                tapIsUp = false;
            }

            if (Input.touchCount == 1)
            {
                Touch      current_touch = Input.GetTouch(0);
                Ray        my_ray        = Camera.main.ScreenPointToRay(current_touch.position);
                RaycastHit info;

                if (countdown > 0)
                {
                    if (Physics.Raycast(my_ray, out info))
                    {
                        Controlable object_hit = info.transform.GetComponent <Controlable>();

                        if (object_hit)
                        {
                            if (my_obj)
                            {
                                my_obj.deselect();
                                my_obj = null;
                            }
                            object_hit.select(object_hit);
                            my_obj = object_hit;
                        }

                        else
                        {
                            if (my_obj)
                            {
                                my_obj.deselect();
                                my_obj = null;
                            }
                        }
                    }
                    else
                    {
                        if (my_obj)
                        {
                            my_obj.deselect();
                            my_obj = null;
                        }
                    }
                }

                else
                {
                    if (my_obj)
                    {
                        Vector3 cameraPos = my_camera.transform.position;
                        my_obj.dragObject(my_ray, cameraPos);
                    }

                    if (!my_obj)
                    {
                        my_camera.transform.position += cameraSpeed * my_camera.transform.right * current_touch.deltaPosition.x + cameraSpeed * my_camera.transform.up * current_touch.deltaPosition.y;
                    }
                }
            }

            if (Input.touchCount == 3 && my_obj)
            {
                Instantiate(my_obj, new Vector3(my_obj.transform.position.x * 2.0F, 0, 0), Quaternion.identity);
                my_obj = null;
            }
            if (Input.GetTouch(0).phase == TouchPhase.Ended)
            {
                tapped    = false;
                countdown = 0.3f;
            }
        }
    }
 internal void select(Controlable tempObJ)
 {
     go_red();
     my_obj = tempObJ;
 }
Beispiel #11
0
 /// <summary>
 /// A method to remove a controlable from the list of controlables the player is pushing input to.
 /// </summary>
 /// <param name="controlable">The controlable to remove.</param>
 public void removeControlable(Controlable controlable)
 {
     controlables.Remove(controlable);
 }
Beispiel #12
0
 /// <summary>
 /// A method to add a Controlable to the player, that Controlable will receive input state from the player as long as the player is being updated.
 /// </summary>
 /// <param name="controlable">A object that implements the Controlable interface.</param>
 public void addControlable(Controlable controlable)
 {
     controlables.Add(controlable);
 }
Beispiel #13
0
 /// <summary>
 /// A method to remove a controlable from the list of controlables the player is pushing input to.
 /// </summary>
 /// <param name="controlable">The controlable to remove.</param>
 public void removeControlable(Controlable controlable)
 {
     controlables.Remove(controlable);
 }
Beispiel #14
0
 /// <summary>
 /// A method to add a Controlable to the player, that Controlable will receive input state from the player as long as the player is being updated.
 /// </summary>
 /// <param name="controlable">A object that implements the Controlable interface.</param>
 public void addControlable(Controlable controlable)
 {
     controlables.Add(controlable);
 }
 internal void deselect()
 {
     go_white();
     my_obj = null;
 }
Beispiel #16
0
 // Start is called before the first frame update
 void Start()
 {
     my_obj = GetComponent <Controlable>();
 }
 // Start is called before the first frame update
 void Start()
 {
     des_Destionation = transform.position;
     my_renderer      = GetComponent <Renderer>();
     my_obj           = GetComponent <Controlable>();
 }