コード例 #1
0
    public Character(CharacterPawn pawn, IInputSource inputSource, CharacterStatus status, CharacterStateController stateController, CharacterStateController weaponStateController, int teamId, CharacterInfo info)
    {
        Status                = status;
        Health                = new FloatReactiveProperty(Status.MaxHealth.Value);
        Pawn                  = pawn;
        InputSource           = inputSource;
        StateController       = stateController;
        WeaponStateController = weaponStateController;
        TeamId                = teamId;
        Info                  = info;
        Inventory             = new BasicInventory(this);

        pawn.SetCharacter(this);

        StateController.Initialize(this);
        WeaponStateController.Initialize(this);

        var inputSourceDisposable = inputSource as IDisposable;

        if (inputSourceDisposable != null)
        {
            _compositeDisposable.Add(inputSourceDisposable);
        }

        Observable.EveryUpdate().Subscribe(OnUpdate).AddTo(_compositeDisposable);
        status.MoveSpeed.Subscribe(UpdatePawnSpeed).AddTo(_compositeDisposable);
        Health.Subscribe(OnHealthChange);           //.AddTo( _compositeDisposable );

        Instances.Add(this);

        Status.ModifierCalculator.Changed += OnModifiersChange;
    }
コード例 #2
0
ファイル: Room.cs プロジェクト: brooshe/Roguelike
        private void OnPawnEnter(CharacterPawn pawn)
        {
            if (PawnsInRoom == null)
            {
                PawnsInRoom = new HashSet <CharacterPawn>();
            }
            PawnsInRoom.Add(pawn);

            if (!bExplored)
            {
                UIManager.Instance.QuestLog(string.Format("You found a new room at {0},{1},{2}", LogicPosition.x, LogicPosition.y, LogicPosition.z));
                bExplored = true;
            }
            else
            {
                UIManager.Instance.QuestLog(string.Format("You entered a room which located at {0},{1},{2}", LogicPosition.x, LogicPosition.y, LogicPosition.z));
            }

            if (pawn.controller != null)
            {
                UIManager.Instance.SetRoomName(RoomProp.roomName);
            }

            Property.Room prop = RoomProp;
            if (prop.EntryEvent != null)
            {
                prop.EntryEvent.CheckAndExecute(pawn, this);
            }
            //this.Show(true);
            pawn.curRoom = this;
        }
コード例 #3
0
        protected override void SetParam(CharacterPawn pawn, ActorInstance.ActorBase actor)
        {
            base.SetParam(pawn, actor);
#if UNITY_EDITOR
            ParameterInfo[] param = method.GetParameters();
            if (param.Length != 5)
            {
                Debug.LogErrorFormat("Function {0} param num NOT equal to 3!", Function);
            }
            else if (param[2].ParameterType != typeof(System.String))
            {
                Debug.LogErrorFormat("Function {0} param 2 is NOT string!", Function);
            }
            else if (param[3].ParameterType != typeof(System.String))
            {
                Debug.LogErrorFormat("Function {0} param 3 is NOT string!", Function);
            }
            else if (param[4].ParameterType != typeof(System.String))
            {
                Debug.LogErrorFormat("Function {0} param 4 is NOT string!", Function);
            }
#endif
            arrObj.Add(strParam0);
            arrObj.Add(strParam1);
            arrObj.Add(strParam2);
        }
コード例 #4
0
ファイル: WeaponPickup.cs プロジェクト: Dethgorn/SwUAT
 protected override void OnPickup(CharacterPawn picker)
 {
     if (picker != null)
     {
         picker.EquipWeapon(weapon);
     }
 }
コード例 #5
0
ファイル: AttributeChecker.cs プロジェクト: brooshe/Roguelike
        public override bool CheckPlayer(CharacterPawn pawn, ActorInstance.ActorBase actor)
        {
            int value = 0;

            switch (Attribute)
            {
            case CharacterAtrribute.STRENGTH:
                value = pawn.CurStrength;
                break;

            case CharacterAtrribute.AGILITY:
                value = pawn.CurAgility;
                break;

            case CharacterAtrribute.INTEL:
                value = pawn.CurIntel;
                break;

            case CharacterAtrribute.SPIRIT:
                value = pawn.CurSpirit;
                break;
            }

            int num = Dice.RandomDice(value);

            return(num >= MinValue && num <= MaxValue);
        }
