source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Units/Mobs/MobWoodcutter.cs @ 4635

Revision 4635, 3.5 KB checked in by dezhidki, 6 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using CastleMaster.World;
6using CastleMaster.Players;
7using CastleMaster.Graphics;
8using IsometricEngineTest.Ai.Orders;
9using Microsoft.Xna.Framework;
10using CastleMaster.Entities.TileEntities;
11
12namespace CastleMaster.Units.Mobs
13{
14    public class MobWoodcutter : Mob
15    {
16        private TileEntityTree currentTarget;
17        private bool isChopping = false, isOrderedToChop = false;
18        private AnimationHelper choppingAnimation;
19        private int currentSpriteX;
20
21        public MobWoodcutter(Level level, Player owner)
22            : base(level, owner)
23        {
24            HasHealth = true;
25            maxHealth = 20;
26
27            spriteSize.X = 17;
28            spriteSize.Y = 20;
29            screenRectOffset.Update(8, 12, 8 + spriteSize.X, 12 + spriteSize.Y);
30            renderOffset.Y = 20;
31
32            highlightOffset.X = 11;
33
34            rectOffset.Update(-4.0F, -4.0F, 5.0F, 5.0F);
35            isSolid = true;
36
37            moveSpeed = 2.0F;
38            choppingAnimation = new AnimationHelper(10, 5, false, 3);
39            choppingAnimation.RoundEnded += delegate()
40            {
41                currentTarget.AvaliableLogs--;
42                if (currentTarget.AvaliableLogs <= 0)
43                {
44                    StopChopping();
45                    currentTarget.Remove();
46                    currentTarget = null;
47                }
48            };
49        }
50
51        public override int TypeID
52        {
53            get { return 0; }
54        }
55
56        private void StartChopping()
57        {
58            choppingAnimation.Start();
59            isChopping = true;
60        }
61
62        private void StopChopping()
63        {
64            isChopping = false;
65            isOrderedToChop = false;
66            choppingAnimation.Stop();
67            choppingAnimation.Reset();
68        }
69
70        public override void OnFunctionClick(float x, float z, bool wasCalledBefore)
71        {
72            TileEntity te = level.GetTileEntity((int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE));
73            if (te != null && typeof(TileEntityTree).IsAssignableFrom(te.GetType()))
74            {
75                if (currentTarget != null) StopChopping();
76                isOrderedToChop = true;
77                currentTarget = (TileEntityTree)te;
78                SetOrder(new OrderMove(currentTarget.X, currentTarget.Z, 20.0F, true, !wasCalledBefore));
79            }
80            else
81            {
82                if (isChopping)
83                {
84                    StopChopping();
85                    currentTarget = null;
86                }
87                SetOrder(new OrderMove(x, z, createNewPathFinder: !wasCalledBefore));
88            }
89        }
90
91        protected override void OnOrderFinished()
92        {
93            if (isOrderedToChop)
94                StartChopping();
95        }
96
97        public override void Update()
98        {
99            base.Update();
100
101            if (isChopping)
102            {
103                choppingAnimation.UpdateStep();
104            }
105
106            currentSpriteX = isChopping ? choppingAnimation.CurrentFrame : walkingAnimation.CurrentFrame;
107        }
108
109        public override void Render(RenderHelper renderer)
110        {
111            base.Render(renderer);
112            renderer.Render(ScreenPos, currentSpriteX, dirID, Resources.SPRITESHEET_WOODCUTTER, colorizer, Viewport.ZOOM);
113        }
114    }
115}
Note: See TracBrowser for help on using the repository browser.