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

Revision 4592, 3.5 KB checked in by dezhidki, 9 years ago (diff)

Lisätty toimiva sotilas. Korjattu OrderMove:n epätarkkuuksia. Lisätty AStariin muuttuja, jolla voi jättää loppupisteen läpipääsemättömyyden huomioimatta.

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 AnimationHelper choppingTimer;
20        private int currentSpriteX;
21
22        public MobWoodcutter(Level level, Player owner)
23            : base(level, owner)
24        {
25            HasHealth = true;
26            maxHealth = 15;
27
28            spriteSize.X = 17;
29            spriteSize.Y = 20;
30            screenRectOffset.Update(8, 12, 8 + spriteSize.X, 12 + spriteSize.Y);
31            renderOffset.Y = 20;
32
33            highlightOffset.X = 11;
34
35            rectOffset.Update(-4.0F, -4.0F, 5.0F, 5.0F);
36            isSolid = true;
37
38            moveSpeed = 1.0F;
39            choppingAnimation = new AnimationHelper(10, 5, false, 3);
40            choppingTimer = new AnimationHelper(30, 1);
41            choppingTimer.RoundEnded += delegate()
42            {
43                currentTarget.AvaliableLogs--;
44                if (currentTarget.AvaliableLogs <= 0)
45                {
46                    StopChopping();
47                    currentTarget.Remove();
48                    currentTarget = null;
49                }
50            };
51        }
52
53        private void StartChopping()
54        {
55            choppingAnimation.Start();
56            choppingTimer.Start();
57            isChopping = true;
58        }
59
60        private void StopChopping()
61        {
62            isChopping = false;
63            isOrderedToChop = false;
64            choppingAnimation.Stop();
65            choppingAnimation.Reset();
66            choppingTimer.Stop();
67            choppingTimer.Reset();
68        }
69
70        public override void OnFunctionClick(float x, float z)
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(te.X, te.Z, 20.0F, true));
79            }
80            else
81            {
82                if (isChopping)
83                {
84                    StopChopping();
85                    currentTarget = null;
86                }
87                SetOrder(new OrderMove(x, z));
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                choppingTimer.UpdateStep();
105            }
106
107            currentSpriteX = isChopping ? choppingAnimation.CurrentFrame : walkingAnimation.CurrentFrame;
108        }
109
110        public override void Render(RenderHelper renderer)
111        {
112            base.Render(renderer);
113            renderer.Render(ScreenPos, currentSpriteX, dirID, Resources.SPRITESHEET_WOODCUTTER, colorizer, Viewport.ZOOM);
114        }
115    }
116}
Note: See TracBrowser for help on using the repository browser.