コード例 #6
0
ファイル: Room.cs プロジェクト: brooshe/Roguelike
 private void OnPawnExit(CharacterPawn pawn)
 {
     if (PawnsInRoom != null)
     {
         PawnsInRoom.Remove(pawn);
     }
 }
コード例 #7
0
ファイル: EventExecution.cs プロジェクト: brooshe/Roguelike
    public static void InvokeEventSequence(CharacterPawn pawn, ActorBase actor, string sequenceName)
    {
        Property.EventSequence sequence = Resources.Load <Property.EventSequence>(string.Format("Events/EventSequence/{0}", sequenceName));

        sequence.Init();
        sequence.CheckAndExecute(pawn, actor);
    }
コード例 #8
0
ファイル: EventExecution.cs プロジェクト: brooshe/Roguelike
    public static void PlayEffect(CharacterPawn pawn, ActorBase actor, string name)
    {
        UIManager.Instance.QuestLog("Your touched a trigger.");

        GameObject prefab = Resources.Load <GameObject>(name);

        Object.Instantiate <GameObject>(prefab, actor.actorTrans);
    }
コード例 #9
0
 public EventTimerInst(EventTimer timer, EventFunction eventFunc, CharacterPawn pawn, ActorInstance.ActorBase actor)
 {
     this.timer         = timer;
     this.funcToExecute = eventFunc;
     this.pawn          = pawn;
     this.actor         = actor;
     timer.Init(this);
 }
コード例 #10
0
ファイル: Minimap.cs プロジェクト: brooshe/Roguelike
 public void Dispose()
 {
     minimapImgBasement = null;
     minimapImgGround   = null;
     minimapImgUpstairs = null;
     mainCharImg        = null;
     mainPawn           = null;
 }
コード例 #11
0
ファイル: Room.cs プロジェクト: brooshe/Roguelike
 public bool TryExit(CharacterPawn pawn)
 {
     Property.Room prop = RoomProp;
     if (prop.ExitEvent != null)
     {
         return(prop.ExitEvent.CheckAndExecute(pawn, this));
     }
     return(true);
 }
コード例 #12
0
ファイル: Room.cs プロジェクト: brooshe/Roguelike
        private void OnTriggerExit(Collider collider)
        {
            CharacterPawn pawn = collider.GetComponent <CharacterPawn>();

            if (pawn != null)
            {
                OnPawnExit(pawn);
            }
        }
コード例 #13
0
ファイル: EventExecution.cs プロジェクト: brooshe/Roguelike
    public static void BonusAttribute(CharacterPawn pawn, ActorBase actor, Property.CharacterAtrribute attrib, int value)
    {
        int pre = 0;

        switch (attrib)
        {
        case Property.CharacterAtrribute.STRENGTH:
            pre = pawn.CurStrengthLev;
            break;

        case Property.CharacterAtrribute.AGILITY:
            pre = pawn.CurAgilityLev;
            break;

        case Property.CharacterAtrribute.INTEL:
            pre = pawn.CurIntellLev;
            break;

        case Property.CharacterAtrribute.SPIRIT:
            pre = pawn.CurSpiritLev;
            break;
        }
        int lev = Mathf.Clamp(pre + value, 0, 7);

        //TODO: maybe this trigger make attribute level less than 0, which would kill player
        switch (attrib)
        {
        case Property.CharacterAtrribute.STRENGTH:
            pawn.CurStrengthLev = lev;
            break;

        case Property.CharacterAtrribute.AGILITY:
            pawn.CurAgilityLev = lev;
            break;

        case Property.CharacterAtrribute.INTEL:
            pawn.CurIntellLev = lev;
            break;

        case Property.CharacterAtrribute.SPIRIT:
            pawn.CurSpiritLev = lev;
            break;
        }

        if (pre > lev)
        {
            UIManager.Instance.QuestLog(string.Format("Your {0} has decreased {1} level", attrib, pre - lev));
        }
        else if (pre < lev)
        {
            UIManager.Instance.QuestLog(string.Format("Your {0} has increased {1} level", attrib, lev - pre));
        }
        else
        {
            UIManager.Instance.QuestLog(string.Format("Your {0} level stays the same.", attrib));
        }
    }
