示例#1
0
        public override void Update()
        {
            if (World.Ticks >= CreatedTicks + TicksToBuild)
            {
                Constructing = false;
            }

            if (!Constructing)
            {
                if (TargetEntity != null)
                {
                    float distance = Vector2.Distance(new Vector2(Position.X, Position.Y), new Vector2(TargetEntity.Position.X, TargetEntity.Position.Y));
                    if (distance > Range || !TargetEntity.IsAlive)
                    {
                        TargetEntity = null;
                    }
                }
                if (TargetEntity == null)
                {
                    IEntity nearestEnemyHarvester = World.Entities.Where(e => e.Player != Player && e is Harvester)
                                                    .OrderBy(e => Vector2.Distance(new Vector2(Position.X, Position.Y), new Vector2(e.Position.X, e.Position.Y)))
                                                    .FirstOrDefault();
                    if (nearestEnemyHarvester != null)
                    {
                        float distance = Vector2.Distance(new Vector2(Position.X, Position.Y), new Vector2(nearestEnemyHarvester.Position.X, nearestEnemyHarvester.Position.Y));
                        if (distance < Range)
                        {
                            TargetEntity = nearestEnemyHarvester;
                        }
                    }
                }

                if (TargetEntity != null)
                {
                    float targetRotation   = VectorHelpers.GetRotationToFace(PositionVector, TargetEntity.PositionVector) ?? Rotation;
                    float rotationDiff     = targetRotation - Rotation;
                    float rotationPerFrame = RotationSpeed;
                    //Console.WriteLine("Source: {0}, Target: {1}, Diff: {2} MaxPerFrame: {3}", Rotation, targetRotation, rotationDiff, rotationPerFrame);
                    if (rotationDiff < rotationPerFrame)
                    {
                        Rotation = targetRotation;
                        if (LastShotTicks == null || World.Ticks - LastShotTicks >= FiringIntervalTicks)
                        {
                            int x = Math.Max(0, Position.X - Sprites.Turret.Width / 2);
                            int y = Math.Max(0, Position.Y - Sprites.Turret.Height / 2);


                            Projectile bullet = new CannonShot(World, Player, Position, Target);
                            World.AddProjectile(bullet);
                            LastShotTicks = World.Ticks;
                            Sounds.CannonShot.Play();
                        }
                    }
                    else
                    {
                        Rotation += rotationPerFrame;
                    }
                }
            }
        }
示例#2
0
 // Use this for initialization
 void Start()
 {
     reses = new resList();
     if (cannon != null)
     {
         cs = cannon.GetComponent <CannonShot>();
     }
 }
示例#3
0
    void Awake()
    {
        //mBody = GetComponent<Rigidbody>();
        visibilityRadius = NetworkManager.visibilityRadius;
        //Instantiate(inventory);
        inventory      = GetComponent <Inventory>();
        ship_equipment = GetComponent <ShipEquipment>();
        //player_equipment = GetComponent<PlayerEquipment>();

        movement                   = GetComponent <BoatMovement>();
        playerEnterCollider        = GetComponentInChildren <SphereCollider>();
        playerEnterCollider.radius = NetworkManager.visibilityRadius / 2;
        //enable collider for ship when we have player character
        playerEnterCollider.enabled = false;
        mysql            = FindObjectOfType <Mysql>();
        cannonShot       = GetComponent <CannonShot>();
        cannonController = GetComponent <CannonController>();
        spawnManager     = FindObjectOfType <SpawnManager>();
    }
示例#4
0
 public void ShootCannon()
 {
     CannonShot?.Invoke(_position, _direction);
 }