source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Entities/EntityArrow.cs @ 4646

Revision 4646, 2.3 KB checked in by dezhidki, 6 years ago (diff)

Muokattu sotilaita viimeiseen muotoon.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using CastleMaster.World;
6using CastleMaster.Units;
7using CastleMaster.Players;
8using CastleMaster.Units.Mobs;
9using Microsoft.Xna.Framework;
10using CastleMaster.Physics;
11using CastleMaster.Graphics;
12using System.Diagnostics;
13
14namespace CastleMaster.Entities
15{
16    public class EntityArrow : Entity
17    {
18        private float moveDir, pushPower;
19        private int dirID, damage;
20        private Team enemyTeam;
21        private Unit target, archer;
22
23        public EntityArrow(Level level, int damage, float pushPower, Unit target, Unit archer, Team attackerTeam)
24            : base(level)
25        {
26            width = 3.0F;
27            depth = 1.0F;
28            this.damage = damage;
29            this.pushPower = pushPower;
30            this.target = target;
31            this.archer = archer;
32            enemyTeam = Game.GetEnemyTeam(attackerTeam);
33            moveSpeed = 2.0F;
34
35            renderOffset.Y = 16;
36            rectOffset.Update(-1.0F, -0.5F, 1.0F, 0.5F);
37            isSolid = true;
38        }
39
40        public override bool IsSolidTo(Entity ent)
41        {
42            Unit u = ent as Unit;
43            if (u != null)
44                return u.Owner.Team.ID == enemyTeam.ID;
45            return base.IsSolidTo(ent);
46        }
47
48        public override void Init()
49        {
50            base.Init();
51
52            moveDir = (float)(Math.Atan2(target.Z - Z, target.X - X));
53            dirID = (int)(Math.Floor(moveDir * 8 / MathHelper.TwoPi + 0.5F)) & 7;
54        }
55
56        public override void OnCollidedWith(BoundingRectangleOwner colliding)
57        {
58            Unit u = colliding as Unit;
59            if (u != null && u.CanBeHurtBy(archer))
60                u.Damage(archer, damage, moveDir, pushPower);
61            Remove();
62        }
63
64        public override void OnTriedExitLevel()
65        {
66            Remove();
67        }
68
69        public override void Update()
70        {
71            base.Update();
72
73            Move((float)Math.Cos(moveDir) * moveSpeed, (float)Math.Sin(moveDir) * moveSpeed);
74        }
75
76        public override void Render(RenderHelper renderer)
77        {
78            renderer.Render(ScreenPos, 6, dirID, Resources.SPRITESHEET_RANGER, Viewport.ZOOM);
79        }
80    }
81}
Note: See TracBrowser for help on using the repository browser.