コード例 #14
0
        public override void OnExit(CharacterPawn pawn, TriggerMono mono)
        {
            BlockerMono blocker = mono as BlockerMono;

            if (pawn != null && pawn.controller != null && pawn.PawnCollider != null && blocker != null && blocker.blockerCollider != null)
            {
                Physics.IgnoreCollision(pawn.PawnCollider, blocker.blockerCollider, false);
            }
        }
コード例 #15
0
ファイル: GameLoader.cs プロジェクト: brooshe/Roguelike
    public void EnterScene(CharacterPawn pawn)
    {
        Connector connector = lobby.FindEntry(IntVector3.Invalid);

        if (connector != null)
        {
            connector.TryGetThrough(pawn, IntVector3.Invalid);
        }
    }
コード例 #16
0
        protected virtual bool CheckAvailable(CharacterPawn pawn)
        {
            if (triggerProp.Checker != null)
            {
                return(triggerProp.Checker.CheckPlayer(pawn, this));
            }

            return(true);
        }
コード例 #17
0
    private void OnTriggerEnter(Collider other)
    {
        CharacterPawn otherpawn = other.GetComponent <CharacterPawn>();

        if (otherpawn != null)
        {
            OnPickup(otherpawn);
            Destroy(gameObject);
        }
    }
コード例 #18
0
        public override bool Interupt(CharacterPawn pawn)
        {
            if (pawn == null || pawn.Velocity.sqrMagnitude > 0.001f)
            {
                Debug.LogWarning("Timer interrupt!");
                return(true);
            }

            return(false);
        }
コード例 #19
0
ファイル: Minimap.cs プロジェクト: brooshe/Roguelike
 public void SyncPawn(CharacterPawn pawn)
 {
     mainPawn = pawn;
     if (mainPawn.curRoom != null)
     {
         IntVector3 logicPos = mainPawn.curRoom.LogicPosition;
         LAYER      layer    = logicPos.y == -1 ? LAYER.BASEMENT : (logicPos.y == 0 ? LAYER.GROUND : LAYER.UPSTAIRS);
         SetLayer(layer);
     }
 }
コード例 #20
0
ファイル: EventExecution.cs プロジェクト: brooshe/Roguelike
 public static void PlayAnimation(CharacterPawn pawn, ActorBase actor, string anim)
 {
     if (anim.Equals("rushtowindow"))
     {
         UIManager.Instance.Message("rushtowindow");
     }
     else if (anim.Equals("rushtowindowStop"))
     {
         UIManager.Instance.Message("rushtowindowStop");
     }
 }
コード例 #21
0
ファイル: EnemyWeapon.cs プロジェクト: Dethgorn/SwUAT
 // Start is called before the first frame update
 void Start()
 {
     player = GameObject.FindGameObjectWithTag("Player");
     target = player.transform;
     // get component
     AITransform = GetComponent <Transform>();
     AIpawn      = GetComponent <CharacterPawn>();
     // grab a random weapon then call the equip weapon
     AIWeapon = defaultWeapons[Random.Range(0, defaultWeapons.Length)];
     AIpawn.EquipWeapon(AIWeapon);
 }
コード例 #22
0
    protected virtual void OnAnimationUpdate(CharacterPawn pawn)
    {
        if (pawn._animationController != null)
        {
            pawn._animationController.SetBool(info.animatorStateName, true);
        }

        if (pawn._weaponAnimationController != null)
        {
            pawn._weaponAnimationController.SetBool(info.weaponAnimatorStateName, true);
        }
    }
コード例 #23
0
ファイル: Connector.cs プロジェクト: brooshe/Roguelike
 protected override bool CheckAvailable(CharacterPawn pawn)
 {
     if (!Available)
     {
         UIManager.Instance.Message("This door is broken");
         return(false);
     }
     if (pawn.RemainMovePoint <= 0)
     {
         UIManager.Instance.Message("Not enough Move-Point!");
         return(false);
     }
     return(true);
 }
コード例 #24
0
ファイル: EventExecution.cs プロジェクト: brooshe/Roguelike
 public static void TriggerRemoteTriggers(CharacterPawn pawn, ActorBase actor, string filterName)
 {
     Property.TriggerFilter filter = Resources.Load <Property.TriggerFilter>(string.Format("Trigger/TriggerFilter/{0}", filterName));
     if (filter != null)
     {
         foreach (Trigger trig in GameLoader.Instance.RemoteTriggers)
         {
             if (filter.Check(trig))
             {
                 trig.OnTriggerSuccess(pawn.controller);
             }
         }
     }
 }
