public void AddNewMonster(int ID, int monsterID, string monsterName, int level, int HP, int maxHP, int ATK, int DEF, int movementSpeed, Vector2 position, Vector2 targetPosition) { var monsterPrefab = Resources.Load <GameObject>("Prefab/Monster/" + monsterID); if (monsterPrefab) { GameObject newMonster = Instantiate(monsterPrefab, position, Quaternion.identity); if (!isMapReady) { newMonster.GetComponent <Rigidbody2D>().simulated = false; } MonsterStatus ms = newMonster.GetComponent <MonsterStatus>(); ms.SetID(ID); ms.AddInformation(monsterID, monsterName); ms.AddStatus(level, HP, maxHP, ATK, DEF); ms.SetMonsterSpeed(movementSpeed); newMonster.GetComponent <OnlineMonster>().MoveTo(targetPosition); newMonster.transform.SetParent(this.onlineMonster.transform); onlineMonsterList.Add(ID, newMonster); } else { Debug.Log("Not found monster prefab ID : " + monsterID); } }
public void ApplyMonsterBuff(MonsterStatus status, int x, int skillId, int duration, MobSkill skill) { var timerManager = TimerManager.Instance; var applyPacket = PacketCreator.ApplyMonsterStatus(ObjectId, new Dictionary <MonsterStatus, int> { { status, x } }, skillId, true, 0, skill); Map.BroadcastMessage(applyPacket, Position); if (GetController() != null && !GetController().VisibleMapObjects.Contains(this)) { GetController().Client.Send(applyPacket); } timerManager.RunOnceTask(() => { if (IsAlive) { var packet = PacketCreator.CancelMonsterStatus(ObjectId, new Dictionary <MonsterStatus, int> { { status, x } }); Map.BroadcastMessage(packet, Position); if (GetController() != null && !GetController().VisibleMapObjects.Contains(this)) { GetController().Client.Send(packet); } MonsterBuffs.Remove(status); } }, duration); MonsterBuffs.Add(status); }
private void OnTriggerEnter2D(Collider2D col) { PlayerStatus status = pManager.Status; if (col.gameObject.tag == "Item") { target = col.gameObject; } //モンスターの投擲物に当たった時 if (col.gameObject.tag == "Monster") { MonsterStatus mStatus = col.gameObject.GetComponent <MonsterController>().Status; if (mStatus.type == MonsterStatus.MonsterType.HARB) { return; } int atk = mStatus.GetAttack; StartCoroutine(TransWaitTime()); player_ctr.HPDown(atk); StartCoroutine(PlayerNockBackWaitTime()); } if (col.GetComponent <GimmickInfo>()) { switch (col.GetComponent <GimmickInfo>().type) { case GimmickInfo.GimmickType.GROWTREE: status.gimmick_state = PlayerStatus.GimmickState.ONTREE; break; default: break; } } }
//---------------------------------------------------------------------------- /// <summary> /// 타겟에게 나의 능력치를 기반하여 HP를 감소시킨다 /// </summary> void Enter_AttackState() { MonsterStatus myAttribute = gameObject.GetComponent <MonsterStatus>(); if (ProcessDeadState(myAttribute)) { return; } //애니메이션 실행 Playerstatus targetAttribute = Target.GetComponent <Playerstatus>(); targetAttribute.current_hp -= myAttribute.damage; Debug.Log("Attack : " + gameObject.name + "->" + Target.name); Debug.Log("Hp : " + targetAttribute.current_hp.ToString()); CharacterStateMachine targetStateMachine = Target.GetComponent <CharacterStateMachine>(); targetStateMachine.SetState(State.DAMAGED); //대상이 죽은 경우는 타겟 해제 if (targetAttribute.current_hp <= 0) { Target = null; } StartCoroutine("TransStateToIdle", myAttribute.Atk_delay); }
void Update_IdleState() { MonsterStatus myAttribute = gameObject.GetComponent <MonsterStatus>(); if (ProcessDeadState(myAttribute)) { return; } //타겟이 계속 바뀌면 안됨으로, 타겟이 유효한 경우는 유지되도록 bool isFindTarget = false; if (Target != null) { Playerstatus targetAttribute = Target.GetComponent <Playerstatus>(); if (targetAttribute.current_hp > 0) { isFindTarget = true; } } if (!isFindTarget) { //Target = FindEnemy(searchDistanceMeter: 2.0f); if (Target != null) { //적을 찾았으면 대상으로 지정하고 이동 Playerstatus targetAttribute = Target.GetComponent <Playerstatus>(); Vector3 dir = Target.transform.position - transform.position; dir.Normalize(); float distance = Vector3.Distance(Target.transform.position, transform.position); if (distance > targetAttribute.playerRadius + myAttribute.monsterrad) { transform.LookAt(Target.transform.position); TargetPosition = Target.transform.position; SetState(State.MOVE); } else { if (nextAttackCooltime_ == 0.0f || nextAttackCooltime_ < Time.time) { nextAttackCooltime_ = Time.time + myAttribute.Atk_delay; SetState(State.ATTACK); } } } else { //적을 못 찾았으면 랜덤한 위치로 이동한다. // TargetPosition = FindRandomTargetPosition(minRangeMeter: 4, maxRangeMeter: 8); SetState(State.MOVE); } } }
public void Generate(int num) { for (int i = 0; i < existEnemys.Length; i++) { if (existEnemys[i] == null) { Vector3 pos = new Vector3(0, 0, 0); // pos = new Vector3(Random.Range(6,-45), 0, Random.Range(-12,10)); pos = this.transform.position; if (num == -1 || num >= Monsters.Length) { num = Random.Range(0, Monsters.Length); } existEnemys [i] = Instantiate(Monsters [num], pos, Quaternion.identity) as GameObject; MonsterStatus ms = existEnemys [i].GetComponent <MonsterStatus> (); ms.m_Level = m_level; ms.LoadMonsterData(); //モンスターの高さ float monsterHeight = ms.monsterSize; pos.y += monsterHeight; //モンスターの上にHPゲージをつける GameObject HP_Bar_Clone = Instantiate(HP_Bar, pos, Quaternion.identity) as GameObject; HP_Bar_Clone.transform.SetParent(existEnemys[i].transform); ms.HP_Slider = existEnemys [i].GetComponentInChildren <Slider> (); ms.HP_Slider.maxValue = ms.HP; counter++; if (counter >= monsterCount) { StopCoroutine(routine); } return; } } }
void Hiding() { mon = transform.GetComponent <MonsterStatus>(); td = GetComponent <TestCode>(); td.spd = 10f; // Debug.Log("hiding"); float distance = Vector3.Distance(td.objEndCube.transform.position, transform.position);// target과 나의 distance 를 잡아준다 . if (distance > mon.monsterrad + 3f) { transform.LookAt(td.objEndCube.transform.position); SetState(State.Hiding); td.enabled = true; td.objEndCube = HPoints[hidingpointindex]; td.objStartCube = monster; // StopAllCoroutines(); } else { td.enabled = false; Debug.Log("transfer"); StartCoroutine("TransfertoSleeping", 0.5f); } }
private void HitTargetMonster(Collider2D other) { SoundManager.instance.PlayHitSound(); MonsterStatus monsterStatus = other.gameObject.GetComponent <MonsterStatus>(); _monster = other.gameObject; Vector3 forceDir; if (_monster.transform.position.x >= transform.position.x) { forceDir = Vector3.right; } else { forceDir = Vector3.left; } _monster.GetComponent <MonsterMovement>().OnHit(_hitForceMagnitude, forceDir); GameObject particle = Instantiate(ParticleOnHit, _monster.transform.position, _monster.transform.rotation); Destroy(particle, 2.0f); monsterStatus.LoseHp(_character.GetComponent <CharacterStatus>().AttackPower); }
void OnTriggerEnter2D(Collider2D tmp) { if (tmp.gameObject.CompareTag("Player")) { AttackTarget = tmp.gameObject.transform; _MonsterStatus = MonsterStatus.Move; } }
private void Awake() { player = GameObject.FindGameObjectWithTag("Player"); monsterStatus = GetComponent <MonsterStatus>(); rigid = GetComponent <Rigidbody>(); agent = GetComponent <NavMeshAgent>(); anim = GetComponent <Animator>(); }
// Update is called once per frame void Update() { if (_targetStatus != null && _targetStatus.IsDead) { TargetMonster = null; _targetStatus = null; } }
private void Awake() { monsterStatus = GetComponent <MonsterStatus>(); monsterMovement = GetComponent <NewMonsterMovement>(); animator = GetComponent <Animator>(); agent = GetComponent <UnityEngine.AI.NavMeshAgent>(); hitbox = transform.Find("Hitbox").GetComponent <BoxCollider>(); }
/// <summary> /// Initializes a new instance of the <see cref="MonsterViewModel"/> class. /// </summary> public MonsterViewModel([NotNull] MonsterStatus monsterStatus, [NotNull] IEnumerable <AffectDescription> affectsToDisplay, int number, double affectsPanelWidth) : base(monsterStatus, affectsToDisplay, number, affectsPanelWidth) { Assert.ArgumentNotNull(monsterStatus, "monsterStatus"); Assert.ArgumentNotNull(affectsToDisplay, "affectsToDisplay"); MonsterStatus = monsterStatus; }
void OnTriggerExit2D(Collider2D tmp) { if (tmp.gameObject.CompareTag("Player")) { AttackTarget = null; _MonsterStatus = MonsterStatus.Normal; } }
void Update() { SetAnimation(lastFramePos); lastFramePos = this.transform.position; switch (_MonsterStatus) { case MonsterStatus.Normal: { break; } case MonsterStatus.Move: { AttackRange.enabled = true; this.transform.position = Vector3.MoveTowards(this.transform.position, AttackTarget.position, Move_speed * Time.deltaTime); break; } case MonsterStatus.Escape: { AttackRange.enabled = false; for (int i = 0; i < AllSkills.Length; i++) { if (!AllSkills[i].IsCooling) { _MonsterStatus = MonsterStatus.Move; return; } } this.transform.position = Vector3.MoveTowards(this.transform.position, 2.0f * this.transform.position - 1.0f * AttackTarget.position, 0.5f * Move_speed * Time.deltaTime); break; } case MonsterStatus.Attack: { for (int i = 0; i < AllSkills.Length; i++) { if (AllSkills[i].IsCooling) { continue; } else { StartCoroutine(AllSkills[i].UseSkill(0.2f)); return; } } _MonsterStatus = MonsterStatus.Escape; break; } default: { break; } } }
public void SetStatus(MonsterStatus status) { _hpSlider = Helper.Find <Slider>(transform, "HP"); _backColor = Helper.Find <Image>(transform, "HP/Background"); _fillColor = Helper.Find <Image>(transform, "HP/FillArea/Fill"); _transform = _hpSlider.GetComponent <RectTransform>(); _status = status; InstanceID = _status.InstanceID; }
/// <summary> /// 내가 사망했는지 체크하고, 사망한 경우는 코루틴으로 지연되는 처리를 모두 중지시키고, 사망 상태로만 전이시킨다. /// </summary> /// <param name="myAttribute"></param> /// <returns></returns> bool ProcessDeadState(MonsterStatus myAttribute) { if (myAttribute.current_hp <= 0) { StopAllCoroutines(); SetState(State.Dead); return(true); } return(false); }
void Attack() { Debug.Log("attk"); MonsterStatus mon = gameObject.GetComponent <MonsterStatus>(); plyerrad.current_hp -= mon.damage; StartCoroutine("TransfertoIdle", mon.Atk_delay / 10);// monster의 기본 대미지 시간과 몬스터의 대미지의 크기에 따른 딜레이 }
public void Hurt(int rawScore) { CurrentHealth -= rawScore; OnMonsterHurt(rawScore); if (IsAlive()) { return; } CurrentStatus = MonsterStatus.Killed; DisplayMonsterInformationEnd("You killed that!"); }
protected override CharStatus InitStatus() { CharStatus st = new MonsterStatus(false, Template.MaxHp, Template.MaxMp, Template); //TODO make a template for this GetData().SetVisibleHp(st.Hp); GetData().SetVisibleMaxHp(st.MaxHp); GetData().SetMoveSpeed(st.MoveSpeed); GetData().SetRotateSpeed((int)st.RotationSpeed); return(st); }
void OnTriggerEnter2D(Collider2D other) { switch (other.gameObject.tag) { case "Monster": monsterStatus = other.gameObject.GetComponent <MonsterStatus>(); monsterStatus.MonsDamage(ATK); Destroy(this.gameObject); break; } }
public void SetValue(MonsterStatus status, int newVal) { if (Stati.ContainsKey(status)) { Stati[status] = newVal; } else { Stati.Add(status, newVal); } }
// Use this for initialization void Start() { mc = this.GetComponent <monsterControl>(); ms = this.GetComponent <MonsterStatus>(); ms.onMonsterHurtHandler += angryAttacker; if (!ms.isBoss) { mc.onMonsterHitBlockHandler += cancelAngry; } this.Invoke("doWalk", 3f); }
void Start() { p_status = GameObject.Find("Pbody").GetComponent <PlayerStatus>(); m_status = GameObject.FindGameObjectWithTag("Enemy").GetComponent <MonsterStatus>(); P_unitstats = GameObject.Find("Pbody").GetComponent <UnitStats>(); M_unitstats = GameObject.FindGameObjectWithTag("Enemy").GetComponent <UnitStats>(); turn_Counter = 1; can_attack = false; Encounter = false; }
public void Init() { cStatus = new MonsterStatus(); cStatus.iMaxHp = 50; cStatus.fHp = cStatus.iMaxHp; cStatus.fAtk = 10; cStatus.fSpeed = 1; cStatus.fStrikeRange = 2.0f; bCanAttack = new bool[Dungeon.BattleCharacter]; }
void hitBlock(Collider2D col) { ms = gameObject.GetComponent <MonsterStatus>(); if (col.CompareTag("Block_Monster")) { moveBack(distance()); following = false; if (onMonsterHitBlockHandler != null) { onMonsterHitBlockHandler(); } } }
void Start() { if (GetComponent <BossController>()) { bStatus = GetComponent <BossController>().Status; } else if (GetComponent <MonsterController>()) { mStatus = GetComponent <MonsterController>().Status; } pCon = GameObject.Find("Controller").GetComponent <PlayerController>(); }
private void OnMonsterRemoved(object self, MonsterStatus status) { if (status != MonsterStatus.Killed) { return; } currentKillCount += 1; Progress = currentKillCount / (float)toKillCount; if (currentKillCount > toKillCount || Math.Abs(Progress - 1) < 0.001f) //Double security here { Complete(); } }
void Start() { mController = FindObjectOfType <MoveController>(); status = GetComponent <MonsterController>().Status; if (status.type != MonsterStatus.MonsterType.MAGIC) { resPoint = new GameObject(Status.type.ToString() + "Resporn"); resPoint.transform.SetParent(transform.parent); resPoint.transform.position = transform.position; resPoint.AddComponent <MonsterResporn>(); resPoint.GetComponent <MonsterResporn>().MType = status.type; } }
void Start() { M_collision_enabled = monster_area.GetComponent <BoxCollider2D>(); M_collision_enabled.enabled = false; rend = GetComponent <Renderer>(); rend.enabled = true; monster = GameObject.FindGameObjectWithTag("Enemy"); next_t = monster.GetComponent <Monster_behavior>(); attackButton = attack_Button.GetComponent <AttackButton>(); m_status = monster.GetComponent <MonsterStatus>(); m_status.attack = false; }