// Copyright 2014-2017 ClassicalSharp | Licensed under BSD-3 using System; using OpenTK; namespace ClassicalSharp.Entities.Mobs { public class MobEntity : Entity { LocalInterpComponent interp; CollisionsComponent collisions; PhysicsComponent physics; static HacksComponent hacks = new HacksComponent(null, null); AI ai; public MobEntity(Game game, string model) : base(game) { StepSize = 0.5f; SetModel(model); interp = new LocalInterpComponent(game, this); collisions = new CollisionsComponent(game, this); physics = new PhysicsComponent(game, this); physics.hacks = hacks; physics.collisions = collisions; if (Utils.CaselessEquals(model, "pig") || Utils.CaselessEquals(model, "sheep")) { ai = new FleeAI(game, this); } else { ai = new HostileAI(game, this); } } public override void Despawn() { } public override void RenderName() { } // TODO: this is just so the entities do something, remove later static Random rand = new Random(); public override void Tick(double delta) { if (game.World.IsNotLoaded) return; interp.AdvanceState(); physics.UpdateVelocityState(); ai.Tick(game.LocalPlayer); physics.PhysicsTick(ai.MoveVelocity); interp.next.Pos = Position; Position = interp.prev.Pos; anim.UpdateAnimState(interp.prev.Pos, interp.next.Pos, delta); } public override void SetLocation(LocationUpdate update, bool interpolate) { interp.SetLocation(update, interpolate); } public override void RenderModel(double deltaTime, float t) { Position = Vector3.Lerp(interp.prev.Pos, interp.next.Pos, t); interp.LerpAngles(t); anim.GetCurrentAnimState(t); Model.Render(this); } } }