コード例 #25
0
        public override bool CheckAndExecute(CharacterPawn pawn, ActorInstance.ActorBase actor)
        {
            if (pawn.RemainMovePoint <= 0)
            {
                UIManager.Instance.Message("Not enough Move-Point!");
                return(false);
            }

            bool result = base.CheckAndExecute(pawn, actor);

            UIManager.Instance.QuestLog("你触发了" + EventName);
            UIManager.Instance.QuestLog(EventDesc);

            return(result);
        }
コード例 #26
0
        public override bool CheckAndExecute(CharacterPawn pawn, ActorInstance.ActorBase actor)
        {
            if (pawn.RemainMovePoint <= 0)
            {
                UIManager.Instance.Message("Not enough Move-Point!");
                return(false);
            }

            bool result = base.CheckAndExecute(pawn, actor);

            //consume all move-points
            pawn.ConsumeMovePoint(pawn.RemainMovePoint);

            return(result);
        }
コード例 #27
0
 public override bool CheckPlayer(CharacterPawn pawn, ActorInstance.ActorBase actor)
 {
     ActorInstance.Connector door = actor as ActorInstance.Connector;
     if (door != null && door.otherConnector != null)
     {
         string fromRoom = door.otherConnector.parentRoom.RoomProp.roomName;
         foreach (string name in RoomFromList)
         {
             if (fromRoom.Equals(name))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #28
0
 public void Execute(CharacterPawn pawn, ActorInstance.ActorBase actor)
 {
     if (method == null)
     {
         Init();
     }
     if (method != null)
     {
         SetParam(pawn, actor);
         method.Invoke(null, arrObj.ToArray());
     }
     else
     {
         Debug.LogErrorFormat("Function {0} doesn't exist!", Function);
     }
 }
コード例 #29
0
ファイル: EventExecution.cs プロジェクト: brooshe/Roguelike
 public static void TriggerRemoteTriggers(CharacterPawn pawn, ActorBase actor, string filterName, string finderName, string sequenceName)
 {
     Property.TriggerFilter filter   = Resources.Load <Property.TriggerFilter>(string.Format("Trigger/TriggerFilter/{0}", filterName));
     Property.TargetFinder  finder   = Resources.Load <Property.TargetFinder>(string.Format("Trigger/TargetFinder/{0}", finderName));
     Property.EventSequence sequence = Resources.Load <Property.EventSequence>(string.Format("Events/EventSequence/{0}", sequenceName));
     if (filter != null && sequence != null)
     {
         foreach (Trigger trig in GameLoader.Instance.RemoteTriggers)
         {
             if (filter.Check(trig))
             {
                 trig.CallEventSequence(pawn.controller, finder, sequence);
             }
         }
     }
 }
コード例 #30
0
        private void OnTriggerExit(Collider other)
        {
            CharacterPawn pawn = other.GetComponent <CharacterPawn>();

            if (pawn != null && pawn.controller != null)
            {
                if (triggerProp.AutoTrigger)
                {
                    TriggerExitAction(pawn.controller);
                }
                else
                {
                    Debug.Log("RemoveTriggerAction");
                    pawn.controller.TriggerActions.Remove(TriggerAction);
                }
            }
        }
コード例 #31
0
ファイル: CameraBehaviour.cs プロジェクト: OrangeeZ/Crandell
 public void SetTarget( CharacterPawn target )
 {
     this.target = target;
 }
コード例 #32
0
 public override Vector3 GetDirectionTo( CharacterPawn otherPawn )
 {
     return planetTransform.GetDirectionTo( otherPawn.position );
 }
コード例 #33
0
ファイル: CharacterPawn.cs プロジェクト: OrangeeZ/Crandell
 public virtual Vector3 GetDirectionTo( CharacterPawn otherPawn )
 {
     return Vector3.forward;
 }
コード例 #34
0
ファイル: AIInputSource.cs プロジェクト: OrangeeZ/Crandell
 private void OnSawEnemy( CharacterPawn characterPawn )
 {
     targetsSubject.SetValueAndForceNotify( characterPawn.character );
 }