'Visual Basic.NET How to Program, Second Edition
'by Harvey M. Deitel (Author), Paul J. Deitel (Author), Tem R. Nieto (Author)
' Publisher: Prentice Hall; 2 edition (December 11, 2001)
' Language: English
' ISBN-10: 0130293636
' ISBN-13: 978-0130293633
Imports System.IO
Imports System.Collections
Imports System.Windows.Forms
Public Class FrmAgent
Inherits System.Windows.Forms.Form
' options
Friend WithEvents GroupBox1 As GroupBox
Friend WithEvents cmdSpeak As Button
Friend WithEvents mainAgent As AxAgentObjects.AxAgent
' input boxes
Friend WithEvents txtLocation As TextBox
Friend WithEvents txtSpeech As TextBox
Friend WithEvents characterCombo As System.Windows.Forms.ComboBox
Friend WithEvents actionsCombo As System.Windows.Forms.ComboBox
' current agent object
Private mSpeaker As AgentObjects.IAgentCtlCharacter
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Private Sub InitializeComponent()
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(FrmAgent))
Me.txtLocation = New System.Windows.Forms.TextBox()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.characterCombo = New System.Windows.Forms.ComboBox()
Me.cmdSpeak = New System.Windows.Forms.Button()
Me.txtSpeech = New System.Windows.Forms.TextBox()
Me.actionsCombo = New System.Windows.Forms.ComboBox()
Me.mainAgent = New AxAgentObjects.AxAgent()
Me.GroupBox1.SuspendLayout()
CType(Me.mainAgent, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'txtLocation
'
Me.txtLocation.Location = New System.Drawing.Point(16, 24)
Me.txtLocation.Name = "txtLocation"
Me.txtLocation.Size = New System.Drawing.Size(272, 20)
Me.txtLocation.TabIndex = 0
Me.txtLocation.Text = "C:\WINNT\msagent\chars\"
'
'GroupBox1
'
Me.GroupBox1.Controls.AddRange(New System.Windows.Forms.Control() {Me.characterCombo, Me.txtLocation})
Me.GroupBox1.Location = New System.Drawing.Point(8, 104)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(440, 56)
Me.GroupBox1.TabIndex = 1
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "Charcter Name/Location"
'
'characterCombo
'
Me.characterCombo.Enabled = False
Me.characterCombo.Items.AddRange(New Object() {"Genie", "Merlin", "Peedy", "Robby"})
Me.characterCombo.Location = New System.Drawing.Point(304, 24)
Me.characterCombo.Name = "characterCombo"
Me.characterCombo.Size = New System.Drawing.Size(128, 21)
Me.characterCombo.TabIndex = 1
Me.characterCombo.Text = "Select A Character"
'
'cmdSpeak
'
Me.cmdSpeak.Enabled = False
Me.cmdSpeak.Location = New System.Drawing.Point(328, 24)
Me.cmdSpeak.Name = "cmdSpeak"
Me.cmdSpeak.Size = New System.Drawing.Size(104, 32)
Me.cmdSpeak.TabIndex = 3
Me.cmdSpeak.Text = "Speak"
'
'txtSpeech
'
Me.txtSpeech.Enabled = False
Me.txtSpeech.Location = New System.Drawing.Point(8, 16)
Me.txtSpeech.Multiline = True
Me.txtSpeech.Name = "txtSpeech"
Me.txtSpeech.Size = New System.Drawing.Size(280, 80)
Me.txtSpeech.TabIndex = 5
Me.txtSpeech.Text = ""
'
'actionsCombo
'
Me.actionsCombo.Enabled = False
Me.actionsCombo.Location = New System.Drawing.Point(312, 72)
Me.actionsCombo.Name = "actionsCombo"
Me.actionsCombo.Size = New System.Drawing.Size(128, 21)
Me.actionsCombo.TabIndex = 7
Me.actionsCombo.Text = "Select an Action"
'
'mainAgent
'
Me.mainAgent.Enabled = True
Me.mainAgent.Location = New System.Drawing.Point(304, 24)
Me.mainAgent.Name = "mainAgent"
Me.mainAgent.OcxState = CType(resources.GetObject("mainAgent.OcxState"), System.Windows.Forms.AxHost.State)
Me.mainAgent.Size = New System.Drawing.Size(32, 32)
Me.mainAgent.TabIndex = 8
'
'FrmAgent
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(448, 165)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.mainAgent, Me.actionsCombo, Me.txtSpeech, Me.cmdSpeak, Me.GroupBox1})
Me.Name = "FrmAgent"
Me.Text = "Microsoft Agent"
Me.GroupBox1.ResumeLayout(False)
CType(Me.mainAgent, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
' keyDown event handler for locationTextBox
Private Sub txtLocation_KeyDown(ByVal sender As _
Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles txtLocation.KeyDown
If e.KeyCode = Keys.Enter Then
' set character location to text box value
Dim location As String = txtLocation.Text
' initialize characters
Try
' load characters into agent object
mainAgent.Characters.Load( _
"Genie", location + "Genie.acs")
mainAgent.Characters.Load( _
"Merlin", location + "Merlin.acs")
mainAgent.Characters.Load( _
"Peedy", location + "Peedy.acs")
mainAgent.Characters.Load( _
"Robby", location + "Robby.acs")
' disable TextBox location and enable other controls
txtLocation.Enabled = False
txtSpeech.Enabled = True
cmdSpeak.Enabled = True
characterCombo.Enabled = True
actionsCombo.Enabled = True
' set current character to Genie and show
mSpeaker = mainAgent.Characters("Genie")
GetAnimationNames() ' obtain animation name list
mSpeaker.Show(0)
Catch fileNotFound As FileNotFoundException
MessageBox.Show("Invalid character location", _
"Error", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End Try
End If
End Sub ' txtLocation_KeyDown
' speak button event handler
Private Sub cmdSpeak_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles cmdSpeak.Click
' if TextBox is empty, have character ask
' user to type words into TextBox, otherwise
' have character say words in TextBox
If txtSpeech.Text = "" Then
mSpeaker.Speak( _
"Please type the words you want me to speak", "")
Else
mSpeaker.Speak(txtSpeech.Text, "")
End If
End Sub ' cmdSpeak_Click
' click event for agent
Private Sub mainAgent_ClickEvent(ByVal sender As Object, _
ByVal e As AxAgentObjects._AgentEvents_ClickEvent) _
Handles mainAgent.ClickEvent
mSpeaker.Play("Confused")
mSpeaker.Speak("Why are you poking me?", "")
mSpeaker.Play("RestPose")
End Sub ' mainAgent_ClickEvent
' comboBox changed event, switch active agent
Private Sub characterCombo_SelectedIndexChanged(ByVal _
sender As Object, ByVal e As System.EventArgs) Handles _
characterCombo.SelectedIndexChanged
ChangeCharacter(characterCombo.Text)
End Sub ' characterCombo_SelectedIndexChanged
' hide current character and show new
Private Sub ChangeCharacter(ByVal name As String)
mSpeaker.Hide(0)
mSpeaker = mainAgent.Characters(name)
GetAnimationNames() ' regenerate animation name list
mSpeaker.Show(0)
End Sub ' ChangeCharacter
' get animation names and store in arraylist
Private Sub GetAnimationNames()
' ensure thread safety
SyncLock (Me)
' get animation names
Dim enumerator As IEnumerator = _
mainAgent.Characters.Character( _
mSpeaker.Name).AnimationNames.GetEnumerator()
Dim voiceString As String
' clear cboActions combo box
actionsCombo.Items.Clear()
mSpeaker.Commands.RemoveAll()
' copy enumeration to ArrayList
While enumerator.MoveNext()
' remove underscores in speech string
voiceString = Convert.ToString(enumerator.Current)
voiceString = voiceString.Replace("_", "underscore")
actionsCombo.Items.Add(enumerator.Current)
' add all animations as voice enabled commands
mSpeaker.Commands.Add(Convert.ToString( _
enumerator.Current), , voiceString, True, False)
End While
' add custom command
mSpeaker.Commands.Add("MoveToMouse", "MoveToMouse", _
"MoveToMouse", True, True)
End SyncLock
End Sub ' GetAnimationNames
' user selects new action
Private Sub actionsCombo_SelectedIndexChanged(ByVal sender _
As System.Object, ByVal e As System.EventArgs) _
Handles actionsCombo.SelectedIndexChanged
mSpeaker.Stop()
mSpeaker.Play(actionsCombo.Text)
mSpeaker.Play("RestPose")
End Sub ' actionsCombo_SelectedIndexChanged
' handles agent commands
Private Sub mainAgent_Command(ByVal sender As Object, _
ByVal e As AxAgentObjects._AgentEvents_CommandEvent) _
Handles mainAgent.Command
' get UserInput object
Dim command As AgentObjects.IAgentCtlUserInput = _
CType(e.userInput, AgentObjects.IAgentCtlUserInput)
' change character if user speaks character name
If (command.Voice = "Peedy" OrElse _
command.Voice = "Robby" OrElse _
command.Voice = "Merlin" OrElse _
command.Voice = "Genie") Then
ChangeCharacter(command.Voice)
Return
End If
' send agent to mouse
If command.Name = "MoveToMouse" Then
mSpeaker.MoveTo(Convert.ToInt16( _
Cursor.Position.X - 60), Convert.ToInt16( _
Cursor.Position.Y - 60))
Return
End If
' play new animation
mSpeaker.Stop()
mSpeaker.Play(command.Name)
End Sub ' mainAgent_Command
End Class ' FrmAgent
' *************************************************************
' * (C) Copyright 2002 by Deitel & Associates, Inc. *
' * and Prentice Hall. *
' * All Rights Reserved. *
' * *
' * DISCLAIMER: The authors and publisher of this book have *
' * used their best efforts in preparing the book. These *
' * efforts include the development, research, and testing of *
' * the theories and programs to determine their *
' * effectiveness. The authors and publisher make no warranty *
' * of any kind, expressed or implied, with regard to these *
' * programs or to the documentation contained in these books.*
' * The authors and publisher shall not be liable in any event*
' * for incidental or consequential damages in connection *
' * with, or arising out of, the furnishing, performance, or *
' * use of these programs. *
' *************************************************************