mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
84 lines
3.2 KiB
C#
84 lines
3.2 KiB
C#
|
using Microsoft.Xna.Framework;
|
||
|
using ProjectZ.InGame.GameObjects.Base;
|
||
|
using ProjectZ.InGame.GameObjects.Base.CObjects;
|
||
|
using ProjectZ.InGame.GameObjects.Base.Components;
|
||
|
using ProjectZ.InGame.GameSystems;
|
||
|
using ProjectZ.InGame.Map;
|
||
|
using ProjectZ.InGame.SaveLoad;
|
||
|
using ProjectZ.InGame.Things;
|
||
|
|
||
|
namespace ProjectZ.InGame.GameObjects.NPCs
|
||
|
{
|
||
|
internal class ObjFisherman : GameObject
|
||
|
{
|
||
|
public BodyComponent Body;
|
||
|
public readonly Animator Animator;
|
||
|
|
||
|
private readonly string _personId = "npc_fisherman";
|
||
|
|
||
|
private float _talkCount;
|
||
|
private bool _isTransitioning;
|
||
|
|
||
|
public ObjFisherman() : base("fisherman") { }
|
||
|
|
||
|
public ObjFisherman(Map.Map map, int posX, int posY) : base(map)
|
||
|
{
|
||
|
Animator = AnimatorSaveLoad.LoadAnimator("NPCs/" + _personId);
|
||
|
Animator.Play("stand");
|
||
|
|
||
|
EntityPosition = new CPosition(posX + 8, posY + 16, 0);
|
||
|
EntitySize = new Rectangle(-8, -16, 16, 16);
|
||
|
|
||
|
var sprite = new CSprite(EntityPosition);
|
||
|
var animationComponent = new AnimationComponent(Animator, sprite, new Vector2(0, 0));
|
||
|
|
||
|
Game1.GameManager.SaveManager.SetString("enterPond", "no");
|
||
|
|
||
|
Body = new BodyComponent(EntityPosition, -8, -11, 15, 11, 8);
|
||
|
|
||
|
AddComponent(BodyComponent.Index, Body);
|
||
|
AddComponent(CollisionComponent.Index, new BodyCollisionComponent(Body, Values.CollisionTypes.Normal));
|
||
|
AddComponent(InteractComponent.Index, new InteractComponent(Body.BodyBox, Interact));
|
||
|
AddComponent(AnimationComponent.Index, animationComponent);
|
||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
||
|
AddComponent(DrawComponent.Index, new BodyDrawComponent(Body, sprite, Values.LayerPlayer));
|
||
|
AddComponent(DrawShadowComponent.Index, new DrawShadowCSpriteComponent(sprite));
|
||
|
AddComponent(KeyChangeListenerComponent.Index, new KeyChangeListenerComponent(KeyChanged));
|
||
|
}
|
||
|
|
||
|
private void Update()
|
||
|
{
|
||
|
if (_talkCount > 0)
|
||
|
_talkCount -= Game1.DeltaTime;
|
||
|
else
|
||
|
{
|
||
|
Animator.Play("stand");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private bool Interact()
|
||
|
{
|
||
|
Animator.Play("talk");
|
||
|
_talkCount = 250;
|
||
|
|
||
|
Game1.GameManager.StartDialogPath(_personId);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private void KeyChanged()
|
||
|
{
|
||
|
// spawn object
|
||
|
if (_isTransitioning || Game1.GameManager.SaveManager.GetString("enterPond") != "yes") return;
|
||
|
|
||
|
_isTransitioning = true;
|
||
|
|
||
|
MapManager.ObjLink.MapTransitionStart = MapManager.ObjLink.EntityPosition.Position;
|
||
|
MapManager.ObjLink.MapTransitionEnd = MapManager.ObjLink.EntityPosition.Position;
|
||
|
MapManager.ObjLink.TransitionOutWalking = false;
|
||
|
|
||
|
// append a map change
|
||
|
((MapTransitionSystem)Game1.GameManager.GameSystems[typeof(MapTransitionSystem)]).AppendMapChange(
|
||
|
"pond.map", "entry", true, false, Values.MapTransitionColor, false);
|
||
|
}
|
||
|
}
|
||
|
}
|